Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在循环中调用'n'函数与每次调用一个函数进行'n'循环之间是否存在速度差异?_Performance_Loops_Language Agnostic - Fatal编程技术网

Performance 在循环中调用'n'函数与每次调用一个函数进行'n'循环之间是否存在速度差异?

Performance 在循环中调用'n'函数与每次调用一个函数进行'n'循环之间是否存在速度差异?,performance,loops,language-agnostic,Performance,Loops,Language Agnostic,考虑以下两个示例: for (int i = 0; i < someValue; ++i) { function1(i); function2(i); } for(int i=0;i

考虑以下两个示例:

for (int i = 0; i < someValue; ++i) {
    function1(i);
    function2(i);
}
for(int i=0;i
vs

for(int i=0;i

使用一种表单比使用另一种表单会有任何性能提升吗?(i)考虑比较是非常便宜的。

< p>使用两个循环,你要增加编译器必须检查的次数的两倍(在每次迭代中检查i的值两次而不是一次)。加上额外的上下文切换(使你的流水线更频繁地被刷新)。 如果您的编译器执行循环展开,那么我认为您不会看到太多差异。如果您的系统具有超线程技术,并且函数使用不同的资源(内存、int、float与all int或all mem或all float),将它们放在同一个循环中会更快

性能差异的大小取决于您使用的编译器选项、函数需要的资源、管道的深度以及系统的基本架构


如果不使用任何性能调整技巧,单循环应该运行得更快。虽然,除非上循环索引是一个巨大的值,否则性能上的差异可能可以忽略不计(如果单个循环“更快”),但答案确实是,“它取决于”很多事情。

一如既往,它取决于。这一次,它取决于函数本身

有一种情况下,2-loop变体可能更快。此时function2会导致function1需要的所有数据在CPU缓存中被覆盖,反之亦然。这样,每次调用其中一个函数时,都需要在缓存中重新建立它们的数据

OTOH,对于2个循环,function1的数据在第一个循环期间保留在缓存中,function2的数据在第二个循环期间保留在缓存中。这将显著加快速度。不利的一面是跳转、索引增量和检查的成本,但这可能并不明显

for (int i = 0; i < someValue; ++i) {
    function1(i);
}

for (int i = 0; i < someValue; ++i) {
    function2(i);
}