我是 Unix 和 MPI 的初学者。对于串行程序,我通过输入make然后/directory/buildagain运行程序./runPR.sh values.txt。(values.txt仅包含该行Chain)
这是我的代码的一小部分。
int main( int argc, char *argv[ ] )
{
if( strcmp(argv[1],"-PR") == 0 )
runPR(argc-2, &argv[2]);
return 0;
}
int runPR(int argc, char* argv[])
{
cout<<"run here"<<endl;
MPI_Status status;
PetscMPIInt rank,size;
//bunch of code that assigns argv2 to include argv and some new strings and sets
//argc2=argc plus the number of new string
PetscInitialize(&argc2, &argv2,0,0);
MPI_Comm_size(PETSC_COMM_WORLD,&size);
MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d, rank = %d\n",size,rank);
PetscSynchronizedPrintf(PETSC_COMM_WORLD,"synchronized rank = %d\n",rank);
PetscSynchronizedFlush(PETSC_COMM_WORLD);//,PETSC_STDOUT);
MPI_Barrier(PETSC_COMM_WORLD);
PetscPrintf(PETSC_COMM_SELF,"[%d] Jumbled Hello World\n",rank);
PROpt opt;
Solve* ps = new Solve();
PROpt opt;
Solve* ps = new Solve();
ps->getFile(&opt,argv[0]);
}
通过键入mpirun -np 4 ./runPR.sh values.txt,我看到Number of processors = 1, rank = 0并
synchronized rank = 0打印了 4 次。但我没有看到synchronized rank = 1或 2 或 3 打印出来。为什么是这样?
这是run.PR.sh包含的内容
DIR=/directory/buildagain/bin/Project
FILELIST=$1
while read FILE
do
echo "Processing ${FILE}..."
./makeInp.sh ${FILE} ${FILE} >INP/${FILE}.inp
mpiexec -np 4 ${DIR} -PR INP/${FILE}.inp
done < ${FILELIST}
编辑:我能够让 helloworld PETSc 示例在http://www.mcs.anl.gov/petsc/petsc-current/src/sys/examples/tutorials/ex2.c.html正常工作