intrinsics

Я оптимизирую некоторый код для микроархитектуры Intel x86 Nehalem, используя встроенные функции SSE. Часть моей программы вычисляет 4 точечных произведения и добавляет каждый результат к предыдущим значениям в непрерывном куске массива. Более конкретно, tmp0 = _mm_dp_ps(A_0m, B_0m, 0xF1); tmp1 = _mm_dp_ps...

Я хочу использовать встроенные функции для увеличения элементов вектора SIMD. Самый простой способ, кажется, состоит в том, чтобы добавить 1 к каждому элементу, например: (Примечание: vec_inc было установлено в 1 раньше) vec = _mm256_add_epi16 (vec, vec_inc); Но существует ли какая-либо специальная инс...

Я копаюсь в чужом коде и в данный момент пытаюсь понять, почему _mm_load_si128 существует. По существу, я попытался заменить _ra = _mm_load_si128(reinterpret_cast<__m128i*>(&cd->data[idx])); С _ra = *reinterpret_cast<__m128i*>(&cd->data[idx]); И он работает и выполняет точно...

Я написал простую программу для реализации SSE intrinsics для вычисления внутреннего произведения двух больших (100000 и более элементов) векторов. Программа сравнивает время выполнения для обоих, внутренний продукт вычисляется обычным способом и с использованием встроенных компонентов. Все работает отлично, ...

Я пытаюсь найти фактическую разницу между _mm256_xor_si256 и _mm256_xor_ps внутренностями из AVX(2). Они соответственно сопоставляются с инструкциями intel: vpxor ymm, ymm, ymm vxorps ymm, ymm, ymm Которые определяются Intel как: dst[255:0] := (a[255:0] XOR b[255:0]) dst[MAX:256] := 0 Против FO...

Я меняю большую кодовую базу с использования msvc на clang для продукта windows. Этот продукт использует большое количество встроенных компонентов компилятора msvc, таких как _InterlockedOr и т. д. Если я создаю небольшую тестовую программу с использованием clang на windows, она строится, связывается и рабо...

Я попытался смешать встроенные функции SSE2 и встроенный ассемблер в gcc. Но если я указываю переменную как xmm0 / register в качестве входных данных, то в некоторых случаях я получаю ошибку компилятора. Пример: #include <emmintrin.h> int main() { __m128i test = _mm_setzero_si128(); asm ("pxor %...

(Примечание: хотя этот вопрос касается "хранилища", случай "загрузки" имеет те же проблемы и идеально симметричен.) Внутренние компоненты SSE обеспечивают _mm_storeu_pd функция со следующей сигнатурой: void _mm_storeu_pd (double *p, __m128d a); Поэтому, если у меня есть вектор из двух двойников, и я хоч...

Я смотрю на сгенерированную сборку для моего кода (используя Visual Studio 2017) и заметил, что _mm_load_ps часто (всегда?) компилируется в movups. Данные, которые я использую _mm_load_ps, определяются следующим образом: struct alignas(16) Vector { float v[4]; } // often embedded in other structs lik...

в настоящее время я пишу перечислитель дерева, где я столкнулся со следующей проблемой: Я смотрю на маскированные битовые наборы, т. е. битовые наборы, где установленные биты являются подмножеством маски, т. е. 0000101 с маской 1010101. То, что я хочу сделать, - это увеличить битовый набор, но только по отно...