为什么这段代码被认为是优化的?
reason why this code is considered optimized?
我正在优化一些代码并遇到了这个,有人能告诉我为什么这段代码更多 'optimized'
for (i = 0; i < 1000; i+=2){
float var = numberOfEggs*arrayX[i] + arrayY[i];
arrayY[i+1] = var;
arrayY[i+2] = numberOfEggs*arrayX[i+1] + var;
}
比这个版本?
for(long i = 0; i < 1000 ; ++i)
arrayY[i+1] = numberOfEggs*arrayX[i] + arrayY[i];
感谢任何帮助,谢谢!
第一个例子是每次迭代执行两个赋值。你可以通过增量语句来判断。
这称为循环展开。通过每次迭代执行两次分配,您将删除一半的分支。
大多数处理器不喜欢分支指令。处理器需要判断是否重新加载指令缓存(分支预测)。每次迭代至少有两个分支。第一个是为了比较,第二个是循环回比较。
要进行实验,请尝试每次迭代使用 4 个分配,然后进行分析。
我正在优化一些代码并遇到了这个,有人能告诉我为什么这段代码更多 'optimized'
for (i = 0; i < 1000; i+=2){
float var = numberOfEggs*arrayX[i] + arrayY[i];
arrayY[i+1] = var;
arrayY[i+2] = numberOfEggs*arrayX[i+1] + var;
}
比这个版本?
for(long i = 0; i < 1000 ; ++i)
arrayY[i+1] = numberOfEggs*arrayX[i] + arrayY[i];
感谢任何帮助,谢谢!
第一个例子是每次迭代执行两个赋值。你可以通过增量语句来判断。
这称为循环展开。通过每次迭代执行两次分配,您将删除一半的分支。
大多数处理器不喜欢分支指令。处理器需要判断是否重新加载指令缓存(分支预测)。每次迭代至少有两个分支。第一个是为了比较,第二个是循环回比较。
要进行实验,请尝试每次迭代使用 4 个分配,然后进行分析。