【发布时间】:2019-11-06 18:22:56
【问题描述】:
我正在研究 Cheng 的 CUDA C Programming,并遇到了这段代码:
void sumMatrixOnHost (float *A, float *B, float *C, const int nx, const int ny) {
float *ia = A;
float *ib = B;
float *ic = C;
for (int iy=0; iy<ny; iy++) {
for (int ix=0; ix<nx; ix++) {
ic[ix] = ia[ix] + ib[ix];
}
ia += nx; ib += nx; ic += nx;
}
}
这是用于矩阵加法,矩阵以行优先格式存储。
据我了解,内部 for 循环遍历一行并执行元素添加,然后使用外部 for 循环将指针递增到下一行的开头。
为什么这种方法比在整个矩阵上使用指针更好,即
for (int i=0; i<ny*nx; i++) {
ic[i] = ia[i] + ib[i];
}
或双重for循环,即
for (int iy=0; iy<ny; iy++) {
for (int ix=0; ix<nx; ix++) {
ic[iy*nx+ix] = ia[iy*nx+ix] + ib[iy*nx+ix];
}
}
这与编译器如何优化它有关吗?
【问题讨论】: