Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 强制MPI使用指定数量的内核_Multithreading_Parallel Processing_Multiprocessing_Openmpi - Fatal编程技术网

Multithreading 强制MPI使用指定数量的内核

Multithreading 强制MPI使用指定数量的内核,multithreading,parallel-processing,multiprocessing,openmpi,Multithreading,Parallel Processing,Multiprocessing,Openmpi,我对MPI有点陌生,所以如果这是一个琐碎的问题,请原谅我。我有一个四核CPU。我想运行一个OpenMPi C++程序,它在单个核心上使用两个进程。有什么办法吗?如果是,那怎么办?我提到的,最有可能的是,说可能有一种方法。。。如果是这样的话,那我该怎么做呢?由于MPI产生了单独的进程,所以将进程调度到核心上通常由操作系统执行。您仍然可以通过手动将流程的关联性设置为特定的核心来实现所需的功能 您可以在Linux中使用sched_setaffinity函数来完成此操作 要将进程固定到特定核心,可以使用

我对MPI有点陌生,所以如果这是一个琐碎的问题,请原谅我。我有一个四核CPU。我想运行一个OpenMPi C++程序,它在单个核心上使用两个进程。有什么办法吗?如果是,那怎么办?我提到的,最有可能的是,说可能有一种方法。。。如果是这样的话,那我该怎么做呢?

由于MPI产生了单独的进程,所以将进程调度到核心上通常由操作系统执行。您仍然可以通过手动将流程的关联性设置为特定的核心来实现所需的功能

您可以在Linux中使用
sched_setaffinity
函数来完成此操作

要将进程固定到特定核心,可以使用以下方法:

#包括
#包括
// ...
无效引脚到内核(int cpuid){
cpu_set_t set;
CPU_零(&set);
CPU_集(cpuid和集);
sched_setaffinity(0,sizeof(cpu_set)&set);
}
// ....
int main(int argc,char*argv[]){
MPI_Init(&argc,&argv);
pin_到_核(0);//将进程pin到核0
// ...
MPI_Finalize();
}

确保在调用
main
函数中的
MPI\u Init
后调用此函数,并指定要将进程固定到的核心。

使用Open MPI实现此功能的正确方法是提供一个rankfile,告诉库将每个进程放置在何处。对于您的情况,以下rankfile应该足够了:

rank 0=localhost slot=0
rank 1=localhost slot=0
它告诉OpenMPI这两个列组都应该在本地主机上运行,并绑定到OS CPU 0,后者通常是第一个核心。除了主机文件或主机列表之外,还提供rankfile:

$ mpiexec --host localhost --report-bindings --rankfile ./rankfile -np 2 hostname
[cluster:03247] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .] (slot list 0)
[cluster:03247] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .][. . . . . . . .] (slot list 0)
cluster
cluster

澄清一下:您正试图在4核机器上运行一个包含2个MPI进程的MPI程序,并且希望两个进程只在一个内核上运行?@Patrick:是,我希望我的两个程序都运行一个内核,从而覆盖MPI提供的默认优化。您运行的是什么操作系统?@Patrick:我使用Ubuntu12.04 LTS作为OSOpen MPI(事实上,每个主要的MPI实现都有一个内置的可移植机制来指定进程绑定/固定。