Описание тега simd

Single instruction, multiple data (SIMD) is the concept of having each instruction operate on a small chunk or vector of data elements. CPU vector instruction sets include: x86 SSE and AVX, ARM NEON, and PowerPC AltiVec. To efficiently use SIMD instructions, data needs to be in structure-of-arrays form and should occur in longer streams. Naively "SIMD optimized" code frequently surprises by running slower than the original.
1 ответ

Как загрузить байты в __m128i в определенной позиции

Мне нужно загрузить 4 байта, хранящихся последовательно в массиве, в определенной позиции переменной __m128i, а именно, чтобы иметь возможность делать много сумм int32_t, по 4 за раз, сохраняя все частичные результаты. Например: const unsigned int S…
16 окт '13 в 22:48
2 ответа

Использует ли побитовая операция (&, ^. | И т. Д.), Предоставляемая в качестве перегрузки операторов в std::bitset, инструкции AVX или SSE4?

Поскольку это зависит от реализации, единственный ли способ выяснить это - разборка?
05 окт '16 в 22:19
1 ответ

Произвольная матрица или размер массива в Swift

Я знаком с созданием матриц MxN в Python с использованием NumPy, таких как: In [1]: import numpy as np In [2]: np.zeros((10,5)) Out[2]: array([[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., …
09 июл '16 в 03:14
2 ответа

Флаг компилятора Visual Studio / арка и производительность

Я только что заметил, что в нашем проекте флаг "Включить расширенный набор инструкций" оставлен неустановленным, вероятно, просто недосмотр. Прежде чем включить флаг, я хотел бы спросить, видели ли кто-нибудь какие-либо реальные улучшения производит…
06 мар '10 в 18:35
1 ответ

Порядок смешения с ARM Neon vtbx

У меня есть 16-байтовая маска перестановки uint8_t[16] и 16-байтовый массив данных uint32_t[4], Я хочу "перемешать" этот массив данных с помощью vtbl как это: 0 1 2 3 4 5 6 7 8 9 A B C D E F Data ||0x0,0x0,0x1,0x2|0x0,0x3,0x0,0x4||0x5,0x6, 0x7, 0x8|…
23 фев '17 в 14:10
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
1 ответ

Умножение xmm регистра

У меня проблема с умножением двух регистров в ассемблере sse. Здесь есть мой код: moltiplicazionePuntoPunto: mov edx,[esp+20] ; edx = fxx mov esi,[esp+4] ; esi = fx mov edi,[esp+8] ; edi = fy xor eax,eax ; i=0 fori: cmp eax,[esp+12] ; confronta i co…
29 май '17 в 15:11
5 ответов

Самый быстрый способ умножить два вектора 32-битных целых чисел в C++ с помощью SSE

У меня есть два вектора без знака, оба с размером 4 vector<unsigned> v1 = {2, 4, 6, 8} vector<unsigned> v2 = {1, 10, 11, 13} Теперь я хочу умножить эти два вектора и получить новый vector<unsigned> v_result = {2*1, 4*10, 6*11, 8*13…
23 июн '13 в 19:21
1 ответ

Загрузка невыровненных двойников в регистр _m128d

Я очень новичок в SIMD, поэтому я прошу прощения, если это окажется тривиальным вопросом. У меня есть класс, который содержит (среди прочего) две пары. Я хочу использовать эти две пары и загрузить их в __m128d зарегистрироваться, чтобы я мог выполня…
24 ноя '13 в 09:50
1 ответ

Эффективное умножение матрицы SSE NxN

Я пытаюсь реализовать SSE версия большой матрицы с умножением матрицы. Я ищу эффективный алгоритм, основанный на SIMD Реализации. Мой желаемый метод выглядит так: A(n x m) * B(m x k) = C(n x k) И все матрицы считаются выровненными 16-байтовыми масси…
01 фев '14 в 21:27
2 ответа

Оптимизация функции C++

У меня есть функция следующим образом, она вызывается много раз, что заставляет мою программу работать медленно. Есть ли способ оптимизировать его? Например, используя SIMD инструкции или другие методы. Функция getray() предназначена для извлечения …
19 авг '16 в 09:57
5 ответов

Транспонировать поплавок 8x8, используя AVX/AVX2

Транспонирование матрицы 8x8 может быть достигнуто путем создания четырех матриц 4x4 и транспонирования каждой из них. Это не хочу, я иду за. В другом вопросе один ответ дал решение, которое потребовало бы только 24 инструкций для матрицы 8x8. Однак…
02 сен '14 в 11:51
1 ответ

Добавление массива SIMD для произвольной длины массива

Я учусь использовать возможности SIMD, переписывая свою личную библиотеку обработки изображений с использованием векторных встроенных функций. Одна базовая функция - это простой массив +=то есть void arrayAdd(unsigned char* A, unsigned char* B, size…
16 апр '12 в 00:57
1 ответ

ARM Neon: VPADAL для вычитания

Я использую VPADAL.U32 инструкция, чтобы значительно увеличить мою скорость кода дополнения. Однако мне нужно что-то вычесть с накоплением и переносом (именно то, что я получил как дополнение). Желаемое за действительное или реально возможное? Из то…
22 ноя '11 в 19:32
1 ответ

Предупреждение: формат "%ld" ожидает аргумент типа "long int", но аргумент имеет тип "__builtin_neon_di"

В связи с этим вопросом я не могу перепроверить результаты. После выполнения я получаю неправильное заявление на печать. Может кто-нибудь сказать мне, printf() утверждения неверны или логика, которую я делаю, неверна. КОД: int64_t arr[2] = {227802,9…
19 май '15 в 14:29
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
1 ответ

Есть ли предпочтение с SIMD всегда избавляться от ветвления?

Если вы пишете какой-нибудь SIMD-код, который будет запускаться другой программой, всегда ли выгодно избавляться от ветвлений для повышения производительности? Я слышал, что даже делать дополнительные операции, чтобы избежать if/else заявления и т. …
17 янв '12 в 23:02
1 ответ

Призрак: SIMD причина?

Короткий вопрос: я прочитал статью об уязвимом призраке. Это говорит о том, что затрагиваются только высокопроизводительные процессоры ARM, а не младшие. Поскольку младшие процессорные процессоры ARM не поддерживают инструкции SIMD (также называемые…
04 янв '18 в 12:13
2 ответа

Самый простой способ проверить специфичные для ARM коды на Windows

Я хотел бы написать код компьютерного зрения ARM SIMD на компьютере с операционной системой Intel. Я хотел бы знать, каковы различные варианты для этого. Я знаю, например, что я могу запустить эмулятор rasperrpi на Windows, но это очень медленно, и …
09 ноя '13 в 11:47
1 ответ

Сумма массива с плавающей точкой в ​​сборке

Я реализую функцию в сборке x86, вызванную из программы на C, чтобы добавить массив с плавающей точкой. Первый аргумент функции - это указатель на массив, а второй - количество элементов. Когда я запускаю код в Linux, я получаю ошибку сегментации. Ч…
12 апр '17 в 14:41