Я работаю в CUDA C Programming от Cheng, и наткнулся на этот кусок кода:
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 (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];
}
}
Это как-то связано с тем, как он оптимизируется компилятором?