【发布时间】:2013-07-17 19:02:56
【问题描述】:
考虑下面的代码sn-p,一个单数三维数组的遍历,在执行效率方面,假设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# .net task-parallel-library compiler-optimization