如何解决您如何将这个“无符号整数”标量代码移植到“有符号整数”向量?
我需要将 Xorshift 算法从标量移植到矢量代码(SSE/SIMD
版本使用 -march=nocona
构建)。
我正在使用算法的 uint32_t 版本(直接取自 wiki):
#include <stdint.h>
struct xorshift32_state {
uint32_t a;
};
/* The state word must be initialized to non-zero */
uint32_t xorshift32(struct xorshift32_state *state)
{
/* Algorithm "xor" from p. 4 of Marsaglia,"Xorshift RNGs" */
uint32_t x = state->a;
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
return state->a = x;
}
主要问题是:
- 它使用 uint32,所以(按照标准)它会自动环绕
- 由于 SSE3 的“限制”,我会继续使用 m128i(我相信它已签署,并提供我需要的所有操作)
- 有符号溢出是 C++ 标准中未定义的行为
您将如何使用 SIMD 管理此移植?处理 epu32 并减去 uint32 最大值的一半(然后添加)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。