我从here
获取了TBB矩阵乘法此示例对parallel_for循环使用blocked_range的概念。我还使用英特尔MKL和特征库运行了几个程序。当我比较这些实现所花费的时间时,MKL是最快的,而对于各种矩阵大小(2-4096),TBB是最慢的(平均比特征慢10倍)。这是正常还是我做错了什么? TBB不应该至少比本征表现更好吗?
答案 0 :(得分:2)
这看起来像一个非常基本的矩阵乘法算法,仅仅是关于如何使用TBB的一个例子。有更好的,我相当肯定英特尔MKL也将使用SSE / AVX / FMA指令。
换句话说,如果您可以使用20行代码复制其性能,那么英特尔MKL就不会有任何意义。所以是的,你得到的东西似乎很正常。
至少,对于大型矩阵,算法需要考虑缓存和内存子系统的其他细节。
答案 1 :(得分:2)
是否正常
是的,一个程序比另一个程序慢10倍是正常的。
TBB不应该至少比本征表现更好吗?
我认为没有任何理由说明使用TBB进行矩阵乘法的天真实现会表现得更好,甚至接近专为快速线性代数设计的专用优化库的性能。