簡體   English   中英

Pharo系統調整選項

[英]Pharo System Tuning Options

我是StackOverflow的新手,正在尋找技巧並幫助在Windows環境中調優Pharo 5.0。

我的PC運行的是Windows 10,CPU為I5-4670K(4 Ghz),而Plextor 512G SSD為C驅動器,其中Pharo 5.0已加載並運行。

下面是我用來理解Pharo在性能和計算精度方面的行為的一組代碼。

  | x y |
  x := 0.
  y := 400000000.
  [1 to: 2000000000 do: [ :i | 
      x := x + 0.2]] timeToRun

執行需要2分鍾8.281秒。 如果我從迭代次數中剔除一個零,那么完成只需1.762秒。 迭代次數超過執行時間的70倍以上。 似乎我遇到了一個系統邊界,這樣兩個案例之間的執行時間增長遠遠超過10倍。

欣賞任何提示,並幫助微調Pharo 5.0 VM,以便我可以減少這種意外和不良的系統行為?

ps在執行期間,Windows任務管理器未報告磁盤活動的任何更改。 幾乎所有執行都是RAM和CPU操作。 順便說一句,除非你有一個更快的PC,請不要嘗試在迭代次數上添加另一個零,花了這么長時間我不得不打破執行。

歡迎來到SO(以及smalltalk標簽!)

首先請注意臨時y在這里沒有扮演任何角色,所以我們可以簡化一些片段

| x |
x := 0.
[1 to: 200000000 * 10 do: [ :i | 
  x := x + 0.2]] timeToRun

你比較的

| x |
x := 0.
[1 to: 200000000 * 1 do: [ :i | 
  x := x + 0.2]] timeToRun

第一個版本的原因不僅僅是第二個版本慢了10倍,而前者是塊變量iSmallInteger域移動到LargeInteger域。 因此,每當塊增加i ,當i超過SmallInteger邊界時,此處發生的加法i := i + 1涉及LargeInteger算法,該算法比SmallInteger算法慢。

那么LargeInteger算術會發生多少次? 好吧,要計算我們只需要從200000000 * 10減去SmallInteger maxVal

(200000000 * 10) - SmallInteger maxVal  = 926,258,177

意思是Pharo在大整數i上執行那么多次操作。

請注意,如果我們有的話

| x |
x := 0.
[
  10 timesRepeat: [1 to: 200000000 * 1 do: [ :i | x := x + 0.2]]
] timeToRun

我們花費的時間大約是一次迭代的10倍。


附錄

請不要將上面的解釋視為表明LargeInteger算術在Pharo中表現不佳。 相反,Pharo在使這樣的計算有效方面做得很好。

幕后花絮Pharo使用基元進行這些操作,同時為程序員提供了一個獨特且一致的視圖和Integer算術API。 事實上,如果你試圖在另一個沒有VM支持LargeInteger方言中做同樣的LargeInteger你將不得不等待很長時間才能得到計算結果。

暫無
暫無

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

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