- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear all,
I have a program to call intel mpi's functions. The program seems good but some times after finished running, the following error message popped up:
Fatal error in MPI_Comm_free: Invalid communicator, error stack: MPI_Comm_free(134): MPI_Comm_free(comm=00000001403B600) failed
MPI_Comm_free(105): Cannot free permanent communicator MPI_COMM_WORLD.
Excepted the MPI, I also used the OpenMP in the code. In the project, when the option "Generate Parallel Code (/Qopenmp)" is enabled, this error message will pop up 1 time when running the same program 3~4 times. However, after disabled this option, this error message will never appears.
The code
CALL MPI_INIT(IERR)
and
CALL MPI_FINALIZE(IERR)
are all outside the parallel region of OpenMP.
My environment is: Win7 x64 + VS2008 +IVF 11.1.065 (with MKL) + Intel MPI 4.0.0.012.
Could anyone help me to take a look at this problem?
Thanks,
Zhanghong Tang
I have a program to call intel mpi's functions. The program seems good but some times after finished running, the following error message popped up:
Fatal error in MPI_Comm_free: Invalid communicator, error stack: MPI_Comm_free(134): MPI_Comm_free(comm=00000001403B600) failed
MPI_Comm_free(105): Cannot free permanent communicator MPI_COMM_WORLD.
Excepted the MPI, I also used the OpenMP in the code. In the project, when the option "Generate Parallel Code (/Qopenmp)" is enabled, this error message will pop up 1 time when running the same program 3~4 times. However, after disabled this option, this error message will never appears.
The code
CALL MPI_INIT(IERR)
and
CALL MPI_FINALIZE(IERR)
are all outside the parallel region of OpenMP.
My environment is: Win7 x64 + VS2008 +IVF 11.1.065 (with MKL) + Intel MPI 4.0.0.012.
Could anyone help me to take a look at this problem?
Thanks,
Zhanghong Tang
1 Solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
According to the information you provided here, you would require MPI_Init_thread(MPI_INIT_FUNNELED......) when OpenMP is active inside a rank. While there may exist an MPI implementation where MPI_INIT implies the same thing, that is not MPI standard usage and is not compatible with Intel MPI.
Link Copied
6 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Zhanghong
Could you provide compilation options? What is your command line?
This issue is probably related to hybrid application - multi-thread version of the Intel MPI Library should be used.
Regards!
Dmitry
Could you provide compilation options? What is your command line?
This issue is probably related to hybrid application - multi-thread version of the Intel MPI Library should be used.
Regards!
Dmitry
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
According to the information you provided here, you would require MPI_Init_thread(MPI_INIT_FUNNELED......) when OpenMP is active inside a rank. While there may exist an MPI implementation where MPI_INIT implies the same thing, that is not MPI standard usage and is not compatible with Intel MPI.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Tim,
Thank you very much for your kindly reply. I tried the MPI_INIT_THREAD just now, however, the error displayed EVERY TIME.
The code is as follows:
integer::REQUIRED, PROVIDEDIERR
if(currjob == 0)then
REQUIRED = MPI_THREAD_MULTIPLE
CALL MPI_INIT_THREAD(REQUIRED, PROVIDED, IERR)
currjob = 1
endif
if(job == -1)then
CALL MPI_FINALIZE(IERR)
endif
Do I miss anything?
My program has the following libraries linked:
mkl_intel_lp64.lib
mkl_intel_thread.lib
mkl_core.lib
libiomp5mt.lib
impimt.lib
impicxx.lib
mkl_blacs_intelmpi_lp64.lib
mkl_scalapack_lp64.lib
The runtime library option is "Multi-threaded/MT".
Thanks,
Zhanghong Tang
Thank you very much for your kindly reply. I tried the MPI_INIT_THREAD just now, however, the error displayed EVERY TIME.
The code is as follows:
integer::REQUIRED, PROVIDEDIERR
if(currjob == 0)then
REQUIRED = MPI_THREAD_MULTIPLE
CALL MPI_INIT_THREAD(REQUIRED, PROVIDED, IERR)
currjob = 1
endif
if(job == -1)then
CALL MPI_FINALIZE(IERR)
endif
Do I miss anything?
My program has the following libraries linked:
mkl_intel_lp64.lib
mkl_intel_thread.lib
mkl_core.lib
libiomp5mt.lib
impimt.lib
impicxx.lib
mkl_blacs_intelmpi_lp64.lib
mkl_scalapack_lp64.lib
The runtime library option is "Multi-threaded/MT".
Thanks,
Zhanghong Tang
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Dmitry,
Thank you very much for your so quick reply. I compile the code in the IDE of VS2008. The compilation line is:
/O2 /Oi /GL /FD /EHsc /MT /Gy /openmp /Fo"x64\Release\" /Fd"x64\Release\vc90.pdb" /W1 /nologo /c /Zi /TP /errorReport:prompt
Thanks,
Zhanghong Tang
Thank you very much for your so quick reply. I compile the code in the IDE of VS2008. The compilation line is:
/O2 /Oi /GL /FD /EHsc /MT /Gy /openmp /Fo"x64\Release\" /Fd"x64\Release\vc90.pdb" /W1 /nologo /c /Zi /TP /errorReport:prompt
Thanks,
Zhanghong Tang
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Zhanghong,
Could you attach your test to a message? I'll try to reproduce the issue.
Regards!
Dmitry
Could you attach your test to a message? I'll try to reproduce the issue.
Regards!
Dmitry
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear all,
I have successfully implemented the MPI + OpenMP, now I have another problem: how can I control the number of processes (threads) to be used by Intel MPI + OpenMP? In OpenMP, I can control the number of threads by the function "omp_set_num_threads". But I don't know how to do the similar control in MPI without the command "mpiexec n ..."?
Thanks,
Zhanghong Tang
I have successfully implemented the MPI + OpenMP, now I have another problem: how can I control the number of processes (threads) to be used by Intel MPI + OpenMP? In OpenMP, I can control the number of threads by the function "omp_set_num_threads". But I don't know how to do the similar control in MPI without the command "mpiexec n ..."?
Thanks,
Zhanghong Tang
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page