0

我刚刚学会了如何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告诉我mulloCPI 的成本比mul(几乎是两倍,延迟更高),这肯定会影响性能。在这种情况下是否有任何 FMA 指令或更好的实现?

4

0 回答 0