2013-07-10 40 views
2

MKL的串行和並行版本在兩個不同的庫中實現。這些庫的功能具有相同的名稱。所以你不能直接加載這兩個庫,並分別調用每個函數,而不會在編譯時產生衝突。如何同時使用並行和串行版本的MKL?

我想開發一個函數的包裝器(比如OpenGL Extension Wrangler Library(GLEW)),它將對每個相同的函數都有相應的擴展,而擴展函數會從適當的位置加載並行或順序函數圖書館。 這是個好主意嗎?你能提出其他建議嗎?

非常感謝。

回答

1

我建議你總是使用MKL的並行版本,並控制MKL函數使用的#thread。

MKL提供void mkl_set_num_threads(int nt)來更改#thread MKL函數可以隨時使用。

當您將它設置爲1時,它等於序列版本。

+0

現在這適用,但我不是很滿意。我有一個高級並行的進程。在低級別(在進程線程中),我調用MKL庫函數(以串行模式)。我用兩種不同的實現做了相同的例子,一個是單個CPU上的並行MKL,另一個是串行MKL。兩種實現的比較在時間上有差異,串行實現速度更快。這是正常的,因爲並行MKL由於線程庫的控制功能而具有開銷... – gzioupos

相關問題