Вопросы по теме 'simd'
Быстрый, векторизуемый метод получения модуля чисел с плавающей запятой специальных простых чисел?
Есть ли быстрый метод для получения модуля числа с плавающей запятой?
С целыми числами есть приемы для простых чисел Мерсенна, так что можно вычислить y = x MOD 2 ^ 31-1 без деления. целочисленный трюк
Можно ли применить подобные трюки для...
638 просмотров
schedule
04.10.2022
транспонировать для 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 просмотров
schedule
21.10.2022
Как сравнить два вектора с помощью 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 просмотров
schedule
09.05.2024
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