![]() |
1
2
gemv是矩阵的向量积,所以结果的每个元素都是向量和矩阵的一行或一列的点积 并添加 ,而不仅仅是相乘。 在现代硬件上,这是用一个FMA(融合乘法-加法)完成的,成本与一个乘法差不多,有效地免费获得加法部分。 优化的ZGEMV也会使用一些FMA进行复数乘法和加法,就像2次乘法一样,2个FMA只用于复数乘法。 或者四个FMA,如果加上实部和虚部的现有累加器。(创建两个长依赖链,因此您需要 unroll more to hide it ,尽管添加到实部和虚部的FMA之间已经具有指令级并行性。) 因此,对于FMA,它应该是计算强度的2倍左右:对于每个“元件”2倍的负载,FMA的数量是4倍。
这是假设复数存储在实数和虚数的独立数组中,因此SIMD负载可以获得
|