Я стараюсь сделать максимально возможный высококачественный RNG. Прочитав http://xorshift.di.unimi.it/, xorshift128+ кажется хорошим вариантом. Код C
#include <stdint.h>
uint64_t s[ 2 ];
uint64_t next(void) {
uint64_t s1 = s[ 0 ];
const uint64_t s0 = s[ 1 ];
s[ 0 ] = s0;
s1 ^= s1 << 23; // a
return ( s[ 1 ] = ( s1 ^ s0 ^ ( s1 >> 17 ) ^ ( s0 >> 26 ) ) ) + s0; // b, c
}
Я не эксперт SSE/AVX, но мой процессор поддерживает инструкции SSE4.1/SSE4.2/AVX/F16C/FMA3/XOP. Как вы могли использовать их для ускорения этого кода (если вы хотите сделать миллиарды таких случайных чисел) и каков ожидаемый предел этого ускорения на практике?