Публикации по теме 'simd'
Повышение производительности с SIMD (многочисленные данные одной инструкции) — Концепция CS
«Одна инструкция для нескольких данных» (SIMD) относится к типу параллельной обработки данных, при котором ЦП или процессор одновременно выполняет несколько идентичных операций с несколькими данными. Этот метод часто используется, когда необходимо эффективно обработать очень большие и похожие объемы данных.
Чтобы представить это более подробно, мы можем рассмотреть пример сложения векторов. Обычно мы просматриваем каждый элемент векторов по отдельности и добавляем их, чтобы получить..
Оптимизация string.Count от LINQ до аппаратно ускоренных векторизованных инструкций
Меня всегда очень интересовала оптимизация кода, даже когда в достижении наилучшего возможного времени выполнения на самом деле нет необходимости - я считаю, что попытки улучшить свой код и выжать как можно больше производительности могут быть одновременно забавным и полезным упражнением для обучения.
Недавно я переписал простой метод подсчета количества вхождений данного char в строку , и при этом у меня также была возможность поэкспериментировать с векторизованными инструкциями,..
Вопросы по теме 'simd'
Как векторизовать с помощью gcc?
Компилятор gcc серии v4 может автоматически векторизовать циклы с помощью процессора SIMD на некоторых современных процессорах, таких как как чипы AMD Athlon или Intel Pentium/Core. Как это делается?
34959 просмотров
schedule
20.08.2022
Новичок в SIMD / SSE: простая фильтрация изображений
Я очень новичок в SIMD / SSE, и я пытаюсь выполнить простую фильтрацию изображений (размытие). Приведенный ниже код фильтрует каждый пиксель 8-битного серого растрового изображения с простым взвешиванием [1 2 1] по горизонтали. Я создаю суммы по 16...
3162 просмотров
schedule
29.04.2022
SSE2: функция журнала двойной точности
Мне нужна реализация функции журнала с открытым исходным кодом (без ограничений по лицензии), что-то с подписью
__m128d _mm_log_pd(__m128d);
Он доступен в библиотеке Intel Short Vector Math Library (часть ICC), но ICC не является ни...
2744 просмотров
schedule
28.09.2022
Диспетчеризация процессора x86 для SSE / AVX в C ++
У меня есть алгоритм, который выигрывает от ручной оптимизации с помощью встроенных функций SSE (2). Кроме того, в будущем алгоритм сможет использовать 256-битные регистры AVX.
Мой вопрос в том, как лучше всего
Зарегистрируйте варианты...
816 просмотров
schedule
10.10.2022
gcc, встроенные функции simd и концепции быстрой математики
Привет всем :) Я пытаюсь понять несколько концепций, касающихся операций с плавающей запятой, встроенных функций SIMD / math и флага fast-math для gcc. В частности, я использую MinGW с gcc v4.5.0 на процессоре x86.
Я уже некоторое время искал, и...
5000 просмотров
schedule
16.04.2022
Имеет ли смысл переписывать memcpy/memcmp/ с SIMD-инструкциями?
Имеет ли смысл переписывать memcpy/memcmp/... с инструкциями SIMD в крупномасштабном программном обеспечении?
Если да, то почему GCC по умолчанию не генерирует SIMD-инструкции для этих библиотечных функций?
Кроме того, есть ли какие-либо другие...
7368 просмотров
schedule
25.03.2023
Код, оптимизированный для SSE, работает так же, как и обычная версия.
Я хотел сделать свои первые шаги с Intel SSE, поэтому я следовал руководству, опубликованному здесь , с той разницей, что вместо разработки для Windows и C++ я делаю это для Linux и C (поэтому я использую не _aligned_malloc , а posix_memalign )....
1763 просмотров
schedule
21.07.2023
Как быстро посчитать биты в отдельные бины в ряду целых чисел на Sandy Bridge?
Обновление: пожалуйста, прочтите код, он НЕ касается подсчета битов в одном int
Можно ли улучшить производительность следующего кода с помощью какого-нибудь умного ассемблера?
uint bit_counter[64];
void Count(uint64 bits) {
bit_counter[0]...
1786 просмотров
schedule
19.06.2022
Оптимизация сжатия массива
Допустим, у меня есть массив k = [1 2 0 0 5 4 0]
Я могу вычислить маску следующим образом m = k > 0 = [1 1 0 0 1 1 0]
Используя только маску m и следующие операции
Сдвиг влево/вправо
И/или
Сложить/вычесть/умножить
Я могу...
3270 просмотров
schedule
08.04.2022
Ошибка SSE в моем процессоре?
Я очень озадачен.
Когда я запускаю этот код в Visual C++ 2008:
__m128i a, b;
a.m128i_u64[0] = 1;
b.m128i_u64[0] = 0;
a.m128i_u64[1] = 0;
b.m128i_u64[1] = 0;
printf("%d\n", _mm_testc_si128(a, b));
он печатает 1 . Что противоречит тому,...
290 просмотров
schedule
24.05.2022
ARM Neon: VPADAL для вычитания
Я использую инструкцию VPADAL.U32 , чтобы значительно увеличить скорость моего кода добавления. Однако мне нужно было бы что-то вычитать с накоплением и нести (именно то, что я получил в качестве сложения).
Желаемое или реально возможное?
Из...
412 просмотров
schedule
03.06.2024
Загрузка и добавление SSE
Предположим, у меня есть два вектора, представленные двумя массивами типа double , каждый из которых имеет размер 2. Я хотел бы добавить соответствующие позиции. Итак, предположим векторы i0 и i1 , я бы хотел сложить i0[0] + i1[0] и i0[1] +...
2589 просмотров
schedule
23.06.2022
Самый быстрый способ выполнить суммирование горизонтальных векторов с помощью инструкций AVX
У меня есть упакованный вектор из четырех 64-битных значений с плавающей запятой. Я хотел бы получить сумму элементов вектора.
С SSE (и с использованием 32-битных чисел с плавающей запятой) я мог просто сделать следующее:
v_sum =...
23971 просмотров
schedule
26.02.2023
Инструкции SSE для добавления всех элементов массива
Я новичок в инструкциях SSE2. Я нашел инструкцию _mm_add_epi8 , которая может добавить два элемента массива. Но мне нужна инструкция SSE, которая может добавлять все элементы массива.
Я пытался разработать эту концепцию, используя этот код:...
22887 просмотров
schedule
06.01.2023
ROS (операционная система для роботов) с флагом SSSE3
Я недавно начал работать с ROS и застрял на одной проблеме. Мне нужно использовать некоторые классы, требующие расширения ЦП SSE2, SSE3 и SSSE3.
Я попытался отредактировать файл manifest.xml моего пакета ROS, например
<package>...
252 просмотров
schedule
18.07.2022
P/вызов неуправляемого кода С++ из С# - получение попытки доступа к защищенной памяти
Короче говоря, я пытаюсь выполнить математику SIMD из С#, используя неуправляемую функцию умножения С++ и возиться с указателями.
Функция С++:
extern "C" __declspec(dllexport) void SIMDVector4Mult( __m128* a, __m128* b )
{
__m128 c =...
437 просмотров
schedule
08.08.2023
Переменные printf SSE __m128i в Visual Studio
У меня есть код, который использует оптимизацию SIMD и различные переменные __m128i. Очевидно, что printf не может с ними справиться. Есть ли простой способ распечатать их содержимое? Я использую Visual Studio 2010 с C/C++.
2629 просмотров
schedule
04.08.2023
Управление расхождением потока в SIMT и SIMD
Я читаю эту книгу, чтобы изучить концепции CUDA. глубоко. В одной из глав, которая знакомит с концепцией SIMT, говорится
Возможность расхождения потока управления в SIMT также упрощает требование к программистам использовать дополнительные...
1361 просмотров
schedule
02.07.2022
Увеличить размер типа данных в регистре SSE
Я использую VS2005 (на работе) и мне нужен встроенный SSE, который делает следующее:
У меня есть уже существующий __m128i n , заполненный 16-битными целыми числами a_1,a_2,....,a_8 .
Поскольку для некоторых вычислений, которые я сейчас хочу...
220 просмотров
schedule
27.10.2022
Принудительная автоматическая векторизация с помощью GCC
Вот мой очень простой вопрос. Я знаю, что с ICC можно использовать #pragma SIMD для принудительной векторизации циклов, которые компилятор предпочитает не векторизовать. Есть ли что-то подобное в GCC? Или есть ли планы добавить эту функцию в...
1068 просмотров
schedule
11.06.2022