Предположим, что я использую VGATHERDPS от AVX2 - это должно загружать 8 однотонных поплавков с использованием 8 индексов DWORD.Как выполняются команды сбора в AVX2?
Что происходит, когда данные, подлежащие загрузке, существуют в разных строках кэша? Является ли инструкция реализована как аппаратный цикл, который извлекает строки кэша один за другим? Или он может одновременно загрузить нагрузку на несколько строк кэша?
Я прочитал пару статей, в которых говорится о первом (и это то, что имеет больше смысла для меня), но я хотел бы узнать об этом немного подробнее.
Ссылка на один документ: http://arxiv.org/pdf/1401.7494.pdf
Глядя на столы Агнера, это похоже на 20+ часов. Так что да, я бы не назвал эту нативную поддержку. Было бы интересно посмотреть, что делает Skylake. Вероятно, ближе к тому, что делают графические процессоры? (# of cycles = # банковских конфликтов) – Mysticial
В векторном классе Agner Fog у него есть функция под названием 'lookup', которая может использоваться для сбора несвязанных данных из массива или для поиска в таблице, и он утверждает, что эффективность в AVX2 и только в противном случае. На основе этого сбора лучше с Haswell (или скалярные нагрузки лучше). Но я не проводил бенчмаркинга. Я просто иду по его требованию. –
Ну, я думаю, вы используете меньше инструкций, чтобы выполнять ту же работу, когда используете собранную нагрузку, но количество циклов чтения одинаково - возможно, это помогает комбинации команд, хотя, в зависимости от того, что вы на самом деле делать с данными, как только вы его загрузили. –