2016-10-07 2 views
9

Семейства команд AVX512CD: VPCONFLICT, VPLZCNT и VPBROADCASTM.Каким образом инструкции по обнаружению конфликтов облегчают векторизация циклов?

The Wikipedia section about these instruction говорит:

Инструкция по обнаружению AVX-512 конфликтов (AVX-512CD) являются разработана, чтобы помочь эффективно рассчитать бесконфликтных подмножества элементов в виде петель, которые обычно не могут быть безопасно векторизованными.

Каковы некоторые примеры, показывающие, что эта инструкция полезна в векторизации циклов? Было бы полезно, если бы ответы включали скалярные циклы и их векторизованные копии.

Спасибо!

ответ

7

Одним из примеров, где могут быть полезны инструкции CD, является гистограммирование. Для скалярного кода гистограммирование только простой цикл, как это:

load bin index 
load bin count at index 
increment bin count 
store updated bin count at index 

Обычно вы не можете векторизации гистограммирования потому что вы можете иметь один и тот же индекс бен больше, чем один раз в векторе - Вы могли бы наивным попробовать что-то вроде этого:

load vector of N bin indices 
perform gathered load using N bin indices to get N bin counts 
increment N bin counts 
store N updated bin counts using scattered store 

, но если какой-либо из индексов в пределах вектора одинаковы, то вы получите конфликт, и в результате обновления бен будет некорректным.

Так, CD инструкция к спасению:

load vector of N bin indices 
use CD instruction to test for duplicate indices 
set mask for all unique indices 
while mask not empty 
    perform masked gathered load using <N bin indices to get <N bin counts 
    increment <N bin counts 
    store <N updated bin counts using masked scattered store 
    remove non-masked indices and update mask 
end 

На практике этот пример не является малоэффективным и не лучше, чем скалярный код, но есть и другие более вычислительны ёмкие примеры, когда с помощью инструкции CD, кажется, стоит. Обычно это будут симуляции, в которых элементы данных будут обновляться недетерминированным образом. Один пример (из LAMMPS Molecular Dynamics Simulator) упоминается в KNL book by Jeffers et al.

+1

Смотрите также [стр.50 слайдов Кириллом Юхин от 2014] (https://gcc.gnu.org/wiki/cauldron2014?action=AttachFile&do=get&target=Cauldron14_AVX-512_Vector_ISA_Kirill_Yukhin_20140711.pdf#page=50). Я опубликовал некоторые сведения об ускорении проблем типа гистограммы с/без AVX512CD [по недавнему вопросу] (https://stackoverflow.com/questions/39266476/how-to-speed-up-this-histogram-of-lut- поиски). Обычный трюк клонирования ваших бункеров и суммирования в конце может помочь избежать конфликтов (и узких мест, связанных с перенастройкой данных, даже для скаляров). –

+0

Спасибо, Питер, я раньше не видел этих слайдов - некоторые интересные лакомые кусочки ... –

+0

Раздел «16.2.3. Использование инструкций AVX-512CD» [Руководства по оптимизации Intel] (http://www.intel.com /content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html) описывает это точно. См. Пример «Пример 16-4. Векторизованное обновление гистограммы с использованием AVX-512CD». Это где вы получили эту идею? Откуда вы знаете, что это не лучше скаляра? Вы пробовали это на практике с KNL? –

Смежные вопросы