Вопросы по теме 'avx2'
Оптимизировано извлечение 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
Вычисление SAD для 128 элементов с учетом двух массивов uint8_t
У меня есть два массива uint8_t , каждый из которых имеет 64 элемента. «Лучший» способ, который я придумал, чтобы вычислить SAD для всех из них, состоит в том, чтобы загрузить 4x 16 элементов, поместить их в два регистра m128i , а затем поместить...
750 просмотров
schedule
15.06.2023
mac osx 10.8.5, проблемы с компиляцией gcc4.9 для поддержки AVX
моя система - mac osx 10.8.5. По умолчанию gcc на этом компьютере — 4.2 (i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (на основе Apple Inc. build 5658) (LLVM build 2335.15.00)) я установил gcc 4.9 на / usr/местный.
У меня есть код, который...
785 просмотров
schedule
31.03.2023
Оптимальное растровое изображение uint8_t в логическом векторе SIMD размером 8 x 32 бита
В рамках алгоритма сжатия я ищу оптимальный способ добиться следующего:
У меня есть простое растровое изображение в файле uint8_t . Например 01010011
Я хочу __m256i формы: (0, maxint, 0, maxint, 0, 0, maxint, maxint)
Один из способов...
829 просмотров
schedule
13.07.2022
256-битный код AVX работает немного хуже, чем эквивалентный 128-битный код SSSE3
Я пытаюсь написать очень эффективный код расстояния Хэмминга. Вдохновленный Wojciech Muła чрезвычайно умной реализацией SSE3 popcount, Я закодировал эквивалентное решение AVX2, на этот раз с использованием 256-битных регистров. Я ожидал как...
3489 просмотров
schedule
18.02.2023
есть ли инструкция, обратная инструкции movemask в Intel avx2?
Инструкции movemask принимают __m256i и возвращают int32, где каждый бит (первые 4, 8 или все 32 бита в зависимости от типа входного элемента вектора) является самым старшим битом соответствующего элемента вектора.
Я хотел бы сделать обратное:...
3271 просмотров
schedule
05.08.2022
Эффективный способ вращения байта внутри регистра AVX
Сводка / tl; dr: Есть ли способ побитового поворота байта в регистре YMM (с использованием AVX), кроме как сдвигать в 2 раза и смешивать результаты вместе?
Для каждых 8 байтов в регистре YMM мне нужно повернуть в нем 7 байтов влево. Каждый байт...
1706 просмотров
schedule
23.09.2022
Эффективное расширение регистра uint32 до YMM с помощью встроенных функций Intel
Я пытаюсь реализовать способ передачи 32-битного целого числа в 256-битный регистр YMM в C, эффективно используя встроенные функции Intel. Однако хитрость заключается в том, что я хочу, чтобы каждый бит 32-битного целого числа был переведен либо в...
66 просмотров
schedule
21.04.2023
Ускорение сбора
У меня есть вычисление, которое создает вектор коэффициентов и возвращает скалярное произведение этого вектора с вектором данных, взятым из большого массива. Чтобы ускорить процесс, я делаю это для восьми векторов одновременно, используя встроенные...
337 просмотров
schedule
06.11.2023
Каков самый быстрый способ добавления элементов вектора по горизонтали в нечетном порядке?
В соответствии с этим вопросом я реализовал горизонтальный сложение на этот раз 5 на 5 и 7 на 7. Работает правильно, но недостаточно быстро. Может ли он быть быстрее, чем он есть? Я пытался использовать hadd и другие инструкции, но улучшение...
302 просмотров
schedule
26.08.2022
Что такое версия с плавающей запятой (__m256d) встроенной невременной потоковой загрузки (_mm256_stream_load_si256)?
В AVX/AVX2 я нашел только _mm256_stream_load_si256() , что для __m256i . Нет ли способа загрузить поток __m256d и почему? (Я хотел бы загрузить его, не загрязняя кеш процессора)
Есть ли какие-либо препятствия для следующих действий...
737 просмотров
schedule
07.12.2022
Умножить строки матрицы на вектор (низкоуровневая оптимизация)?
Я оптимизирую функцию и хочу избавиться от медленных циклов for. Я ищу более быстрый способ умножить каждую строку матрицы на вектор.
Я не ищу «классического» умножения.
Например. У меня есть матрица с 1024 столбцами и 20 строками и вектор...
774 просмотров
schedule
12.09.2022
C Суммарный массив AVX2 по горизонтали
У меня проблемы с инструкциями AVX2. Я написал программу на c, которая считывает двоичный файл с беззнаковыми символами, а затем суммирует их. Теперь я хочу заменить цикл c for инструкциями AVX2, но это не работает. Это первый раз, когда я хочу...
552 просмотров
schedule
16.04.2022
Трансляция с использованием встроенных функций AVX
Есть два способа трансляции с AVX2:
__m256i b = ...set register...
auto c = (__m256d)b; // version 1
auto d = _mm256_castsi256_pd(b); // version 2
Я предполагаю, что оба они должны дать одинаковые результаты. официальное руководство от...
347 просмотров
schedule
22.05.2022
Воспроизвести _mm256_sllv_epi16 и _mm256_sllv_epi8 в AVX2
Я был удивлен, увидев, что _mm256_sllv_epi16/8(__m256i v1, __m256i v2) и _mm256_srlv_epi16/8(__m256i v1, __m256i v2) не было в Руководстве Intel Intrinsics и Я не нахожу решения воссоздать этот встроенный AVX512 только с AVX2.
Эта функция...
680 просмотров
schedule
14.03.2024
AVX2 целочисленное умножение 8-битных элементов со знаком, дающее 16-битные результаты со знаком?
У меня есть два вектора __m256i, заполненные 32 8-битными целыми числами. Что-то вроде этого:
__int8 *a0 = new __int8[32] {2};
__int8 *a1 = new __int8[32] {3};
__m256i v0 = _mm256_loadu_si256((__m256i*)a0);
__m256i v1 =...
542 просмотров
schedule
07.11.2023
Почему сохранение и загрузка из 256-битного вектора AVX2 дает разные результаты в режимах отладки и выпуска?
Когда я пытаюсь хранить и load 256 бит в 256-битный вектор AVX2 и обратно, я не получаю ожидаемого результата в режиме выпуска.
use std::arch::x86_64::*;
fn main() {
let key = [1u64, 2, 3, 4];
let avxreg = unsafe {...
454 просмотров
schedule
12.10.2022
Все ли процессоры, поддерживающие AVX2, также поддерживают SSE4.2 и AVX?
Я планирую реализовать обнаружение расширений SIMD во время выполнения. Это так, что если я узнаю, что процессор поддерживает AVX2, то он гарантированно также будет иметь поддержку SSE4.2 и AVX?
7337 просмотров
schedule
31.07.2023
Эффективно вычисляйте абсолютные значения вектора std::complex‹float› с помощью AVX2
Для некоторого DSP-приложения реального времени мне нужно вычислить абсолютные значения вектора с комплексными значениями.
Простая реализация будет выглядеть так
computeAbsolute (std::complex<float>* complexSourceVec,...
591 просмотров
schedule
18.08.2022