Вопросы по теме '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