簡體   English   中英

Speedwise,Pharo 與 Python3 相比如何?

[英]Speedwise, how does Pharo compare to Python3?

我在編程方面沒有太多經驗,但我會一點 Python3,現在我正在邁出學習 Pharo 的第一步。 我仍然不熟悉面向對象編程或 class 瀏覽器,但我已經學習了 ProfStef 教程,並且我正在玩 Playground 上的小程序,以熟悉語法。

我首先好奇的是這兩種語言在速度方面的比較,因為我在某處讀到 Pharo 內置了 JIT 編譯器。所以我用兩種語言編寫了一個異想天開的小腳本,生成了 800 萬個數字, 過濾其中的1/3,對每個計算1/sqrt(x),對結果求和,並重復該過程一百次,每次稍微改變間隔,最后再次對結果求和,並對整個過程進行計時. 不是一個合適的基准,只是一個獲得數量級估計的練習,但我試圖讓兩個版本盡可能相似。

Python 3 版本:

import time, math

mega = lambda n: sum([1/math.sqrt(1 + i + n) for i in range(8000000) if (i + 1) // 3 == 0])
start = time.time()
print(sum([mega(n + 1) for n in range(100)]))
stop = time.time() - start
print(stop)

Python 3.8.5 的結果(默認,2020 年 7 月 28 日,12:59:40):

34.7701230607214
52.75216603279114

法羅 8 版本:

| mega range start stop |.

range := [:n | (((1 to: 8000000) select: [:j | (j quo: 3) = 0]) collect: [:i | 1 / (n + i) sqrt]) sum].
start := DateAndTime  now.
Transcript show: (((1 to: 100) collect: [:n | range value: n]) sum); cr.
stop := (DateAndTime now - start) asSeconds.
Transcript show: stop; cr.

Pharo-8.0.0+build.1141.sha.1b7a8d8203fce2a57794451f555bba4222614081(64 位)的結果:

34.7701230607214
45

正如我所料,Pharo 版本運行得更快,但幅度不大,為 45 秒,而 Python 則略高於 52 秒。 花費的時間減少了大約 13%。 所以我猜他們的速度大約是相同的數量級。 這是典型的情況嗎?

這種測試並不能說明太多。 主要原因是大部分計算包括重復發送相同的消息到相同類的實例( quo:=用於select:/+sqrtcollect:等)。 這意味着諸如方法查找之類的耗時(內部)操作僅發生一次,然后被困在內聯緩存中。 因此,您的系統在運行這些基准測試時可能會優於另一個系統,而在運行“真實”應用程序時則要慢得多。 除了(單態或多態)內聯緩存(減少了對方法查找的需求)之外,其他不同的技術還有垃圾收集器的性能、方法內聯(用目標代碼的副本替換發送站點)、寄存器分配(用於最小化 memory 訪問),begin become:消息的性能等。眾多因素使得測量更復雜的代碼片段變得可取,嘗試像我剛才提到的那樣嘗試鍛煉已知的瓶頸。 有時,一個小改動可能會暴露系統隱藏的優勢(或劣勢)。 所以我的建議是,為了進行這種分析,你應該更加努力地設計測試,以測量系統如何響應特定類型的壓力。

雖然仍然不是那么慣用的小話,

| range start stop |.

range := [ :n | (1 to: 8000000) inject: 0 into: [:sum :in | 
    ((in quo: 3) = 0 )
        ifTrue: [1 / ( n + in) sqrt + sum] 
        ifFalse: [sum]]].
start := DateAndTime  now.
Transcript show: (((1 to: 100) collect: [:n | range value: n]) sum); cr.
stop := (DateAndTime now - start) asSeconds.
Transcript show: stop; cr.

快 2.5 倍。 哪一種強調了萊安德羅的觀點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM