上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。
因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率提高,那么整个模型的性能就会有大幅度的提高。
这一节在介绍向量寄存器的时候,举了一个例子来说明向量加法的计算,向量乘法和向量加法一样,下面我们就用实际的代码来展示,如何完成向量乘法的计算。
avx2 完成向量乘法
完成向量乘法的运算过程也很简单:
首先利用load指令将数据从内存中 load 到向量寄存器中;
然后调用 __mm256_mul_ps 指令,完成两个向量的乘法,返回结果,最后对结果进行累加操作。
由于在卷积运算中,需要累加的都是 channel 维度,除了一层卷积channle维度是 3 之外,其余层的卷积