Хорошо известно, что быстрый доступ к памяти лучше всего для производительности.
В ситуациях, когда
, что лучше: прочитать первый шаг или написать первый шаг?
Одним из простых конкретных примеров является BLAS-подобная операция копирования и перестановки, такая как y: = P x
. Матрица перестановок P
полностью определяется некоторым вектором перестановок q (i)
. Ему соответствует вектор обратной перестановки qinv (i)
. Требуемый цикл можно было бы закодировать как y [qinv (i)] = x [i]
или как y [i] = x [q (i)]
, где первый читается из x
шаг один, а последний записывает в y
шаг один.
В идеале всегда можно было закодировать обе возможности, профилировать их в репрезентативных условиях и выбрать более быструю версию.Представьте, что вы можете запрограммировать только одну версию - какой шаблон доступа вы всегда ожидаете быстрее, основываясь на поведении современных архитектур памяти? Меняет ли ваш ответ работа в многопоточной среде?