Re: [petsc-dev] always calling MPI_Init_thread?
On Feb 14, 2013, at 1:36 PM, Jed Brown <[email protected]> wrote:
On Thu, Feb 14, 2013 at 1:25 PM, Barry Smith <[email protected]> wrote:
My concern was if a bad implementation always did some terrible thing with locks (even if only one thread would ever exist) thus hurting performance.
Is there no way to just tell MPI there ARE and WILL be no threads?
Yeah, MPI_THREAD_SINGLE, but there is nothing to lock when using MPI_THREAD_FUNNELED. I figure that if the user intends to make calls from threads, they should call MPI_Init before PetscInitialize().
Ok, seems fine then. Barry
Barry
On Feb 14, 2013, at 1:22 PM, Jed Brown <[email protected]> wrote:
On Thu, Feb 14, 2013 at 1:16 PM, Barry Smith <[email protected]> wrote:
Do we really ALWAYS want to call this version even if we are not monkeying with threads at ALL?
Thanks
Barry
ierr = MPI_Initialized(&flag);CHKERRQ(ierr); if (!flag) { if (PETSC_COMM_WORLD != MPI_COMM_NULL) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You cannot set PETSC_COMM_WORLD if you have not initialized MPI first"); #if defined(PETSC_HAVE_MPI_INIT_THREAD) { PetscMPIInt provided; ierr = MPI_Init_thread(argc,args,MPI_THREAD_FUNNELED,&provided);CHKERRQ(ierr); } #else ierr = MPI_Init(argc,args);CHKERRQ(ierr);
The implementation of MPI_Init just probes around the environment and calls MPI_Init_thread. There is no performance advantage of MPI_THREAD_SINGLE over MPI_THREAD_FUNNELED so I think the code here is fine.
participants (1)
-
Barry Smith