簡體   English   中英

.NET編譯器 - 內置嵌套循環優化嗎?

[英].NET Compiler — Are there nested loop optimizations built-in?

考慮下面的代碼片斷,單打的三維陣列的遍歷,在執行效率而言,假設process1()process2()需要大量的時間來執行相同的長度:

float arr[mMax,nMax,oMax];

for (m = 0; m < mMax; m++)
  for (n = 0; n < nMax; n++)
    for (o = 0; o < oMax; o++)
      { process1(arr[m,n,o]); }

for (o = 0; o < oMax; o++)
  for (n = 0; n < nMax; n++)
    for (m = 0; m < mMax; m++)
      { process2(arr[m,n,o]); }

現在,眾所周知,C#將.NET框架中的數組組織為行主結構。 沒有任何優化,我會假設第一個循環的執行速度比第二個循環快得多。

問題是:CLR的JIT或cs.exe / vb.exe編譯器是否檢測並優化這樣的循環,可能重新排序嵌套,或者我應該始終保持警惕潛在的性能命中,特別是在可能發生的情況方面如果我試圖並行化循環?

這是您在C或C ++編譯器中可能期望的那種優化。 它實際上是當前的,這個精確的優化在Build 2013會話的視頻中提到。 雖然針對C / C ++程序員,但很多內容對C#程序員來說也很有趣。 存儲器子系統的約束同樣相關。 實際上並不確定優化是否進入了VS2013,iirc還存在一個問題,它也會使本機編譯器過於緩慢。

但不,抖動優化器的預算非常緊張。 花費太多時間會導致顯着的啟動延遲和執行暫停,因此無法承受這種分析。 C#程序員必須自己做。

暫無
暫無

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

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