没看懂你的意思
你把一个m512i当成一个512bit的大整数,那simd怎么做向量化?
就拿b ^= (t << j)来说,b是m512i,你想得到b的结果是什么?是一堆整数还是一个512bi
t的大整数?
【 在 allegro (静水流深) 的大作中提到: 】
: 标 题: 请教一个simd的问题
: 发信站: 水木社区 (Thu Aug 19 13:10:25 2021), 站内
:
:
: using WORD_t = __m512i;
:
: static inline void shift_swap(WORD_t &a, WORD_t &b, int j, WORD_t mask)
: {
: const WORD_t t = (a ^ (b >> j)) & mask;
: a ^= t;
: b ^= (t << j);
: }
:
:
: 这段代码中,赋值,AND,OR,XOR都能直接对应到直接的simd操作。
: 但是这个shift操作,我的需要的是把这512bit当成一个大interger,而gcc直接编译出来的结果是对8个64bit正数分别移位。那些需要cross-boundary的bits都没有了。
:
: 如何手动实现这个shift呢?
: 我需要把这8个64bits当成一个512bits的大整数,需要支持左移/右移的位数是:256,128,64,32,16,8,4,2,1。
: 版上有巨佬做过这个吗?谢谢!
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 158.140.1.*]
--
FROM 171.83.9.*