c - 通过编写循环优化 C 中的基本嵌套循环
问题描述
当前循环是:
#define N 3000
...
int i, j;
int a[N][N], b[N][N], c[N];
// Fill in b and c with random values
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
a[i][j] = b[i][j] / c[i];
}
}
我的优化版本展开了外循环和内循环:
for (int i = 0; i < N; i += 2) {
for (int j = 0; j < N; j += 2) {
a[i][j] = b[i][j] / c[i];
a[i][j + 1] = b[i][j + 1] / c[i];
a[i + 1][j] = b[i + 1][j] / c[i + 1];
a[i + 1][j + 1] = b[i + 1][j + 1] / c[i + 1];
}
}
但是,我的导师说第二个循环没有优化得很好。c(i) 的指示应该从 j 上的循环中取出。通过更改索引的顺序来优化循环。这样,您可以在内部循环中对内存进行一次扫描,而不是进行曲折类型的搜索。
我仍然不确定他的意思,因为更改索引的顺序仍然会使循环以之字形遍历。这种情况下的正确解决方案应该是什么?
解决方案
放入int ci = c[i];
外循环,内循环除以ci.
注意,任何合理的编译器都会为您执行此操作。
推荐阅读
- powershell - 使用 Chocolatey 安装软件的 PowerShell 脚本
- android - 在 Android 10 及更低版本上仅使用设备凭据选项显示身份验证提示
- javascript - 在日历JS中搜索日期
- angular - 打字稿:输入显示两个值(一个不会考虑)
- c++ - 为什么删除重载时需要使用声明
- azure-devops - Azure DevOps 审核日志 Group.CreateGroups 为未经许可的用户以 [TEAM FOUNDATION] 为前缀的组
- javascript - 即使单击提交按钮后也不会调用 onSubmit 函数
- python-3.x - 使用 python 的 jira 服务台 api 上的 401 错误
- javascript - 功能组件反应中文档上的 removeEventListener 不起作用
- mysql - 在数据库设计中使用类型列或单独的类型表?