我刚刚学会了如何GEMM
使用 x86 向量寄存器进行优化,我们得到了条目为 的矩阵, 32-bit int
为了简化而忽略了溢出。有一个_mm256_fmadd_pd
用于更新结果的双浮点数C = AB+C
,但对于整数,似乎没有这样的 FMA 指令。我首先尝试_mm256_mullo_epi32
忽略溢出,然后_mm256_add_epi32
将其总结为
#include <immintrin.h>
__m256i alpha = ...// load something from memory
__m256i beta = ...// load something, too
gamma = _mm256_add_epi32( gamma, _mm256_mullo_epi32(alpha,beta) );
// for double variables, gamma = _mm256_fmadd_pd(alpha,beta,gamma);
_mm256_storeu_epi32(..some place,gamma);
实验室的服务器有一个 Cascade Lake Xeon(R) Gold 6226R
,带有GCC 7.5.0
.
Intel Guide告诉我mullo
CPI 的成本比mul
(几乎是两倍,延迟更高),这肯定会影响性能。在这种情况下是否有任何 FMA 指令或更好的实现?