Пример использования памяти обмена индексами умножения матриц Python - PullRequest
0 голосов
/ 22 февраля 2019

в c есть пример важности использования памяти: умножение наивной матрицы с использованием 3 для циклов (i, j, k).И можно показать, что использование (i, k, j) намного быстрее, чем (i, j, k) из-за слияния памяти.В python numpy порядок, если индексы (опять же наивные 3 цикла, а не np.dot) не имеет значения.Почему это так?

1 Ответ

0 голосов
/ 22 февраля 2019

Прежде всего вам нужно знать, почему цикл (i,k,j) быстрее, чем (i,j,k) на C. Это происходит потому, что при оптимизации использования памяти в памяти вашего компьютера матрица распределяется линейным образом, поэтому, если вы выполняете итерациюиспользуя (i,k,j), вы используете это в свою пользу, где каждый цикл занимает блок памяти и загружается в вашу оперативную память.Если вы используете (i,j,k), вы работаете против него, и каждый шаг будет загружать блок памяти в вашу ОЗУ и сбрасывать на следующем шаге, потому что вы перебираете блоки перехода.

Реализация дескриптора numpyэто для вас, так что даже если вы используете наихудший порядок, numpy заставит его работать быстрее.

Событие выброса кеша и постоянного его изменения называется Cache miss

На по этой ссылке вы можете увидеть гораздо лучшее объяснение о том, как распределяется память и почему она работает быстрее каким-то конкретным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...