Как читать большие объемы данных, не загрязняя кеш? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь оптимизировать производительность моего кода, который выполняет обработку изображений.Например, нечеткое маскирование .Он применяет вычисление к квадратной области вокруг каждого пикселя изображения в растровом порядке.

Я хочу проверить, будет ли копирование нескольких строк изображения в выделенную «рабочую область» в обход кешаПомогите.Идея в том, что данные с изображения не будут вытеснять другие полезные данные из кэша, что должно повысить производительность.

Как я могу реализовать специальную форму memcpy, которая не обновляет кэш?

Я не использую OpenCV, но если у него есть такая поддержка, я готов попробовать.

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

1 Ответ

0 голосов
/ 02 марта 2019

Способ сделать именно то, что вы хотите, это использовать инструкцию MOVNTDQA в сочетании с типом памяти WC.Это читает из памяти в буфер потоковой загрузки, а не в кеш.Последующие потоковые загрузки в ту же потоковую линию поступают из буфера потоковой загрузки.См. Раздел 12.10.3 в томе 1 SDM.Эта инструкция была добавлена ​​с SSE4.1.

Дополнительные ссылки:
https://software.intel.com/en-us/articles/copying-accelerated-video-decode-frame-buffers
https://www.embedded.com/print/4007238
(Обратите внимание, я не прочитал их полностью, поэтому я не знаюнасколько они полезны.)

Обратите внимание, что MOVNTDQA не упорядочен в отношении записей с других ядер, а основан на вашем описании, которое, как представляется, не имеет значения в вашей ситуации.

Вы определенно не хотите использовать тип памяти UC, потому что, как упоминал Питер, каждый доступ приводит к отдельному чтению DRAM, и, что еще хуже, доступ к UC сериализуется, разрушая любой параллелизм в вашем коде.

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