繁体   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