Версия 2, скорее всего, будет быстрее, чем версия 1, из-за того, что Matlab хранит данные в памяти (по столбцам или, точнее, крайний левый индекс изменяется быстрее всего и сохраняется в смежной области памяти), а также из-за эффектов кэширования памяти(который извлекает из памяти одну страницу [например, 4 КБ = 500 double
элементов] за раз).Это называется пространственная локализация или принцип эталонной .Зацикливая крайний правый индекс перед левым, мы максимизируем эффективность кэша ЦП, поскольку ЦП не требуется частый доступ к основной памяти (ОЗУ) для выборки смежных элементов данных.
Эффекткак правило, маленький или незначительный для небольших матриц данных, но он может быть значительным, когда размер данных больше размера страницы вашей платформы - в таких случаях вы можете увидеть ускорение в 2 раза или даже больше с версией 2 по сравнению с версией 1.
* 1011Сказав все это, если бы вы могли сделать
fun()
векторизованным, потенциальные ускорения могли бы быть намного больше, чем при переключении порядка петель.