Вопросы по теме 'sse'

Какой самый эффективный способ умножить 4 числа с плавающей запятой на 4 числа с плавающей запятой с помощью SSE?
В настоящее время у меня есть следующий код: float a[4] = { 10, 20, 30, 40 }; float b[4] = { 0.1, 0.1, 0.1, 0.1 }; asm volatile("movups (%0), %%xmm0\n\t" "mulps (%1), %%xmm0\n\t" "movups %%xmm0, (%1)"...
1765 просмотров
schedule 09.12.2022

С чего начать изучение ассемблера?
Мне нужно изучить ассемблер, используя инструкции SSE, и мне нужен gcc, чтобы связать код ASM с кодом c. Не знаю с чего начать и гугл не помог.
1466 просмотров
schedule 21.05.2023

Сравнительный анализ инструкций SSE
Я сравниваю некоторый код SSE (умножающий 4 числа с плавающей запятой на 4 числа с плавающей запятой) с традиционным кодом C, выполняющим тоже самое. Я думаю, что мой тестовый код должен быть в чем-то неправильным, потому что он, кажется, говорит,...
1738 просмотров
schedule 21.05.2022

C - Как получить доступ к элементам вектора, используя векторное расширение GCC SSE
Обычно я работаю с 3D-векторами, используя следующие типы: typedef vec3_t float[3]; инициализация векторов с помощью чего-л. как: vec3_t x_basis = {1.0, 0.0, 0.0}; vec3_t y_basis = {0.0, 1.0, 0.0}; vec3_t z_basis = {0.0, 0.0, 1.0};...
9011 просмотров
schedule 02.03.2023

Как заполнить регистр XMM x86 4 идентичными числами с плавающей запятой из другой записи регистра XMM?
Я пытаюсь реализовать встроенный ассемблер (в коде C / C ++), чтобы воспользоваться преимуществами SSE. Я хотел бы копировать и дублировать значения (из регистра XMM или из памяти) в другой регистр XMM. Например, предположим, что у меня есть...
6367 просмотров
schedule 03.05.2022

OpenMP + SSE не дает ускорения
Мой профессор узнал об этом интересном эксперименте 3D Linearly separable Kernel Convolution с использованием SSE и OpenMP и дал мне задание сравнить статистику нашей системы. Автор заявляет сумасшедшее 18-кратное ускорение по сравнению с...
1607 просмотров
schedule 16.05.2022

Программа Intrinsics (SSE) - g++ - нужна помощь
Это первый раз, когда я публикую вопрос в stackoverflow, поэтому, пожалуйста, постарайтесь не обращать внимания на любые ошибки, которые я мог допустить при форматировании моего вопроса/кода. Но, пожалуйста, укажите мне то же самое, чтобы я мог быть...
1560 просмотров
schedule 12.03.2022

Вычислите абсолютную разницу между целыми числами без знака, используя SSE
Есть ли в C метод без ветвления для вычисления абсолютной разницы между двумя целыми числами без знака? Например, учитывая переменные a и b, мне нужно значение 2 для случаев, когда a=3, b=5 или b=3, a=5. В идеале я также хотел бы иметь возможность...
9017 просмотров
schedule 02.12.2022

Переменное время выполнения программы C
Моя (simd) реализация занимает разное количество времени, хотя она запускается для фиксированного ввода. Время работы варьируется от, скажем, 100 миллионов тактовых циклов до 120 миллионов тактовых циклов. Программа вызывает функцию около 600 раз, и...
384 просмотров
schedule 12.05.2023

Преобразование (векторизация) кода с 32-битным условным элементом в SSE2 SSE3
Я хочу векторизовать код для Core2. Я думаю, я могу использовать встроенные функции из gcc или icc, и разрешены инструкции SSE, SSE2, SSE3, SSSE3. Мой код работает с массивами из 8 элементов uint32_t, и он такой (здесь только точка доступа):...
479 просмотров
schedule 16.05.2023

Вопросы о процессорах X86
У меня два вопроса о процессорах X86. Во-первых: что такое SSE? Для чего это? Это архитектура CISC? Следует ли программисту, который не программирует на ассемблере и не программирует компиляторы, изучать SSE? Второе: 64-битные процессоры...
409 просмотров
schedule 09.12.2021

Как абсолютировать 2 двойных или 4 числа с плавающей запятой, используя набор инструкций SSE? (до SSE4)
Вот пример кода C, который я пытаюсь ускорить с помощью SSE, два массива имеют длину 3072 элемента с удвоениями, могут опустить его до плавающего, если мне не нужна точность удвоения. double sum = 0.0; for(k = 0; k < 3072; k++) { sum +=...
10848 просмотров
schedule 26.04.2022

Профилирование SIMD-кода
ОБНОВЛЕНО – проверьте ниже Будет держать это как можно короче. С удовольствием добавим дополнительные детали, если потребуется. У меня есть код sse для нормализации вектора. Я использую QueryPerformanceCounter() (обернутый во вспомогательную...
1289 просмотров
schedule 22.11.2022

Как переместить 128-битные значения непосредственно в регистры XMM
Уже есть вопрос по этому поводу, но он был закрыт как "неоднозначный", поэтому я Открываю новый - нашел ответ, может и другим поможет. Возникает вопрос: как написать последовательность ассемблерного кода для инициализации регистра XMM 128-битным...
21247 просмотров
schedule 17.06.2022

Можно ли использовать регистры XMM для выполнения любой 128-битной целочисленной математики?
Мое впечатление точно нет, но, возможно, есть хитрый трюк? Спасибо.
1841 просмотров
schedule 18.05.2023

Как я могу использовать расширения SSE (и SSE2, SSE3 и т. д.) при сборке с помощью Visual C++?
Сейчас я работаю над небольшой оптимизацией базовой функции скалярного произведения, используя инструкции SSE в Visual Studio. Вот мой код: (соглашение о вызове функции cdecl): float SSEDP4(const vect & vec1, const vect & vec2) {...
1874 просмотров
schedule 25.07.2023

Встроенные функции SSE для сравнения (_mm_cmpeq_ps) и операции присваивания
Я начал оптимизировать свой код с помощью SSE. По сути, это трассировщик лучей, который обрабатывает 4 луча одновременно, сохраняя координаты в __m128 типов данных x, y, z (координаты для четырех лучей сгруппированы по осям). Однако у меня есть...
3813 просмотров
schedule 11.04.2022

умножение с использованием SSE (x*x*x)
Я пытаюсь оптимизировать функцию куба с помощью SSE. long cube(long n) { return n*n*n; } Я пробовал это: return (long) _mm_mul_su32(_mm_mul_su32((__m64)n,(__m64)n),(__m64)n); И производительность была еще хуже (и да я никогда...
585 просмотров
c sse
schedule 08.03.2023

Выравнивание 16-байтовой памяти с использованием инструкций SSE
я пытаюсь избавиться от невыровненных загрузок и хранилищ для инструкций SSE для моего приложения, заменив _mm_loadu_ps() by _mm_load_ps() и выделение памяти с помощью: float *ptr = (float *) _mm_malloc(h*w*sizeof(float),16)...
3380 просмотров
schedule 05.10.2022

Как перемещать 128-битные значения между регистрами XMM?
На первый взгляд тривиальная проблема при сборке: я хочу скопировать весь регистр XMM0 в XMM3. я пробовал movdq xmm3, xmm0 но MOVDQ нельзя использовать для перемещения значений между двумя регистрами XMM. Что мне делать вместо этого?
3710 просмотров
schedule 01.06.2022