2015-08-18 7 views

ответ

5

Нагрузочная нагрузка с внутренней нагрузкой (mm_stream_load_si128) выполняет нагрузку «с использованием подсказки без временной памяти» (согласно Intel Intrinsics Guide). Это означает, что загруженное значение не приведет к выходу из кэша.

Это полезно, если вы собираете много данных вместе, с которыми вы собираетесь работать немедленно, и не смотрите снова на «длительное» время. Чаще всего это происходит во время потоковых операций. Я использовал его, когда знаю, что выполняю простую операцию в большом наборе данных, где, как я знаю, данные будут быстро удалены из кэша. Операции, такие как memcpy, также подпадают под эту категорию.

Непотекающая загрузка (mm_load_si128) будет извлекать значение и будет подчиняться нормальным правилам кеширования. Он может вывести старые записи кэша, если это необходимо, и сможет быть извлечен из кеша до тех пор, пока он не будет удален.

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

+0

Я не понимаю, почему это полезно для memcpy другого кода, который обеспечивает доступ к непрерывным блокам или ОЗУ? Кэш-линия - 64 байта = 4x __m128i, т. Е. С кешированием ускоряет следующие 3 нагрузки огромным фактором? – Soonts

+0

Основываясь на последнем комментарии по старой теме: https://software.intel.com/en-us/forums/intel-isa-extensions/topic/597075 Предполагая, что ЦП оптимизирует такое чтение на всех данных загружается в буфер размера строки кеша, который отделен от кэша данных. Существует не так много таких буферов, что лучше всего, когда содержимое буфера считывается в последующих инструкциях, в противном случае оно может быть потеряно и нуждается в повторном приобретении с потенциально большим штрафом за производительность. И само копирование будет не быстрее, чем с кэшированной памятью, но не будет вытеснять весь рабочий набор из кеша. – user377178