2013-01-25 86 views
0

我想爲每個MPICH進程創建不同數量的MKL線程。如何爲每個MPICH進程設置不同數量的MKL線程

例如,假設我有4個MPICH進程。我要的是:

過程1 = 4 MKL線程, 過程2 = 3 MKL線程, 過程3 = 5 MKL線程, 等

我知道export MKL_NUM_THREADS=4; export MKL_DOMAIN_NUM_THREADS="MKL_ALL=1, MKL_BLAS=4",但我沒有得到什麼我必須在我的具體情況下做。

+0

根據進程級別調用'mkl_set_num_threads()'來設置程序中的線程數(如果這是你想要的)。 –

回答

1

如果您想要實現的是MPI作業中的不同級別使用不同數量的MKL線程,可以通過兩種不同的方式來完成。

您可以根據進程級別設置代碼中的線程數量,例如,

#define NUM_PROCS 4 

int threads_per_proc[NUM_PROCS] = { 4, 3, 5, 5 }; 
int rank; 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
// ... 
// Signal an error if rank >= 4 
// ... 
mkl_set_num_threads(threads_per_proc[rank]); 

您也可以使用mpiexec(或mpirun)的MPMD發射方式,但是這將是一個有點麻煩:

mpiexec -env MKL_NUM_THREADS 4 -n 1 ./program : \ 
     -env MKL_NUM_THREADS 3 -n 1 ./program : \ 
     -env MKL_NUM_THREADS 5 -n 2 ./program 

我省略了選項設置MKL_DOMAIN_NUM_THREADS贅述。這將啓動MPI程序./program的一個副本MKL_NUM_THREADS設置爲4(該副本成爲0級);一份MKL_NUM_THREADS設置爲3(副本成爲1級);兩個副本MKL_NUM_THREADS設置爲5(這些副本成爲等級2和3)。

+0

當我嘗試編譯此代碼時,它給了我一個錯誤:未定義的引用「MKL_Set_Num_Threads」。我想我需要把它與MKL聯繫起來。我沒有得到我用來將它與MKL鏈接的命令。我試圖閱讀MKL手冊,但不明白我如何鏈接? – Gevni

+0

如果您使用最新版本的英特爾編譯器,則只需傳遞'-mkl'選項即可。對於舊版本或其他編譯器(例如GCC),取決於它。我相信用戶手冊有很多關於如何與MKL聯繫的例子。 –

相關問題