c++ - 索引和替换的计算成本
问题描述
假设我有以下代码用于backsubstitution。
for (int i = n - 1; i >= 0; i--) {
double temp = b[i];
if (i != n - 1) {
for (int j = i + 1; j < n; j++)
temp -= A[i][j] * b[j];
}
b[i] = temp/A[i][i];
}
但对于我作为编程新手来说,以下内容似乎更简单:
for (int i = n - 1; i >= 0; i--) {
if (i != n - 1) {
for (int j = i + 1; j < n; j++)
b[i] -= A[i][j] * b[j];
}
b[i] /= A[i][i];
}
b[i]
这需要每次从 迭代j = i+1
到的索引j = n - 1
。但这b[i]
是一个固定数量,因为此迭代不依赖于 的值i
。
但我不确定编译器更喜欢哪一个。有什么帮助吗?
解决方案
该定义double temp = b[i];
鼓励编译器将计数保存temp
在 CPU 的一个寄存器中。使用您的其他代码,编译器可能会将计数留在主内存中,寄存器不适合存储数组。
该数组可能会保存在缓存中,除非它非常大,所以它仍然会相当快;但寄存器更快。
推荐阅读
- bash - 如何使用awk计算特定模式下特定条目的行数?
- reactjs - 使用 setState 方法更新嵌套对象格式的状态数据
- python - x 和 y 运行代码之间的 Python 时间。如果 xy 之间的时间没有代码
- amazon-redshift - 如何在 SQL Workbench/J 上提高导入速度
- sql - 使用连接将两个不同表的两列相乘时重复行
- ios - 如何在 UICollectionView 中获取 ID 选择记录
- php - substr_count()、array_count_values() 和 count() 如何在 PHP 内部工作?在大数据的情况下如何处理性能和速度问题?
- hexo - 如何在 Hexo 中动态更改语言?
- jmeter - 如何在没有任何插件的情况下以非 gui 模式在一个实例上运行多个 .jmx 录制的脚本?
- python - 如何在远程机器上的脚本中调用 python 函数