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

Странная внутренняя оптимизация VC++ SSE
Я выполняю разрозненное чтение 8-битных данных из файла (де-чередование 64-канального волнового файла). Затем я объединяю их в единый поток байтов. Проблема, с которой я сталкиваюсь, связана с моей реконструкцией данных для записи. В основном я...
3188 просмотров
schedule 08.07.2022

транспонировать для 8 регистров 16-битных элементов на SSE2 / SSSE3
(Я новичок в SSE / asm, извиняюсь, если это очевидно или избыточно) Есть ли лучший способ транспонировать 8 регистров SSE, содержащих 16-битные значения, чем выполнение 24 unpck [lh] ps и 8/16 + перемешивания с использованием 8 дополнительных...
3544 просмотров
schedule 01.07.2023

В чем разница между логическими встроенными функциями SSE?
Есть ли разница между логическими встроенными функциями SSE для разных типов? Например, если мы возьмем операцию ИЛИ, есть три встроенных функции: _mm_or_ps, _mm_or_pd и _mm_or_si128, все из которых делают одно и то же: вычисляют побитовое ИЛИ...
4215 просмотров
schedule 02.01.2023

Оптимизация SSE SIMD для цикла
У меня есть код в цикле for(int i = 0; i < n; i++) { u[i] = c * u[i] + s * b[i]; } Итак, u и b - векторы одинаковой длины, а c и s - скаляры. Подходит ли этот код для векторизации для использования с SSE для ускорения? ОБНОВЛЕНИЕ...
8612 просмотров
schedule 21.02.2022

Головоломка по оптимизации SIMD
Я хочу оптимизировать следующую функцию с помощью SIMD (SSE2 и т. д.): int64_t fun(int64_t N, int size, int* p) { int64_t sum = 0; for(int i=1; i<size; i++) sum += (N/i)*p[i]; return sum; } Это похоже на в высшей степени...
1188 просмотров
schedule 20.08.2022

Как рассчитать одно-векторное точечное произведение с использованием встроенных функций SSE в C
Я пытаюсь умножить два вектора вместе, где каждый элемент одного вектора умножается на элемент с тем же индексом в другом векторе. Затем я хочу просуммировать все элементы результирующего вектора, чтобы получить одно число. Например, расчет будет...
25606 просмотров
schedule 12.03.2024

SSE: преобразовать __m128 и __m128i в два __m128d
Два связанных вопроса. Это то, что мой код должен делать с довольно большим объемом данных. Это делается внутри внутренних циклов, и производительность важна. Преобразуйте массив __int32 в двойные (или преобразуйте __m128i в два __m128d)....
5955 просмотров
schedule 29.05.2024

SSE лучший способ установить регистр на 0.0 и 1.0?
Я занимаюсь математикой sse vector3. Обычно я устанавливаю 4-ю цифру своего вектора на 1.0f, так как это делает большую часть моей математической работы, но иногда мне нужно установить ее на 0.0f. Итак, я хочу изменить что-то вроде: (32.4f,...
3757 просмотров
schedule 03.10.2022

Выравнивание памяти G ++ SSE в стеке
Я пытаюсь переписать трассировщик лучей, используя Streaming SIMD Extensions. Мой исходный трассировщик лучей использовал встроенную сборку и инструкции movups для загрузки данных в регистры xmm. Я читал, что встроенные функции компилятора...
4753 просмотров

Инструкция SSE для клонирования-расширения регистра XMM
Существует ли инструкция SSE (до версии 4.2), которая автоматически заполняет четыре регистра XMM значением четырех слов другого регистра XMM? Пример: выполнение инструкции для слова ABCD заполнит четыре регистра XMM: AAAA , BBBB , CCCC и...
559 просмотров
schedule 04.02.2023

Встроенная сборка GCC - переместить float в XMM0 перед вызовом
В настоящее время я пытаюсь вызвать общую функцию C из встроенной сборки GCC (я знаю, плохая идея, но мне сегодня скучно ...). Моя операционная система - Mac OS X, 64 бита, поэтому соглашение о вызовах - System V, то есть аргументы 0-6 передаются...
3210 просмотров
schedule 10.03.2023

xmmintrin.h против векторных расширений gcc
Какой метод я должен предпочесть для написания SIMD-инструкций? Методы mm * из *mmintrin.h кажутся более переносимыми между компиляторами. Но gcc векторные расширения , кажется, производит намного более простой код и поддерживает больше...
4051 просмотров
schedule 15.07.2022

Как выровнять стек по границе 32 байта в GCC?
Я использую сборку MinGW64 на основе GCC 4.6.1 для 64-битной Windows. Я играю с новыми инструкциями Intel AVX. Мои аргументы командной строки -march=corei7-avx -mtune=corei7-avx -mavx . Но я начал сталкиваться с ошибками сегментации при...
5325 просмотров
schedule 04.12.2022

SSE, где я могу найти руководство по переводу с SSE на ассемблер
Мне нужно кое-что запрограммировать на ассемблере SSE2. Все, что я вижу, это встроенные функции. Я тщетно искал таблицу перевода встроенных функций в ассемблер. Поскольку я не хочу играть в угадайку, может кто-нибудь дать мне ссылку, чтобы...
268 просмотров
schedule 14.03.2022

Ошибка ссылки при использовании встроенной математической библиотеки в сочетании с предварительно скомпилированным заголовочным файлом
Сегодня я столкнулся с довольно странной проблемой. У меня есть математическая библиотека, оптимизированная для SSE, поэтому почти весь функционал объявлен как встроенный. Для упрощения я объясню проблему только с помощью одного класса, Vector3:...
301 просмотров
schedule 02.04.2022

Как заставить компилятор ICC генерировать инструкции SSE во внутреннем цикле?
У меня есть внутренний цикл, такой как этот for(i=0 ;i<n;i++){ x[0] += A[i] * z[0]; x[1] += A[i] * z[1]; x[2] += A[i] * z[2]; x[3] += A[i] * z[3]; } Внутренние 4 инструкции могут быть легко преобразованы компилятором в инструкции SSE....
560 просмотров
schedule 07.06.2023

Ускорение матрицы 5x5 с плавающей запятой * векторное умножение с помощью SSE
Мне нужно запустить умножение матрицы на вектор 240000 раз в секунду. Матрица 5x5 всегда одна и та же, а вектор меняется на каждой итерации. Тип данных float . Я думал об использовании некоторых инструкций SSE (или подобных). Меня беспокоит,...
9641 просмотров

Быстрый способ копирования памяти с переводом - ARGB в BGR
Обзор У меня есть буфер изображений, который мне нужно преобразовать в другой формат. Буфер исходного изображения состоит из четырех каналов, 8 бит на канал: альфа, красный, зеленый и синий. Целевой буфер состоит из трех каналов по 8 бит на канал:...
9152 просмотров
schedule 24.04.2022

Как сравнить два вектора с помощью SIMD и получить один логический результат?
У меня есть два вектора по 4 целых числа в каждом, и я хотел бы использовать команду SIMD для их сравнения (скажем, сгенерировать вектор результатов, где каждая запись равна 0 или 1 в зависимости от результата сравнения). Затем я хотел бы сравнить...
9363 просмотров
schedule 22.06.2023

Написание фрагмента кода C таким образом, чтобы компилятор использовал инструкцию SSE4.1 для генерации ассемблерного кода.
Я хочу написать некоторый код C, чтобы gcc с помощью флага -msse4.1 мог его оптимизировать. В основном я хочу проверить, использует ли компилятор инструкции SSE4.1. Существует множество инструкций SSE4.1 (...
706 просмотров
schedule 05.03.2023