Описание тега sse2
NoneX 86 Streaming SIMD Extensions 2 добавляет поддержку упакованных целых чисел и чисел с плавающей запятой двойной точности в 128-байтовых векторных регистрах XMM. Он всегда поддерживается на x86-64 и поддерживается на всех процессорах x86 с 2003 года или новее.
1
ответ
Оптимальный способ хранения двойных SSE2/AVX/AVX512 как плавающих с использованием встроенных функций
Мне часто нужно использовать double по соображениям точности, но я хочу сохранить результаты как плавающие. Какой оптимальный способ? Я в настоящее время использую: SSE2: _mm_store_sd((double*)dst, _mm_castps_pd(_mm_cvtpd_ps(xmm))); AVX: _mm_storeu_…
18 окт '18 в 09:45
6
ответов
Как оптимизировать цикл?
У меня есть следующая функция узкого места. typedef unsigned char byte; void CompareArrays(const byte * p1Start, const byte * p1End, const byte * p2, byte * p3) { const byte b1 = 128-30; const byte b2 = 128+30; for (const byte * p1 = p1Start; p1 != …
21 окт '10 в 11:40
1
ответ
Добавление массива SIMD для произвольной длины массива
Я учусь использовать возможности SIMD, переписывая свою личную библиотеку обработки изображений с использованием векторных встроенных функций. Одна базовая функция - это простой массив +=то есть void arrayAdd(unsigned char* A, unsigned char* B, size…
16 апр '12 в 00:57
3
ответа
NumPy вызывая sse2 через ctypes
Вкратце, я пытаюсь вызвать общую библиотеку из python, а точнее из numpy. Общая библиотека реализована в C с использованием инструкций sse2. Включая оптимизацию, то есть собирая библиотеку с -O2 или -O1, я сталкиваюсь со странными ошибками при вызов…
15 июн '10 в 12:39
0
ответов
GCC std::sin ошибка векторизации?
Следующий код (с -O3 -ffast-math): #include <cmath> float a[4]; void sin1() { for(unsigned i = 0; i < 4; i++) a[i] = sinf(a[i]); } Компилирует векторизованную версию sinf (_ZGVbN4v_sinf): sin1(): sub rsp, 8 movaps xmm0, XMMWORD PTR a[rip] c…
03 авг '17 в 08:31
2
ответа
Как загрузить 16 8-битных данных и объединить их в 4 без знака int?
Есть ли какой-нибудь элегантный способ загрузить 16 8-битных данных и объединить их в 4 unsigned int? как следует: загрузить следующий массив (16 epi8) с помощью _mm_load_si128() в __m128i 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, …
22 фев '12 в 16:26
1
ответ
Как скопировать байты в регистр xmm0
У меня есть следующий код, который работает нормально, но кажется неэффективным, учитывая конечный результат, требующий только данные в xmm0 mov rcx, 16 ; get first word, up to 16 bytes mov rdi, CMD ; ...and put it in CMD mov rsi, CMD_BLOCK @@: lods…
18 сен '16 в 01:16
2
ответа
Добавление двух типов __m128 через инфраструктуру ускорения
Мне нужно добавить / Mul / Sub два __m128 (плавающие) переменные с использованием Accelerate framework. Но я не могу найти функцию для этого. Все функции ускорения фреймворка занимают int__vector__ введите вместо float__vector__ тип. Я нахожу функци…
20 апр '12 в 16:44
3
ответа
Как загрузить 96 бит из памяти в регистр XMM?
Скажем, у меня есть указатель на память в rsiи я хотел бы загрузить 12-байтовое значение, указанное в младшие 96 бит xmm0, Мне все равно, что происходит с старшими 32 битами. Какой эффективный способ сделать это? (Дополнительный вопрос: лучшее, что …
12 апр '16 в 04:04
2
ответа
Ускорить умножение матриц с помощью SSE2
Я хочу знать, как ускорить умножение матриц на SSE2 вот мой код int mat_mult_simd(double *a, double *b, double *c, int n) { __m128d c1,c2,a1,a2,b1; for(int i=0; i<n/2; i++){ for(int j=0; j<n/2; j++){ c1 = _mm_load_pd(c+(2*j*n)+(i+2)); c2 = _mm…
04 июн '14 в 08:10
3
ответа
Почему я не могу удалить _mm_empty()?
У меня есть функция C++ с некоторыми инструкциями SSE2. Проблема в том, что я получаю следующую ошибку компоновщика при компиляции этого кода с помощью Microsoft Visual C++: неразрешенный внешний символ _m_empty, указанный в функции "void * __cdecl …
16 дек '15 в 09:25
3
ответа
SIMD: Почему преобразование цветов SSE RGB в YUV имеет ту же скорость, что и реализация C++?
Я только что попытался оптимизировать конвертер RGB в YUV420. Использование таблицы поиска привело к увеличению скорости, как и арифметика с фиксированной точкой. Однако я ожидал реальной выгоды, используя инструкции SSE. Моя первая попытка привела …
28 янв '11 в 14:08
1
ответ
Быстрое копирование каждого второго байта в новую область памяти
Мне нужен быстрый способ скопировать каждый второй байт в новую область памяти malloc. У меня есть необработанное изображение с данными RGB и 16 битами на канал (48 бит), и я хочу создать изображение RGB с 8 битами на канал (24 бита). Есть ли более …
28 сен '17 в 11:28
1
ответ
Два 32-разрядных целых числа со знаком и умножение с использованием SSE2
Как я могу умножить два 32-разрядных целых числа со знаком, используя набор инструкций SSE2?
16 май '13 в 17:46
1
ответ
Оптимизировать без выравнивания SSE2/AVX2 XOR
В моем коде я должен обрабатывать "разоблачение" пакетов веб-сокетов, что по сути означает, что XOR не выравнивает данные произвольной длины. Благодаря SO ( разоблачение данных Websocket / многобайтовый xor) я уже выяснил, как (надеюсь) ускорить это…
24 июл '13 в 16:26
2
ответа
Оптимизация кода SSE2
Я использую встроенные функции SSE2 для оптимизации узких мест моего приложения и у меня следующий вопрос: ddata = _mm_xor_si128(_mm_xor_si128( _mm_sll_epi32(xdata, 0x7u), _mm_srl_epi32(tdata, 0x19u)), xdata); На Microsoft C++ Compiler это не скомпи…
03 ноя '11 в 13:33
2
ответа
Альтернатива ручному исправлению выравнивания данных sse2 на 16-байтовой границе
Есть ли альтернатива следующей ручной починке: // excerpt adapted from SIMDTest in // http://www.mccauslandcenter.sc.edu/mricro/obsolete/graphics/simdtest.zip // var lAdblRAp, lArraySz, lAdblRA, Doublep: LongInt; begin // ... GetMem(lAdblRAp,(lArray…
23 фев '12 в 06:07
1
ответ
Могу ли я сразу переместить 256-битную память из регистров YMM?
Могу ли я сразу переместить 256-битную память из регистров YMM? Если я хочу заполнить регистр xmm, я использую встроенный asm в gcc: "movlpd mytest_1(%rip),%xmm1 \n\t" "movhpd mytest_1+8(%rip),%xmm1 \n\t" Можно ли сделать это проще? Кроме того: та ж…
10 сен '17 в 16:35
2
ответа
Умножение вектора с плавающей запятой на sse/sse2
Я должен реализовать матрично-векторное умножение, используя sse / sse2. Вектор и матрица большие. Матрица двойная, вектор с плавающей точкой. Дело в том, что все вычисления, которые я должен делать для чисел с плавающей запятой - когда я получаю да…
28 фев '11 в 07:45
1
ответ
SSE работает медленно после использования AVX
У меня странная проблема с некоторыми кодами SSE2 и AVX, над которыми я работал. Я строю свое приложение, используя GCC, который обнаруживает функцию процессора во время выполнения. Объектные файлы создаются с отдельными флагами для каждой функции Ц…
15 окт '15 в 13:16