Вопросы по теме 'avx'
Диспетчеризация процессора x86 для SSE / AVX в C ++
У меня есть алгоритм, который выигрывает от ручной оптимизации с помощью встроенных функций SSE (2). Кроме того, в будущем алгоритм сможет использовать 256-битные регистры AVX.
Мой вопрос в том, как лучше всего
Зарегистрируйте варианты...
816 просмотров
schedule
10.10.2022
Оптимизация для pow () с константной нецелой экспонентой?
В моем коде есть горячие точки, где я делаю pow() , отнимая около 10-20% времени выполнения.
Мой вклад в pow(x,y) очень конкретен, поэтому мне интересно, есть ли способ свернуть два pow() приближения (по одному для каждой экспоненты) с более...
11557 просмотров
schedule
29.08.2022
Как быстро посчитать биты в отдельные бины в ряду целых чисел на Sandy Bridge?
Обновление: пожалуйста, прочтите код, он НЕ касается подсчета битов в одном int
Можно ли улучшить производительность следующего кода с помощью какого-нибудь умного ассемблера?
uint bit_counter[64];
void Count(uint64 bits) {
bit_counter[0]...
1786 просмотров
schedule
19.06.2022
Использование инструкций процессора AVX: низкая производительность без / arch: AVX
В моем коде на C ++ используется SSE, и теперь я хочу улучшить его для поддержки AVX, когда он будет доступен. Поэтому я определяю, когда доступен AVX, и вызываю функцию, использующую команды AVX. Я использую Win7 SP1 + VS2010 SP1 и процессор с AVX....
30106 просмотров
schedule
12.04.2022
Можно ли скомпилировать код OpenCL в обычные двоичные файлы без OpenCL?
Я оцениваю OpenCL для своих целей. Мне пришло в голову, что вы не можете предположить, что он работает «из коробки» ни на Windows, ни на Mac, потому что:
Windows нужен драйвер OpenCL (который, конечно, можно установить)
MacOS поддерживает...
783 просмотров
schedule
26.02.2023
Самый быстрый способ выполнить суммирование горизонтальных векторов с помощью инструкций AVX
У меня есть упакованный вектор из четырех 64-битных значений с плавающей запятой. Я хотел бы получить сумму элементов вектора.
С SSE (и с использованием 32-битных чисел с плавающей запятой) я мог просто сделать следующее:
v_sum =...
23971 просмотров
schedule
26.02.2023
Как повернуть вектор SSE / AVX
Мне нужно выполнить операцию поворота с как можно меньшим тактовым циклом. В первом случае допустим __m128i как источник и тип назначения:
source: || A0 || A1 || A2 || A3 ||
dest: || A1 || A2 || A3 || A0 ||
dest =...
6415 просмотров
schedule
10.11.2023
AVX конвертирует 64-битное целое число в 64-битное число с плавающей запятой
Я хотел бы преобразовать 4 упакованных 64-битных целых числа в 4 упакованных 64-битных числа с плавающей запятой, используя AVX. Я пробовал что-то вроде:
int_64t *ls = (int64_t *) _mm_malloc(256, 32);
ls[0] = a;
//...
ls[3] = d;
__mm256i packed...
1942 просмотров
schedule
09.05.2022
256-битный эквивалент AVX для _mm_load1_ps
С помощью SSE вы можете загрузить один float из памяти во все 4 слота __m128 с помощью встроенного _mm_load1_ps ()
При использовании SIMD шириной 256 бит с AVX, похоже, нет _mm256_load1_ps () для загрузки одного числа с плавающей запятой из памяти...
1569 просмотров
schedule
30.12.2022
Есть ли в ядре Linux собственный контекст SSE/AVX?
Есть ли в ядре Linux собственный контекст SSE/AVX?
Я имею в виду, с точки зрения модуля ядра, могу ли я использовать инструкции SSE/AVX, не беспокоясь о приложениях пользовательского пространства, которые тоже могут их использовать? Или мне нужно...
2373 просмотров
schedule
12.06.2022
Математические функции занимают больше циклов после запуска любой функции Intel AVX
Я заметил, что математические функции (такие как ceil, round и т. д.) занимают больше циклов ЦП после запуска любой функции Intel AVX.
См. следующий пример:
#include <stdio.h>
#include <math.h>
#include <immintrin.h>
static...
358 просмотров
schedule
14.01.2023
FMA3 в GCC: как включить
У меня i5-4250U с AVX2 и FMA3. Я тестирую код умножения плотных матриц в GCC 4.8.1 на Linux, который я написал. Ниже приведен список из трех разных способов компиляции.
SSE2: gcc matrix.cpp -o matrix_gcc -O3 -msse2 -fopenmp
AVX: gcc...
14723 просмотров
schedule
21.05.2022
какой наиболее эффективный код для расширения больших целых чисел по знаку?
Я пишу библиотеку кода на языке ассемблера x86-64, чтобы предоставить все обычные побитовые, сдвиговые, логические, сравнительные, арифметические и математические функции для s0128 , s0256 , s0512 , s1024 , s2048 и s4096 целочисленных типов со...
286 просмотров
schedule
19.12.2022
Оптимизировано извлечение 64-битного значения из регистра AVX2.
Я пытаюсь извлечь 64 бит из регистра __m256i. Пример моей текущей функции извлечения:
byte 31 16 15 0
byte_result_vec 000D 000C 000B 000A 000H 000G 000F 000E...
1779 просмотров
schedule
24.01.2023
Как очистить верхние 128 бит значения __m256?
Как очистить верхние 128 бит m2:
__m256i m2 = _mm256_set1_epi32(2);
__m128i m1 = _mm_set1_epi32(1);
m2 = _mm256_castsi128_si256(_mm256_castsi256_si128(m2));
m2 = _mm256_castsi128_si256(m1);
не работают - в документации Intel для...
1007 просмотров
schedule
24.04.2022
Горизонтальный минимум и максимум с использованием SSE
У меня есть функция, использующая SSE, чтобы делать много вещей, и профилировщик показывает мне, что часть кода, которую я использую для вычисления горизонтального минимума и максимума, занимает большую часть времени.
Например, я использовал...
7089 просмотров
schedule
18.10.2022
Использование встроенных функций sse и avx для добавления набора упакованных одиночных чисел в одно значение
У меня есть код, который я пытаюсь ускорить. Во-первых, я использовал встроенные функции SSE и увидел значительный выигрыш. Теперь я пытаюсь понять, могу ли я сделать то же самое с внутренними функциями AVX. Код, по сути, берет два массива,...
1213 просмотров
schedule
30.05.2024
Есть ли более эффективный способ транслировать 4 смежных двойных значения в 4 регистра YMM?
В фрагменте кода C++, который делает что-то похожее (но не совсем) на умножение матриц, я загружаю 4 смежных двойных числа в 4 регистра YMM следующим образом:
# a is a 64-byte aligned array of double
__m256d b0 =...
1802 просмотров
schedule
06.08.2023
Выравнивание AVX в массиве
Я использую MSVC12 (Visual Studio 2013 Express) и пытаюсь реализовать быстрое умножение значений с плавающей запятой 8 * 8. Проблема заключается в выравнивании: вектор имеет на самом деле 9 * n значений, но мне всегда нужны только первые 8, так что,...
1077 просмотров
schedule
23.07.2023
Вычисление SAD для 128 элементов с учетом двух массивов uint8_t
У меня есть два массива uint8_t , каждый из которых имеет 64 элемента. «Лучший» способ, который я придумал, чтобы вычислить SAD для всех из них, состоит в том, чтобы загрузить 4x 16 элементов, поместить их в два регистра m128i , а затем поместить...
750 просмотров
schedule
15.06.2023