Changeset 5694
- Timestamp:
- 11/04/09 17:45:41 (3 weeks ago)
- Location:
- mpich2/trunk/src/mpi/init
- Files:
-
- 1 added
- 5 modified
-
Makefile.sm (modified) (1 diff)
-
async.c (added)
-
finalize.c (modified) (3 diffs)
-
init.c (modified) (3 diffs)
-
initthread.c (modified) (2 diffs)
-
mpi_init.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
mpich2/trunk/src/mpi/init/Makefile.sm
r100 r5694 1 1 mpi_sources = abort.c init.c initialized.c initthread.c \ 2 ismain.c finalize.c finalized.c querythread.c 2 ismain.c finalize.c finalized.c querythread.c async.c 3 3 HEADERS = mpi_init.h 4 4 # Note that initinfo is only in the MPI library, not the profile library -
mpich2/trunk/src/mpi/init/finalize.c
r5502 r5694 7 7 8 8 #include "mpiimpl.h" 9 #include "mpi_init.h" 9 10 10 11 /* -- Begin Profiling Symbol Block for routine MPI_Finalize */ … … 115 116 static const char FCNAME[] = "MPI_Finalize"; 116 117 int mpi_errno = MPI_SUCCESS; 118 int rc; 117 119 #if defined(HAVE_USLEEP) && defined(USE_COVERAGE) 118 120 int rank=0; … … 129 131 130 132 /* ... body of routine ... */ 133 134 /* If the user requested for asynchronous progress, we need to 135 * shutdown the progress thread */ 136 if (MPIR_async_thread_initialized) { 137 mpi_errno = MPIR_Finalize_async_thread(); 138 if (mpi_errno) goto fn_fail; 139 } 131 140 132 141 #if defined(HAVE_USLEEP) && defined(USE_COVERAGE) -
mpich2/trunk/src/mpi/init/init.c
r5355 r5694 30 30 /* Any internal routines can go here. Make them static if possible */ 31 31 #endif 32 33 int MPIR_async_thread_initialized = 0; 32 34 33 35 #undef FUNCNAME … … 70 72 int mpi_errno = MPI_SUCCESS; 71 73 int rc; 72 int threadLevel ;74 int threadLevel, provided; 73 75 MPIU_THREADPRIV_DECL; 74 76 MPID_MPI_INIT_STATE_DECL(MPID_STATE_MPI_INIT); … … 141 143 threadLevel = MPI_THREAD_SINGLE; 142 144 #endif 143 144 mpi_errno = MPIR_Init_thread( argc, argv, threadLevel, (int *)0 ); 145 146 /* If the user requested for asynchronous progress, request for 147 * THREAD_MULTIPLE. */ 148 rc = 0; 149 MPIU_GetEnvBool("MPICH_ASYNC_PROGRESS", &rc); 150 if (rc) 151 threadLevel = MPI_THREAD_MULTIPLE; 152 153 mpi_errno = MPIR_Init_thread( argc, argv, threadLevel, &provided ); 145 154 if (mpi_errno != MPI_SUCCESS) goto fn_fail; 155 156 if (provided == MPI_THREAD_MULTIPLE) { 157 mpi_errno = MPIR_Init_async_thread(); 158 if (mpi_errno) goto fn_fail; 159 160 MPIR_async_thread_initialized = 1; 161 } 146 162 147 163 /* ... end of body of routine ... */ -
mpich2/trunk/src/mpi/init/initthread.c
r5355 r5694 503 503 static const char FCNAME[] = "MPI_Init_thread"; 504 504 int mpi_errno = MPI_SUCCESS; 505 int rc ;505 int rc, reqd = required; 506 506 MPIU_THREADPRIV_DECL; 507 507 MPID_MPI_INIT_STATE_DECL(MPID_STATE_MPI_INIT_THREAD); … … 554 554 555 555 /* ... body of routine ... */ 556 557 mpi_errno = MPIR_Init_thread( argc, argv, required, provided ); 558 if (mpi_errno != MPI_SUCCESS) goto fn_fail; 556 557 /* If the user requested for asynchronous progress, request for 558 * THREAD_MULTIPLE. */ 559 rc = 0; 560 MPIU_GetEnvBool("MPICH_ASYNC_PROGRESS", &rc); 561 if (rc) 562 reqd = MPI_THREAD_MULTIPLE; 563 564 mpi_errno = MPIR_Init_thread( argc, argv, reqd, provided ); 565 if (mpi_errno != MPI_SUCCESS) goto fn_fail; 566 567 if (rc && *provided == MPI_THREAD_MULTIPLE) { 568 mpi_errno = MPIR_Init_async_thread(); 569 if (mpi_errno) goto fn_fail; 570 571 MPIR_async_thread_initialized = 1; 572 } 559 573 560 574 /* ... end of body of routine ... */ -
mpich2/trunk/src/mpi/init/mpi_init.h
r100 r5694 4 4 * See COPYRIGHT in top-level directory. 5 5 */ 6 6 7 /* Definitions local to src/mpi/init only */ 7 8 int MPIR_Init_thread(int *, char ***, int, int *); 9 int MPIR_Init_async_thread(void); 10 int MPIR_Finalize_async_thread(void); 11 12 extern int MPIR_async_thread_initialized;
