Результаты поиска по запросу "sse"

1 ответ

В чем разница между __popcnt () и _mm_popcnt_u32 ()?

1 ответ

Можно ли использовать SSE и SSE2, чтобы сделать целое число шириной 128 бит?

Я хочу немного больше понять возможности SSE2 и хотел бы знать, можно ли создать целое число шириной 128 бит, которое поддерживает сложение, вычитание, XOR и...

2 ответа

@PeterCordes Иногда код становится более понятным, когда вы пишете константы в виде двоичного файла. Это не тот случай, я признаю :-).

у преобразовать 8-битное целое число в массив размером 8 с каждым значением, содержащим битовое значение целого числа. Например: у меня естьint8_t x = 8; Я хочу преобразовать это вint8_t array_x = {0,0,0,0,1,0,0,0}; Это должно быть сделано ...

ТОП публикаций

1 ответ

Неоптимизированный макро-путь связан с тем, что некоторые инструкции требуют немедленного постоянного аргумента, который в противном случае было бы проблематичным получить при -O0 (необходимо встроить функцию, а затем распространить значение).

инство компиляторов C ++ поддерживают инструкции SIMD (SSE / AVX) с такими интрижками, как _mm_cmpeq_epi32Моя проблема в том, что эта функция не помечена какconstexprхотя "семантически" нет причин, чтобы эта функция неconstexpr так как это ...

2 ответа

Эта таблица, вероятно, будет неверно предсказана в первый раз. После этого это может или не может, в зависимости от модели и силы косвенного предсказателя ветвления.

отрим следующий цикл в x86: ; on entry, rdi has the number of iterations .top: ; some magic happens here to calculate a result in rax mov [array + rdi * 8], rax ; store result in output array dec rdi jnz .topЭто просто: что-то вычисляет ...

1 ответ

@PeterCordes По словам Агнера, маскировка слиянием бесплатна при приземлении Рыцарей (за вычетом дополнительной зависимости). Но он не прокомментировал Скайлэйк. Я не использую маскировку достаточно, чтобы знать. Я не могу представить, что все по-другому.

тим, у вас есть значения вrax а такжеrdx Вы хотите загрузить вxmm регистр. Одним из способов будет: movq xmm0, rax pinsrq xmm0, rdx, 1Это довольно медленно, хотя! Есть ли способ лучше?

1 ответ

Это зависит от того, насколько велики ваши массивы: если массивы сопоставимы или меньше, чем размер LLC, то вы наверняка получите некоторую выгоду, если будете делать что-то задом наперед, поскольку разумная часть данных последней обработки может находиться в кэше. (но это также осложняется новыми функциями LLC, которые пытаются обнаружить потоковые нагрузки и изменить политику замены кэша при их обнаружении). Более общий подход к этой работе - просто заблокировать вашу обработку: вместо того, чтобы выполнять каждый этап целиком, попробуйте чередовать ...

аюсь векторизовать цикл, вычисляя точечное произведение больших векторов с плавающей точкой. Я вычисляю это параллельно, используя тот факт, что CPU имеет большое количество регистров XMM, например: __m128* A, B; __m128 dot0, dot1, dot2, dot3 = ...

5 ответов

Можно ли приводить числа с плавающей точкой непосредственно к __m128, если они выровнены по 16 байтов?

Безопасно / возможно / целесообразно ли бросать поплавки непосредственно в

1 ответ

Однако будущее неясно, и дело в этом хорошее, но гораздо более общее: кажется, что компиляторы и разработчики в основном не имеют никакой поддержки и не тратят много времени на размышления об этой мета-оптимизации «более высокого уровня», когда вам в основном приходится заранее определите, может ли вся ваша кодовая база (или, по крайней мере, какой-то большой кусок во время выполнения) использовать расширения A, B, C и т. д. Каждое обсуждение небольшой функции теперь должно быть обусловлено предостережением о турбо частотах, и мы не Я даже не говорил о том, как весы скользят с активными ядрами!

ой ассемблер кода Можете ли вы встроить его в C ++ и проверить по SSE4? На скорости Мне бы очень хотелось увидеть, как шагнуло в развитие SSE4. Или его совсем не беспокоит? Давайте проверим (у меня нет поддержки выше SSSE3) { sse2 strcmp ...

0 ответов

@IwillnotexistIdonotexist: Хорошо заметили. Я думаю, это означает, что вы можете получить одну широкую запись MMIO для смежных немаскированных элементов или две узкие. Но выполнение одного выровненного 8-байтового атомарного хранилища все же дает атомарность для 4-байтовых половинок, хотя для MMIO это не так. Поэтому я не думаю, что это исключает атомарность для каждого элемента, потому что специфичная для реализации часть может быть только объединением хранилищ элементов в более широкие и все еще атомарные хранилища.

отрим массив какatomic<int32_t> shared_array[], Что делать, если вы хотите SIMD векторизацииfor(...) sum += shared_array[i].load(memory_order_relaxed)?. Или искать в массиве первый ненулевой элемент или обнулять его диапазон? Это, вероятно, ...