我在超级计算群集(PSB环境)中使用mvapich。我需要启用MPI_THREAD_MULTIPLE支持来运行我的程序。但是我的程序输出建议MPI_Init_thread无法启用MPI_THREAD_MULTIPLE。
PBS脚本是:
#!/bin/sh
APP_NAME=score
NP=2
NP_PER_NODE=1
RUN="RAW"
rm -f hosts.list
for i in `echo $LSB_HOSTS`; do
echo $i >>hosts.list
done
/home/compiler/mpi/mvapich/1.0/icc.ifort-9.1/bin/mpirun_rsh -np 2 -hostfile ./hosts.list MV2_ENABLE_AFFINITY=0 /home/users/simmykq/users/zhengyuan/mpi_parallel_framework/master_slave/exe_framework
(最后一行是exe命令。)
我的程序就像
int main(int argc,char *argv[])
{
int p,id;
int t;
int provided;
pthread_t tid[4];
MPI_Init_thread(&argc,&argv,MPI_THREAD_MULTIPLE,&provided);
if(provided!=MPI_THREAD_MULTIPLE)
{
printf("MPI cannot support mutiple\n");
MPI_Abort(MPI_COMM_WORLD,0);
}
//...........
}
输出就像
Sender: LSF System <lsfadmin@a328>
Subject: Job 2958650: <t> Exited
Job <t> was submitted from host <inode01> by user <simmykq> in cluster <MagicCube_SC1>.
Job was executed on host(s) <1*a328>, in queue <score>, as user <simmykq> in cluster <MagicCube_SC1>.
<1*a215>
</home/users/simmykq> was used as the home directory.
</home/users/simmykq/users/zhengyuan/mpi_parallel_framework/master_slave> was used as the working directory.
Started at Sun Mar 16 12:51:09 2014
Results reported at Sun Mar 16 12:51:36 2014
Your job looked like:
------------------------------------------------------------
# LSBATCH: User input
./test2.lsf
------------------------------------------------------------
Exited with exit code 1.
Resource usage summary:
CPU time : 0.57 sec.
The output (if any) follows:
Exit code -3 signaled from a328
MPI cannot support mutiple
MPI cannot support mutiple
Killing remote processes...[0] [MPI Abort by user] Aborting Program!
[1] [MPI Abort by user] Aborting Program!
Abort signaled by rank 0: MPI Abort by user Aborting program !
Abort signaled by rank 1: MPI Abort by user Aborting program !
MPI process terminated unexpectedly
MPI process terminated unexpectedly
DONE
Signal 15 received.
Signal 15 received.
感谢任何提示。 :)
答案 0 :(得分:1)
在您的代码中,您使用MPI_Init_thread
调用MPI_THREAD_MULTIPLE
,但调用返回的内容不等于MPI_THREAD_MULTIPLE:
MPI_Init_thread(&argc,&argv,MPI_THREAD_MULTIPLE,&provided);
if(provided!=MPI_THREAD_MULTIPLE)
这意味着您安装了MPI库,但不支持MPI_THREAD_MULTIPLE。您需要使用版本重建或重新安装MPI库,并为MPI_THREAD_MULTIPLE支持配置。例如,在MPICH2中,只有2个数据传输层支持MPI_THREAD_MULTIPLE:nemesis和sock。不了解MVAPICH,但检查其配置参数并配置输出。