Резервная реализация для обнаружения конфликтов в AVX2C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Резервная реализация для обнаружения конфликтов в AVX2

Сообщение Anonymous »

AVX512CD содержит встроенный _mm512_conflict_epi32(__m512i a), он возвращает вектор, в котором для каждого элемента в устанавливается бит, если он имеет одинаковое значение. Есть ли способ сделать что-то подобное в AVX2?

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

По сути, мне нужен эквивалент AVX2 для

Код: Выделить всё

__mm256i detect_conflict(__mm256i a) {
__mm256i cd = _mm256_conflict_epi32(a);
return _mm256_cmpgt_epi32(cd, _mm256_set1_epi32(0));
}
Единственный способ, который я мог придумать, это использовать _mm256_permutevar8x32_epi32() сдвинуть каждое значение вправо на 1 (поперек полос), а затем выполнить семь сравнений, замаскировать извлекаем неиспользуемые биты и затем _mm256_or_si256() их вместе, что ужасно медленно.

Подробнее здесь: https://stackoverflow.com/questions/448 ... on-in-avx2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»