Changeset 3852 for trunk/LMDZ.COMMON/libf/dyn3dpar/parallel_lmdz.F90
- Timestamp:
- Jul 16, 2025, 4:10:15 PM (3 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3dpar/parallel_lmdz.F90
r1683 r3852 191 191 omp_chunk=(llm+1)/omp_size 192 192 IF (MOD(llm+1,omp_size)/=0) omp_chunk=omp_chunk+1 193 194 ! Jonah: for some combinations of llm/omp_size, the chunk 195 ! is such that at least one thread is given no task inside 196 ! "DO SCHEDULE" (e.g when filling MPI buffers to send/recv). 197 ! This leads these "idle" threads to trigger MPI_Waitall 198 ! while no instruction send/recv was emitted, resulting in a request error. 199 ! Fix: 200 do while (((omp_chunk*(omp_size-1))>=(llm+1)).and.(omp_chunk>=1)) 201 omp_chunk=omp_chunk-1 202 end do 203 ! Jonah: connected to the above, one must check that the chunk is 204 ! still big enough to prevent cyclic distribution of tasks 205 ! (i.e. first thread is distributed two packs of iterations due to 206 ! the last thread being unable to complete the loop), which is not optimum 207 if ((omp_chunk*omp_size)<(llm+1)) then 208 print *, 'Warning: the current OMP chunk is too small and would trigger ', & 209 'cycling scheduling. You should consider reducing the number of OMP threads.' 210 endif 193 211 CALL getin('omp_chunk',omp_chunk) 194 212 !$OMP END MASTER
Note: See TracChangeset
for help on using the changeset viewer.