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