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