В моем приложении в какой-то момент мне нужно выполнить вычисления на большом непрерывном блоке данных памяти (100 м МБ). То, что я думал, состояло в том, чтобы сохранить предварительную выборку части блока, к которой моя программа коснется в будущем, так что, когда я выполняю вычисления на этой части, данные уже находятся в кеше.Предварительная выборка данных в кеш для x86-64
Может ли кто-нибудь дать мне простой пример того, как добиться этого с помощью gcc? Я читал _mm_prefetch
где-то, но не знаю, как правильно его использовать. Также обратите внимание, что у меня многоядерная система, но каждое ядро будет параллельно работать в другом регионе памяти.
Если доступ к памяти последователен, предварительный выбор оборудования уже сделает это за вас. Таким образом, вы, вероятно, не получите большого улучшения с ручной предварительной выборкой. – Mysticial
См. Этот вопрос для примера того, где на самом деле помогает предварительная выборка: http://stackoverflow.com/questions/7327994/prefetching-examples – Mysticial
Вы имеете в виду, что аппаратный предварительный выбор каким-то образом признает, что я использую смежные области в памяти и доставляю эти части в кеш ? – pythonic