Описание тега sse
SSE (Streaming SIMD Extensions) было первым из множества одноименных векторных расширений для набора инструкций x86. На этом этапе SSE чаще всего является универсальным средством для векторных инструкций x86 в целом, а не ссылкой на SSE без SSE2, SSE3 и т. Д.
1
ответ
Особенности SSE3: Как найти максимум большого массива с плавающей точкой
У меня есть следующий код, чтобы найти максимальное значение int length = 2000; float *data; // data is allocated and initialized float max = 0.0; for(int i = 0; i < length; i++) { if(data[i] > max) { max = data; } } Я пытался векторизовать ег…
06 мар '13 в 04:26
1
ответ
Внедрение Lanczos SSE/AVX
Кто-нибудь есть какие-либо советы о том, как реализовать алгоритм пересчёта (увеличения и уменьшения) изображений Lanczos с использованием SSE/AVX (встроенные функции или сборка)? Я посмотрел на некоторые реализации C, но есть много разветвлений, и …
10 дек '15 в 23:15
1
ответ
Как загрузить байты в __m128i в определенной позиции
Мне нужно загрузить 4 байта, хранящихся последовательно в массиве, в определенной позиции переменной __m128i, а именно, чтобы иметь возможность делать много сумм int32_t, по 4 за раз, сохраняя все частичные результаты. Например: const unsigned int S…
16 окт '13 в 22:48
1
ответ
gcc (6.1.0), использующий "неправильные" инструкции во встроенных функциях SSE
Предыстория: я разрабатываю вычислительно-интенсивный инструмент, написанный на C/C++, который должен работать на различных процессорах x86_64. Чтобы ускорить вычисления, которые являются как плавающими, так и целочисленными, код содержит довольно м…
17 ноя '16 в 17:44
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
ответа
Сделать предыдущие хранилища памяти видимыми для последующих загрузок памяти
Я хочу хранить данные в большом массиве с _mm256_stream_si256() называется в цикле. Как я понял, для того, чтобы эти изменения были видны другим потокам, необходим забор памяти. Описание _mm_sfence() говорится Выполните операцию сериализации для все…
01 июл '17 в 18:14
1
ответ
Оптимизация с использованием SSE Intrinsics
Я пытаюсь преобразовать цикл, который у меня есть, в свойства SSE. Я, кажется, добился довольно хорошего прогресса, и под этим я подразумеваю, что это в правильном направлении, однако я, кажется, где-то сделал некоторые неправильные переводы, поскол…
01 мар '16 в 23:16
1
ответ
Как я могу использовать встроенные функции AES-NI на Mac?
Я пытаюсь скомпилировать приложение C на Mac. Я использую SSE4 и AES-NI. В Linux я просто вызываю gcc с флагами -msse4 и -maes и включаю заголовок wmmintrin.h, и я могу назвать встроенные функции SSE, такие как _mm_add_epi64(a,b) или AES-NI, такие к…
28 сен '12 в 05:51
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
2
ответа
Скажите GCC: "Я хочу использовать SSE4.1, но ТОЛЬКО в тех местах, где я хочу!"
Как говорит субъект... как я могу сказать GCC разрешить мне использовать встроенные функции SSE4.1, но НЕ оптимизировать с помощью SSE4.1 (например, путем сравнения строк SSE4.1) во всем остальном коде в том же модуле перевода?
26 ноя '13 в 17:21
1
ответ
Эффективное умножение матрицы SSE NxN
Я пытаюсь реализовать SSE версия большой матрицы с умножением матрицы. Я ищу эффективный алгоритм, основанный на SIMD Реализации. Мой желаемый метод выглядит так: A(n x m) * B(m x k) = C(n x k) И все матрицы считаются выровненными 16-байтовыми масси…
01 фев '14 в 21:27
1
ответ
Понимание оптимизации умножения матриц SSE3
Со ссылкой на http://blogs.msdn.com/b/xiangfan/archive/2009/04/28/optimize-your-code-matrix-multiplication.aspx. template<> void SeqMatrixMult4(int size, float** m1, float** m2, float** result) { Transpose(size, m2); for (int i = 0; i < siz…
03 окт '12 в 23:01
1
ответ
g++ SSE внутренняя дилемма - значение от внутренних "насыщенных"
Я написал простую программу для реализации встроенных функций SSE для вычисления внутреннего произведения двух больших (100000 или более элементов) векторов. Программа сравнивает время выполнения как для внутреннего продукта, рассчитанного обычным с…
01 июн '10 в 06:00
1
ответ
Добавление массива SIMD для произвольной длины массива
Я учусь использовать возможности SIMD, переписывая свою личную библиотеку обработки изображений с использованием векторных встроенных функций. Одна базовая функция - это простой массив +=то есть void arrayAdd(unsigned char* A, unsigned char* B, size…
16 апр '12 в 00:57
3
ответа
Сигнал EXC_BAD_ACCESS при попытке инициализировать переменную-член класса __m128
Я использую Apple GCC 4.2.1 и наткнулся на странную проблему со следующим кодом... Я всегда получаю исключение EXC_BAD_ACCESS при попытке инициализировать переменную члена класса __m128. К сожалению, следующий упрощенный код работает в тестовом прил…
23 июн '11 в 09: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
1
ответ
Как эффективно накапливать массивы данных в C
Проблема в том, что у меня огромная матрица A и задан (довольно большой) целочисленный массив, например, скажем, моя матрица: [0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4, ...............] и целочисленный масс…
13 фев '16 в 17:01
1
ответ
Сумма массива с плавающей точкой в сборке
Я реализую функцию в сборке x86, вызванную из программы на C, чтобы добавить массив с плавающей точкой. Первый аргумент функции - это указатель на массив, а второй - количество элементов. Когда я запускаю код в Linux, я получаю ошибку сегментации. Ч…
12 апр '17 в 14:41
1
ответ
SIMD целочисленный магазин
Я пишу программу с использованием инструкций SSE для умножения и добавления целочисленных значений. Я сделал ту же программу с плавающей точкой, но мне не хватает инструкции для моей целочисленной версии. С помощью float, после того, как я завершил …
03 ноя '13 в 11:39