2017-01-09 89 views
2

我花了TBB矩陣乘法從hereINTELL TBB性能

此示例使用blocked_range爲parallel_for時循環的概念。我還運行了一些使用英特爾MKL和特徵庫的程序。當我比較這些實現所用的時間時,對於各種矩陣大小(2-4096),MKL是最快的,而TBB是最慢的(平均比特徵慢10倍)。這是正常的還是我做錯了什麼?至少TBB不應該比Eigen表現更好?

+1

至少,交換'j'和'k'循環,並確保循環在目標平臺支持的正確指令集上進行矢量化。 – Anton

+1

以及向量化,您可能希望將陣列與向量長度或更好的64字節的邊界對齊,但要避免4K鋸齒。或者簡單地使用'scalable_malloc'代替。 – Anton

+0

我不確定MKL和eigen庫如何使用多核,但TBB是專門爲多核機器開發的。因此,您的測試可能會在具有數十個核心的機器上顯示非常不同的結果 – HEKTO

回答

2

這看起來像一個真正的基本矩陣乘法算法,這只不過是一個關於如何使用TBB的例子罷了。還有更好的,我相當確定英特爾MKL也會使用SSE/AVX/FMA指令。換句話說,如果您可以用20行代碼複製它的性能,那麼對於英特爾MKL來說就沒有任何意義了。所以是的,你得到的東西似乎很正常。

至少,對於大矩陣,算法需要考慮緩存和其他存儲子系統的細節。

2

是正常

是的,這是很正常的一個程序,由10

的因素比另一種更慢不宜TBB執行至少比本徵?

我不明白爲什麼使用TBB進行矩陣乘法的初始實現會表現得更好,甚至接近爲快速線性代數設計的專用優化庫的性能。