2014-09-10 34 views
0

並行Python腳本我有一個Python腳本,我通常在並行使用命令運行在C

mpirun -n x script.py 

是否有可能嵌入在C程序並行化這個Python代碼運行嗎?

I.e. python.org描述瞭如何在C here中嵌入python代碼。例如。

#include <Python.h> 

int 
main(int argc, char *argv[]) 
{ 
    Py_SetProgramName(argv[0]); /* optional but recommended */ 
    Py_Initialize(); 
    PyRun_SimpleString("from time import time,ctime\n" 
         "print 'Today is',ctime(time())\n"); 
    Py_Finalize(); 
    return 0; 
} 

是否有可能做的,如果類似的東西,而不是報告的時候,代碼是並行的Python代碼?我的臨時解決方案是

sprintf(command_string,"mpirun -n x python script.py"); 
system(command_string); 

但這不會很快成爲一種選擇。

感謝, 托馬斯

+1

「但這不會很快成爲一種選擇。」爲什麼不? – wnnmaw 2014-09-10 21:57:20

回答

0

是否在所有的(例如mpi4py)你的腳本使用MPI?

如上所述,您可以在C程序中運行Python,並且在other ways中運行Python,但是如果程序執行MPI調用,則必須將可執行文件鏈接到MPI庫。

一種可能性是使用mpirun運行C程序。只是編譯並像以前一樣運行:

mpirun -n x cprog 

裏面你的C程序,你可以執行的Python代碼,這已經是一個平行的情況下(因爲C程序現在並行運行)。如果您確實需要使用MPI庫,那麼這裏可能會有額外的工作。

如果您確實需要MPI調用(例如MPI_Comm_rank等),您可以將MPI庫鏈接到您的C程序,如上執行,在C級調用您需要的任何MPI命令,然後傳遞數據通過Python C API提供給您的Python代碼。

如果您不需要MPI調用(因此您只是使用mpirun在您的羣集上啓動多個Python腳本版本),那麼您的C程序只需要mpirun即可。

您也可以並行啓動C程序,並在Python腳本中使用MPI,但請記住,您應該在Python層(而不是Python和C)中使用MPI_InitMPI_Finalize

如果您必須以串行方式運行C程序,我認爲您需要掏腰包才能啓動並行作業。

+0

感謝您的回覆。 – DJames 2014-09-11 10:39:48

+0

感謝您的回覆, 我的腳本使用來自串行和並行編寫庫的函數。即我可以使用 「python script.py」 或 「mpirun -n 4 python script.py」 如何專門調用MPI對我來說是隱藏的,它全部在我導入的庫(dolfin)中處理。如果我使用mpirun,函數「知道」。 我的印象是「mpirun -n x cprog」只會導致python代碼在每個x處理器上以串行方式運行。我不知道它實際上會繼承mpirun。 – DJames 2014-09-11 10:48:17