Публикации по теме 'simd'


Повышение производительности с SIMD (многочисленные данные одной инструкции) — Концепция CS
«Одна инструкция для нескольких данных» (SIMD) относится к типу параллельной обработки данных, при котором ЦП или процессор одновременно выполняет несколько идентичных операций с несколькими данными. Этот метод часто используется, когда необходимо эффективно обработать очень большие и похожие объемы данных. Чтобы представить это более подробно, мы можем рассмотреть пример сложения векторов. Обычно мы просматриваем каждый элемент векторов по отдельности и добавляем их, чтобы получить..

Оптимизация string.Count от LINQ до аппаратно ускоренных векторизованных инструкций
Меня всегда очень интересовала оптимизация кода, даже когда в достижении наилучшего возможного времени выполнения на самом деле нет необходимости - я считаю, что попытки улучшить свой код и выжать как можно больше производительности могут быть одновременно забавным и полезным упражнением для обучения. Недавно я переписал простой метод подсчета количества вхождений данного char в строку , и при этом у меня также была возможность поэкспериментировать с векторизованными инструкциями,..

Вопросы по теме 'simd'

Как векторизовать с помощью gcc?
Компилятор gcc серии v4 может автоматически векторизовать циклы с помощью процессора SIMD на некоторых современных процессорах, таких как как чипы AMD Athlon или Intel Pentium/Core. Как это делается?
34959 просмотров

Новичок в 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