Отображенная память и SSE - PullRequest
       19

Отображенная память и SSE

5 голосов
/ 05 ноября 2011

Я нашел этот абзац в руководстве разработчика Intel:

Из главы "ПРОГРАММИРОВАНИЕ С SSE3, SSSE3, SSE4 И AESNI"

Потоковые загрузки не должны использоваться для ссылки на адреса памяти, которые отображаются на устройства ввода-вывода, имеющие побочные эффекты или при чтении на них устройства разрушительны. Это потому, что MOVNTDQA является спекулятивным в природа.

Кто-нибудь мог бы прояснить этот вопрос?

Я спрашиваю, потому что я думаю применить некоторую сборку SSE к OpenGL отображенным буферным объектам , но я боюсь этого разрушительного слова. Этот предмет применяется к отображенной памяти? На самом деле я не знаю, что стоит за вызовом glMapBuffer.

Не думаю, что моя графическая карта будет уничтожена (:), но, конечно, это слово не звучит хорошо.

1 Ответ

5 голосов
/ 05 ноября 2011

Разрушающее здесь относится к чтению, которое может быть выполнено только один раз, например, когда устройство представляет отображенный в памяти способ чтения следующего элемента из своей очереди. В этом случае чтение из этого места во второй раз даст второй результат. Это плохо, потому что MOVNTDQA является спекулятивным, поэтому выборка может быть выполнена, даже если инструкция в конечном итоге пропущена из-за неправильно предсказанного перехода. Данные из первой выборки будут безвозвратно уничтожены, но без ущерба для оборудования.

Поскольку вы пытаетесь получить доступ только к обычной оперативной памяти на другом устройстве, а не к регистру MMIO, вам не о чем беспокоиться.

...