哪有你这么写模板的。
一个大switch,default还没有fatal而是silently return
既然用模板,就应该使用模板特化。
【 在 allegro (静水流深) 的大作中提到: 】
: 标 题: Re: 请教一个simd的问题
: 发信站: 水木社区 (Sat Aug 21 01:34:24 2021), 站内
:
: 谢谢各位回复和私信,我最后改成了这样,的确用到了_mm512_ror_epi64,但是没有用上_mm512_maskz_ror_epi64,不知道能不能进一步优化。
:
: 我把j做成了模板参数,不然编译不过,说某些intrinsic function的参数需要为立即数。
:
:
: using WORD_t = __m512i;
: template<size_t j> static void shift_swap_u512(WORD_t &a, WORD_t &b, WORD_t mask)
: {
: switch(j){
: case 256:
: case 128:
: case 64:
: {
: const WORD_t t = (a ^ _mm512_alignr_epi64(b, b, j / 64)) & mask;
: a ^= t;
: b ^= _mm512_alignr_epi64(t, t, 8 - j / 64);
: return;
: }
: case 32:
: case 16:
: case 8:
: case 4:
: case 2:
: case 1:
: {
: const WORD_t t = (a ^ _mm512_ror_epi64(b, j)) & mask;
: a ^= t;
: b ^= _mm512_rol_epi64(t, j);
: return;
: }
: default:
: {
: return;
: }
: }
: }
:
:
: 【 在 allegro 的大作中提到: 】
: : [code=c]
: : using WORD_t = __m512i;
: : static inline void shift_swap(WORD_t &a, WORD_t &b, int j, WORD_t mask)
: : ...................
:
: --
: ※ 修改:·allegro 于 Aug 21 01:35:54 2021 修改本文·[FROM: 158.140.1.*]
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 158.140.1.*]
--
修改:allegro FROM 158.140.1.*
FROM 76.126.252.*