【发布时间】:2014-06-02 19:36:23
【问题描述】:
我正在努力制作尽可能快的高质量 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 专家,但我的 CPU 支持 SSE4.1 / SSE4.2 / AVX / F16C / FMA3 / XOP 指令。您如何使用这些来加速此代码(假设您想要生成数十亿个这样的随机数)以及在实践中这种加速的预期限制是什么?
【问题讨论】:
标签: c performance sse avx