AVX-512 BF16:直接加载BF16值而非从FP32转换
AVX-512 BF16直接加载问题解答
AVX-512并没有专门针对BF16的直接加载内在函数,但完全不需要先加载FP32再转换,你可以通过通用的16位向量加载指令实现直接加载:
- 使用
_mm512_loadu_si512(非对齐内存)或_mm512_load_si512(对齐内存)这类512位整数加载内在函数,直接将内存中的BF16数据当作16位整数加载到寄存器中。BF16的存储格式和16位整数完全一致,加载后寄存器中的内容就是合法的BF16数据,可以直接用于后续的BF16运算或转换操作。 - 举例来说,如果你有一个
bf16_t*类型的指针ptr,可以这样加载:
之后这个__m512i bf16_vec = _mm512_loadu_si512((const __m512i*)ptr);bf16_vec就可以直接配合_mm512_cvtneps_pbh等BF16相关指令使用。
之所以没有专门的BF16加载内在函数,是因为BF16本质是16位宽度的数据,复用现有的通用向量加载指令已经足够,Intel没有必要为此单独新增指令和对应的内在函数。
内容的提问来源于stack exchange,提问作者Thijs Steel
相关产品推荐
相关产品推荐

