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

Быстрый, векторизуемый метод получения модуля чисел с плавающей запятой специальных простых чисел?
Есть ли быстрый метод для получения модуля числа с плавающей запятой? С целыми числами есть приемы для простых чисел Мерсенна, так что можно вычислить y = x MOD 2 ^ 31-1 без деления. целочисленный трюк Можно ли применить подобные трюки для...
638 просмотров

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

Как быстро вы можете сделать линейный поиск?
Я хочу оптимизировать этот линейный поиск: static int linear (const int *arr, int n, int key) { int i = 0; while (i < n) { if (arr [i] >= key) break; ++i; }...
12383 просмотров
schedule 16.03.2022

В чем разница между логическими встроенными функциями 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

Возможна ли инверсия матрицы 3x3 с использованием инструкций SIMD?
Я использую процессор на базе ARM Cortex-A8, и у меня есть несколько мест, где я вычисляю обратные операции 3x3 Matrix. Поскольку процессор Cortex-a8 имеет процессор NEON SIMD, мне интересно использовать этот сопроцессор для инверсии матрицы 3x3, я...
3361 просмотров
schedule 02.03.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

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

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

Как я могу обменять младшие 128 бит и старшие 128 бит в 256-битном регистре AVX (YMM)
Я портирую код SSE SIMD для использования 256-битных расширений AVX и не могу найти никаких инструкций, которые будут смешивать / перемешивать / перемещать высокие 128 бит и младшие 128 бит. Сюжетная история: Я действительно хочу, чтобы _1 _ / _...
9392 просмотров
schedule 25.01.2024

Используют ли векторные типы OpenCL SIMD
В настоящее время у меня есть большой массив чисел с плавающей запятой, который я обрабатываю в своем ядре OpenCL, и мне интересно, разделю ли я этот массив и вместо этого использую массив векторного типа OpenCL, если это ускорит процесс. В принципе,...
3614 просмотров
schedule 01.12.2022

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

Зачем указывать адрес переменной в ASM, а не просто копировать его в регистр?
В своем стремлении изучить ассемблер (используя GCC на x86_64) я столкнулся с некоторыми примерами SSE, где вместо простого копирования переменной C в регистр вместо этого адрес копируется в EAX. Зачем это делать, когда можно просто сделать это:...
645 просмотров
schedule 12.06.2022

Перемещение одного поплавка в регистр xmm
Я хочу умножить данные, хранящиеся в одном регистре xmm, на одно значение с плавающей запятой и сохранить результат в регистре xmm. Я сделал небольшой рисунок, чтобы лучше это объяснить. Как видите, у меня есть регистр xmm0 с моими данными....
5801 просмотров
schedule 30.03.2022

Является ли предпочтение SIMD всегда избавляться от ветвления?
Если вы пишете какой-то SIMD-код, который будет выполняться другой программой, всегда ли выгодно избавиться от ветвления для повышения производительности? Я слышал, что даже выполнение дополнительных операций только для того, чтобы избежать...
1071 просмотров

ARM NEON: сравнение 128-битных значений
Мне интересно найти самый быстрый способ (наименьшее количество циклов) сравнения значений, хранящихся в регистрах NEON (скажем, Q0 и Q3) на ядре Cortex-A9 (разрешены инструкции VFP). Пока у меня есть следующее: (1) Использование сравнения VFP с...
1964 просмотров
schedule 11.12.2023

Intel AVX: 256-битная версия точечного произведения для переменных с плавающей запятой двойной точности
Intel Advanced Vector Extensions (AVX) не предлагает точечного произведения в 256-битной версии (регистр YMM) для переменных с плавающей запятой двойной точности . "Почему?" вопрос был очень кратко рассмотрен на другом форуме ( здесь ) и при...
14529 просмотров
schedule 20.03.2024