Умножение 2-х 32-битных чисел и взятие старших 32-х бит с использованием AVX2 - PullRequest
0 голосов
/ 06 ноября 2019

Я использую умножение (с добавлением других операций) в качестве замены для целочисленного деления. Мое решение в конечном итоге требует, чтобы я умножил 2 32-битных числа вместе и взял верхние 32 бита (точно так же, как функцию mulhi), но AVX2 не предлагает 32-битный вариант _mm256_mulhi_epu16 (например: нет функции _mm256_mulhi_epu32 ').

Я пробовал различные методы, такие как проверка функций AVX512 или даже манипулирование 32-разрядными целыми числами, чтобы они были 16-разрядными целыми числами типа hi / lo. Я очень новичок в работе с низкоуровневым программированием, поэтому я не знаю, что является оптимальным или даже просто возможным.

1 Ответ

3 голосов
/ 06 ноября 2019

Это можно сделать, выполнив следующие действия:

__m256i t1 = _mm256_mul_epu32(m, n);
t1 = _mm256_srli_epi64(t1, 32);
...