Я слышал, что 128-битные целочисленные типы данных, такие как __int128_t
, предоставленные GCC, эмулируются и, следовательно, медленны. Однако я понимаю, что различные наборы инструкций SSE (SSE, SSE2, ..., AVX) ввели по крайней мере некоторые инструкции для 128-битных регистров. Я не очень разбираюсь в SSE или сборке/машинных кодах, поэтому мне было интересно, может ли кто-нибудь объяснить мне, арифметика с __int128_t
эмулируется или не использует современные версии GCC.Является __int128_t арифметикой, эмулируемой GCC, даже с SSE?
Причина, по которой я прошу об этом, заключается в том, что мне интересно, имеет ли смысл ожидать больших различий в производительности между различными версиями GCC, в зависимости от того, какие преимущества используются в SSE-инструкциях.
Итак, какие части арифметики __int128_t
эмулируются GCC и какие части реализованы с помощью инструкций SSE (если есть)?
В SSE или AVX нет 128-разрядных арифметических операций (кроме побитовых операций). –
В SSE/AVX нет 128-битного * add *. Вы можете эмулировать его с помощью побитовых операций и сдвигов, но учитывая, что у вас уже есть правильные 64-разрядные скалярные арифметические инструкции в x86-64, которые легко объединяются для 128-битных операций, из этого ничего не получится. –
Спасибо @Paul. Я сделал ответ, надеюсь, вы не против. –