Описание тега avx2
AVX2 (Advanced Vector Extensions 2) - это расширение набора команд для x86. Он добавляет 256-битные версии целочисленных инструкций (где AVX предоставляет только 256-битную плавающую точку).
0
ответов
Прерывание инструкции AVX2 в Visual Studio 2013
Вот код C++: #include <stdio.h> #include <iostream> #include <immintrin.h> using namespace std; int main(int argc, char* argv[]) { char a[100]; for (int i = 0; i < 32; i++) a[i] = 1; for (int i = 32; i < 64; i++) a[i] = 0; __…
07 янв '15 в 03:16
2
ответа
Использует ли побитовая операция (&, ^. | И т. Д.), Предоставляемая в качестве перегрузки операторов в std::bitset, инструкции AVX или SSE4?
Поскольку это зависит от реализации, единственный ли способ выяснить это - разборка?
05 окт '16 в 22:19
1
ответ
Система утверждает, что AVX2 поддерживается, но передача целочисленных регистров не реализована
cat /proc/cpuinfo сообщает, что установлен флаг avx2. Однако инструкция AVX2 vpbroadcastb вызывает недопустимое исключение инструкции при запуске. Я использую x86_64 Linux и nasm в качестве моего ассемблера. В моей системе воспроизвести это так же п…
23 апр '18 в 18:39
1
ответ
GCC не может векторизовать 64-битное умножение. Можно ли векторизовать умножение с 64-битным x 64-битным -> 128-битным расширением на AVX2?
Я пытаюсь векторизовать CBRNG, который использует 64-битное умножение с расширением. static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t* hip) { __uint128_t product = ((__uint128_t)a)*((__uint128_t)b); *hip = product>>64; ret…
04 июл '14 в 08:14
5
ответов
Транспонировать поплавок 8x8, используя AVX/AVX2
Транспонирование матрицы 8x8 может быть достигнуто путем создания четырех матриц 4x4 и транспонирования каждой из них. Это не хочу, я иду за. В другом вопросе один ответ дал решение, которое потребовало бы только 24 инструкций для матрицы 8x8. Однак…
02 сен '14 в 11:51
1
ответ
Оптимизировать извлечение 64-битного значения из регистра AVX2
Я пытаюсь извлечь 64 бит из регистра __m256i. Пример моей текущей функции извлечения: byte 31 16 15 0 byte_result_vec 000D 000C 000B 000A 000H 000G 000F 000E _mm256_packs_epi32 -> 0D0C 0B0A 0D0C 0B0A 0H0G 0F0E 0H0G 0F0E _mm256_packus_epi16 -> …
13 янв '14 в 00:55
1
ответ
Сдвиги AVX2 (16 бит)
Существуют ли встроенные инструкции для выполнения операций сдвига вправо и влево для (16-разрядных) целочисленных элементов в AVX2? Как следующие примеры: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] --> [16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] а также [1…
22 фев '15 в 23:25
5
ответов
Как определить, поддерживает ли машина Linux инструкции AVX/AVX2?
Я на компьютерах SUSE Linux Enterprise 10/11. Я запускаю свои регрессии на ферму машин с процессорами Intel. Некоторые из моих тестов не пройдены, потому что мои инструменты построены с использованием библиотеки, которая требует поддержки инструкций…
27 май '16 в 09:40
1
ответ
Самый быстрый способ распаковать 8-битные из 32-битных значений (__m256i) в __m256 с AVX2
У меня есть array называется A который содержит 32 unsigned char ценности. Я хочу распаковать эти значения в 4 __m256 переменные с этим правилом, при условии, что у нас есть индекс от 0 до 31 относительно всех значений из A, распакованная переменная…
10 авг '17 в 16:09
1
ответ
Почему этот раздел кода возвращает ошибку "Ошибка сегментации"?
Я векторизую часть моей программы, но она возвращается Segmentation fault ошибка. Что не так с этим? Вот упрощенный раздел, который вызывает проблему. j++ а также i++ это именно то, что я хочу, я не хочу быть j += 16, unsigned short int input[256][2…
20 мар '16 в 22:32
5
ответов
Быстрая реализация экспоненциальной функции с использованием AVX
Я ищу эффективное (быстрое) приближение экспоненциальной функции, работающей с элементами AVX (плавающая точка одинарной точности). А именно - __m256 _mm256_exp_ps( __m256 x ) без SVML. Относительная точность должна быть примерно такой: ~1e-6 или ~2…
19 фев '18 в 10:08
3
ответа
AVX2 медленнее, чем SSE на Haswell
У меня есть следующий код (обычный, SSE и AVX): int testSSE(const aligned_vector & ghs, const aligned_vector & lhs) { int result[4] __attribute__((aligned(16))) = {0}; __m128i vresult = _mm_set1_epi32(0); __m128i v1, v2, vmax; for (int k = 0…
06 май '14 в 14:28
3
ответа
Могу ли я использовать AVX FMA для точного 52-битного умножения?
AXV2 не имеет целочисленных умножений с источниками больше 32-битных. Он предлагает 32 x 32 -> 32 умножения, а также 32 x 32 -> 64 умножения1, но ничего с 64-битными источниками. Скажем, мне нужно беззнаковое умножение с входными данными, большими, …
30 дек '16 в 22:54
2
ответа
Почему процессоры с только AVX превосходят процессоры AVX2 по многим SIMD-алгоритмам?
Я исследовал преимущества алгоритмов SIMD в C# и C++ и обнаружил, что во многих случаях использование 128-разрядных регистров на процессоре AVX предлагает лучшее улучшение, чем использование 256-разрядных регистров на процессоре с AVX2, но я не не п…
26 фев '16 в 23:31
1
ответ
Какой самый быстрый способ добавления векторных элементов по горизонтали в нечетном порядке?
В соответствии с этим вопросом я реализовал горизонтальное сложение на этот раз 5 на 5 и 7 на 7. Это делает работу правильно, но недостаточно быстро. Может ли это быть быстрее, чем это? Я пытался использовать hadd и другие инструкции, но улучшение о…
25 мар '17 в 23:28
0
ответов
C++: как перенести выравнивание и ограничить атрибуты в функцию доступа к шаблону
Я хочу вычислить общий матричный продукт C = C + alpha*A*B Теперь, особая ситуация в моем контексте состоит в том, что я знаю количество столбцов A (соответственно количество строк B) во время компиляции. Поэтому я могу жестко закодировать эту инфор…
17 авг '16 в 16:06
0
ответов
`цикл не был векторизован: индекс слишком сложен` в Intel Fortran с OpenMP
У меня проблема при попытке распараллелить - с OpenMP - и векторизовать вложенный цикл с помощью ifort 14.0.2. Вот цикл: !$OMP DO schedule(auto) do ig1 = 1, N_g ic1 = (ig1-1) * N_d do ig2 = 1, N_t ig2index = T(ig2) kk = (ig2index-1) * N_d ix = p1(1)…
23 дек '14 в 11:56
1
ответ
Распакуйте m128i/m256i в m64 (MMX, SSE2, AVX2)
У меня память организована так: block1 (m64), block2 (m64), block3 (m64), block4 (m64),.... Теперь я делаю в цикле for эту операцию: итерация 1..... x = block1 XOR block2 y = block1 AND block2 block1 = x block2 = y итерация 2..... x = block3 XOR blo…
04 сен '17 в 13:44
2
ответа
Как извлечь байт, расположенный в позиции индекса, определенной в AL
Постановка проблемы: нужно извлечь из ymm0 зарегистрировать байт, расположенный в позиции, значение которой находится в регистре AL, Мой метод: (довольно некрасиво) ; Установите XMM1 как маску "сдвиг на один байт вправо"; XMM1: 000F0E0D0C0B0A0908070…
17 ноя '13 в 14:55
1
ответ
Оптимизировать без выравнивания SSE2/AVX2 XOR
В моем коде я должен обрабатывать "разоблачение" пакетов веб-сокетов, что по сути означает, что XOR не выравнивает данные произвольной длины. Благодаря SO ( разоблачение данных Websocket / многобайтовый xor) я уже выяснил, как (надеюсь) ускорить это…
24 июл '13 в 16:26