gpt4 book ai didi

c# - .NET 编译器——是否内置了嵌套循环优化?

转载 作者:太空狗 更新时间:2023-10-29 23:32:01 24 4
gpt4 key购买 nike

考虑以下代码片段,一个三维数组的单曲遍历,在执行效率方面,假设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++ 编译器中进行的优化。它实际上是最新的,在 this video 中提到了这个精确的优化。 Build 2013 session 。虽然针对 C/C++ 程序员,但其中涵盖的很多内容对 C# 程序员也很有趣。内存子系统的约束同样相关。实际上不确定优化是否进入 VS2013,iirc 存在一个问题,它也会大大降低 native 编译器的速度。

但不,抖动优化器的预算非常紧张。花费太多时间会导致明显的启动延迟和执行暂停,因此它无法承受这种分析。 C# 程序员必须自己做这件事。

关于c# - .NET 编译器——是否内置了嵌套循环优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com