|
|
От: |
Maniacal
|
|
| Дата: | 26.01.24 13:51 | ||
| Оценка: | |||
Какие многомерные массивы? Какие кэш-промахи? Здесь у нас и близко нет ни того, ни другого! Судя по всему, мы столкнулись с грубой ошибкой Инструктора (шаблонный поиск дает о себе знать!), но все же не поленимся, и заглянем в предлагаемый Инструктором пример, памятуя о том, что всегда в первую очередь следует искать ошибку у себя, а не у окружающих. Быть может, это мы чего-то недопонимаем:
Original Code Optimized Code int b[200][120]; int b[200][120]; void xmpl17(int *a) void ympl17(int *a) { { int i, j; int i, j; for (i = 0; i < 120; i++) int atemp; for (j = 0; j < 200; j++) for (j = 0; j < 200; j++) for (i = 0; i < 120;i++) b[j][i]=b[j][i]+a[2*j]; } b[j][i]=b[j][i]+a[2*j]; }
Ну вот, все правильно. Приводимый профилировщиком VTune фрагмент кода наглядно демонстрирует, что двухмерные массивы лучше обрабатывать по строкам, а не столбцам (см. "Часть III. Подсистема кэш-памяти"). Но ведь у нас нет двухмерных массивов, а, стало быть, и слушаться Инструктора в данном случае не надо.