-4
голосов
0ответы
28 просмотров

Что делает vmovdqu?

Когда дело доходит до ассемблерного кода, я новичок, и я наткнулся на операцию, о которой раньше даже не слышал, vmovdqu, или, более конкретно, в коде, на который я смотрел vmovedqu ymm1, ymm0, [rdx + ...
0
голосов
0ответы
49 просмотров

Генератор случайных сигналов SIMD двойной точности с нормальным распределением для AVX, AVX2 и AVX512?

После некоторых исследований мне не удалось найти векторизованный генератор случайных чисел двойной точности (лучше всего было бы нормальное распределение), использующий AVX, AVX2 или AVX512. Как это можно / нужно сделать на C ++ для векторов ...
1
голосование
0ответы
47 просмотров

AVX512 Gather / Scatter, атомарность / псевдоним [дубликат]

Я пытаюсь векторизовать следующую программу: for (i = 0; i <N; i ++) {a = arr [i]; // арифметика по * a * здесь. count [a] ++; } Используя встроенные функции, это становится чем-то вроде: for (i = 0; i <N; i + = 8) ...
0
голосов
1отвечать
28 просмотров

Проблема выравнивания в сборке (NASM) [дубликат]

Я пытаюсь вручную измерить время, затрачиваемое на чтение элементов из массива, поэтому я создал код сборки, который читает из переданного массива. Пример кода сборки:; void array_read (long n, ...
0
голосов
0ответы
30 просмотров

Пропускная способность похожих инструкций [дубликат]

Предпосылка 1: каждая инструкция имеет пропускную способность 1 инструкция за такт (очевидно, что на самом деле неверно, но давайте предположим). Может ли ЦП выдавать как ADDPS, так и SUBPS за один такт? Является ...
0
голосов
0ответы
33 просмотра

Какие изменения требуются при переходе с 128-битного SIMD на 256-битный AVX? [дубликат]

Недавно я следил за постом / блогом, чтобы найти наименьший член массива, и он использовал 128-битные векторные инструкции. Я следил за публикацией, и она работала нормально, пока я не решил написать то же самое для 256 бит ...
3
голосов
0ответы
70 просмотров

Почему код Fma работает хуже, чем Avx?

Я пишу базовую библиотеку подпрограмм линейной алгебры (BLAS). Есть одна проблема с производительностью кода fma. используя Систему; используя System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; ...
3
голосов
2ответы
92 просмотра

Когда исходные регистры в инструкции avx можно использовать повторно

Когда регистры, которые используются в инструкции avx в качестве источника, могут быть повторно использованы после начала обработки инструкции? Например: я хочу использовать инструкцию vgatherdps, которая потребляет два регистра ymm, один из ...
3
голосов
1отвечать
88 просмотров

Как преобразовать int 64 в int 32 с avx (но без avx-512)

Я хотел бы преобразовать / упаковать регистр из 4 длинных (64 бита) в 4 целых (32 бита). Другими словами, чтобы преобразовать __m256i из int64 в __m128i из int32. В моем распоряжении нет avx-512, так что интрикс: ...
3
голосов
1отвечать
98 просмотров

int8 x uint8 матрично-векторное произведение с макетом главного столбца

Я надеюсь ускорить это произведение матрицы на вектор с помощью инструкций AVX-1 или более ранних версий: // a - это массив из N столбцов длиной M, каждый // b - длина N // c - длина M // // M% 32 == ...
1
голосование
1отвечать
37 просмотров

Как правильно определить в CGo, поддерживает ли среда AVX-512?

CGo, похоже, удаляет определения препроцессора. Кто-нибудь еще сталкивался с этим? В моем другом коде C на той же машине это работает нормально. В CGo определение «__AVX2__» удаляется. ...
1
голосование
0ответы
84 просмотра

Упаковка 32-битных векторов маски в 8-битный вектор маски [дубликат]

Учитывая 4 вектора маски __m256i mask0, mask1, mask2, mask3 с 8 32-битными элементами, я хотел бы упаковать их в одну векторную маску __m256i с 32 8-битными элементами. // Псевдокод: эти инициализаторы ...
0
голосов
0ответы
29 просмотров

Почему использование AVX в массиве, созданном в куче, приводит к ошибке? [дубликат]

Когда я использую AVX для выполнения GEMM, я столкнулся с такой проблемой: при использовании 2-мерного массива, созданного в стеке, ошибок не будет, но если я использую массив, созданный в куче, произойдет ошибка сегментации. ...
4
голосов
1отвечать
89 просмотров

Почему clang выдает 32-битную инструкцию ps с плавающей запятой для абсолютного значения 64-битной двойной точности?

Почему clang превращает fabs (double) в vandps вместо vandpd (как это делает GCC)? Пример из обозревателя компилятора: #include <math.h> double float_abs (double x) {return fabs (x); } лязг 12 ....
1
голосование
1отвечать
113 просмотров

Как перемежать 3 вектора с плавающей запятой в массив с помощью встроенных функций AVX C ++

У меня есть 3 вектора __m256 x, y, z, заполненные 8 элементами данных каждый (числа с плавающей запятой одинарной точности), и я хотел бы сохранить их чередующимися в памяти [x0, y0, z0, x1, y1, z1, ... ]. Какие актуальные ...