为什么1个MPI进程启动2个线程?

为什么1个MPI进程启动2个线程?,mpi,Mpi,这个问题不是关于MPI\u Init\u thread()。当我使用MPI_Init()并使用1个MPI进程运行以下代码时,任务管理器显示程序有2个线程。作为参考,我有一台多核机器。原因是什么?(可能是非阻塞通信?) 由于1个MPI进程创建2个线程,我应该运行多少个进程才能获得最佳性能?例如,如果CPU有2个内核,每个内核有2个线程(超线程或多线程),我应该将进程数设置为2还是4?也许,我应该选择2。如果CPU有2个内核,每个内核有1个线程,该怎么办。我应该将进程数设置为1还是2 //main.

这个问题不是关于
MPI\u Init\u thread()
。当我使用
MPI_Init()
并使用1个MPI进程运行以下代码时,任务管理器显示程序有2个线程。作为参考,我有一台多核机器。原因是什么?(可能是非阻塞通信?)

由于1个MPI进程创建2个线程,我应该运行多少个进程才能获得最佳性能?例如,如果CPU有2个内核,每个内核有2个线程(超线程或多线程),我应该将进程数设置为2还是4?也许,我应该选择2。如果CPU有2个内核,每个内核有1个线程,该怎么办。我应该将进程数设置为1还是2

//main.c
#包括
#包括
int main(int argc,char*argv[]){
MPI_Init(&argc,&argv);
而(1){
睡眠(1);
}
MPI_Finalize();
返回0;
}
要运行的命令:

mpicc main.c
mpirun -n 1 ./a.out

我猜其中一个是主线程,另一个是MPI库或运行时生成的辅助线程。就性能而言,您不应该担心助手线程,因为它们通常不使用资源。总之,
mpirun-n2./a.out
是一种方法。