Changeset 358 for codes/icosagcm/trunk/src/transfert_mpi.f90
- Timestamp:
- 09/07/15 18:28:16 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/transfert_mpi.f90
r327 r358 1150 1150 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1151 1151 !$OMP CRITICAL 1152 CALL MPI_ISEND(buffer_r,send%size,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1152 CALL MPI_ISEND(buffer_r,send%size,MPI_REAL8,send%rank, & 1153 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1153 1154 !$OMP END CRITICAL 1154 1155 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1155 CALL MPI_ISEND(buffer_r,send%size,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1156 CALL MPI_ISEND(buffer_r,send%size,MPI_REAL8,send%rank, & 1157 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1156 1158 ENDIF 1157 1159 … … 1186 1188 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1187 1189 !$OMP CRITICAL 1188 CALL MPI_IRECV(buffer_r,recv%size,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1190 CALL MPI_IRECV(buffer_r,recv%size,MPI_REAL8,recv%rank, & 1191 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1189 1192 !$OMP END CRITICAL 1190 1193 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1191 CALL MPI_IRECV(buffer_r,recv%size,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1194 CALL MPI_IRECV(buffer_r,recv%size,MPI_REAL8,recv%rank, & 1195 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1192 1196 ENDIF 1193 1197 … … 1232 1236 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1233 1237 !$OMP CRITICAL 1234 CALL MPI_ISEND(buffer_r,send%size*dim3,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1238 CALL MPI_ISEND(buffer_r,send%size*dim3,MPI_REAL8,send%rank, & 1239 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1235 1240 !$OMP END CRITICAL 1236 1241 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1237 CALL MPI_ISEND(buffer_r,send%size*dim3,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1242 CALL MPI_ISEND(buffer_r,send%size*dim3,MPI_REAL8,send%rank, & 1243 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1238 1244 ENDIF 1239 1245 ENDIF … … 1274 1280 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1275 1281 !$OMP CRITICAL 1276 CALL MPI_IRECV(buffer_r,recv%size*dim3,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1282 CALL MPI_IRECV(buffer_r,recv%size*dim3,MPI_REAL8,recv%rank, & 1283 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1277 1284 !$OMP END CRITICAL 1278 1285 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1279 CALL MPI_IRECV(buffer_r,recv%size*dim3,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1286 CALL MPI_IRECV(buffer_r,recv%size*dim3,MPI_REAL8,recv%rank, & 1287 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1280 1288 ENDIF 1281 1289 ENDIF … … 1307 1315 CALL trace_start("copy_to_buffer") 1308 1316 DO d4=1,dim4 1309 offset=send%offset*dim3*dim4 + dim3*send%size*(d4-1) + (lbegin-1)*send%size 1317 offset=send%offset*dim3*dim4 + dim3*send%size*(d4-1) + & 1318 (lbegin-1)*send%size 1310 1319 1311 1320 DO d3=lbegin,lend … … 1321 1330 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1322 1331 !$OMP CRITICAL 1323 CALL MPI_ISEND(buffer_r,send%size*dim3*dim4,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1332 CALL MPI_ISEND(buffer_r,send%size*dim3*dim4,MPI_REAL8,send%rank, & 1333 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1324 1334 !$OMP END CRITICAL 1325 1335 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1326 CALL MPI_ISEND(buffer_r,send%size*dim3*dim4,MPI_REAL8,send%rank,send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1336 CALL MPI_ISEND(buffer_r,send%size*dim3*dim4,MPI_REAL8,send%rank, & 1337 send%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1327 1338 ENDIF 1328 1339 ENDIF … … 1367 1378 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 1368 1379 !$OMP CRITICAL 1369 CALL MPI_IRECV(buffer_r,recv%size*dim3*dim4,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1380 CALL MPI_IRECV(buffer_r,recv%size*dim3*dim4,MPI_REAL8,recv%rank, & 1381 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1370 1382 !$OMP END CRITICAL 1371 1383 ELSE IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) THEN 1372 CALL MPI_IRECV(buffer_r,recv%size*dim3*dim4,MPI_REAL8,recv%rank,recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1384 CALL MPI_IRECV(buffer_r,recv%size*dim3*dim4,MPI_REAL8,recv%rank, & 1385 recv%tag+1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1373 1386 ENDIF 1374 1387 ENDIF … … 1387 1400 msize=message%buffers(ireq)%size 1388 1401 rank=message%buffers(ireq)%rank 1389 CALL MPI_ISEND(buffer_r,msize,MPI_REAL8,rank,1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1402 CALL MPI_ISEND(buffer_r,msize,MPI_REAL8,rank,1000*message%number, & 1403 comm_icosa, message%mpi_req(ireq),ierr) 1390 1404 ENDDO 1391 1405 … … 1394 1408 msize=message%buffers(ireq)%size 1395 1409 rank=message%buffers(ireq)%rank 1396 CALL MPI_IRECV(buffer_r,msize,MPI_REAL8,rank,1000*message%number,comm_icosa, message%mpi_req(ireq),ierr) 1410 CALL MPI_IRECV(buffer_r,msize,MPI_REAL8,rank,1000*message%number, & 1411 comm_icosa, message%mpi_req(ireq),ierr) 1397 1412 ENDDO 1398 1413 … … 1413 1428 1414 1429 !$OMP MASTER 1415 IF (message%pending .AND. .NOT. message%completed) CALL MPI_TESTALL(message%nreq,message%mpi_req,message%completed,message%status,ierr) 1430 IF (message%pending .AND. .NOT. message%completed) CALL MPI_TESTALL(message%nreq,& 1431 message%mpi_req,message%completed,message%status,ierr) 1416 1432 !$OMP END MASTER 1417 1433 END SUBROUTINE test_message_mpi … … 1456 1472 1457 1473 !$OMP MASTER 1458 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req,message%status,ierr) 1474 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req, & 1475 message%status,ierr) 1459 1476 !$OMP END MASTER 1460 1477 !$OMP BARRIER … … 1486 1503 1487 1504 !$OMP MASTER 1488 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req,message%status,ierr) 1505 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req, & 1506 message%status,ierr) 1489 1507 !$OMP END MASTER 1490 1508 !$OMP BARRIER … … 1534 1552 ELSE IF (field(1)%ndim==4) THEN 1535 1553 !$OMP MASTER 1536 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req,message%status,ierr) 1554 IF (.NOT. message%completed) CALL MPI_WAITALL(nreq,message%mpi_req, & 1555 message%status,ierr) 1537 1556 !$OMP END MASTER 1538 1557 !$OMP BARRIER … … 1557 1576 CALL trace_start("copy_from_buffer") 1558 1577 DO d4=1,dim4 1559 offset=recv%offset*dim3*dim4 + dim3*recv%size*(d4-1) + (lbegin-1)*recv%size 1578 offset=recv%offset*dim3*dim4 + dim3*recv%size*(d4-1) + & 1579 (lbegin-1)*recv%size 1560 1580 DO d3=lbegin,lend 1561 1581 DO n=1,recv%size … … 1624 1644 IF (field(ind)%ndim==2) THEN 1625 1645 DO n=1,req%size 1626 rval2d(req%target_ind(n))=field(req%src_domain(n))%rval2d(req%src_ind(n))*req%target_sign(n) 1646 rval2d(req%target_ind(n))=field(req%src_domain(n))%rval2d(req%src_ind(n))*& 1647 req%target_sign(n) 1627 1648 ENDDO 1628 1649 ELSE IF (field(ind)%ndim==3) THEN 1629 1650 DO n=1,req%size 1630 rval3d(req%target_ind(n),:)=field(req%src_domain(n))%rval3d(req%src_ind(n),:)*req%target_sign(n) 1651 rval3d(req%target_ind(n),:)=field(req%src_domain(n))%rval3d(req%src_ind(n),:)*& 1652 req%target_sign(n) 1631 1653 ENDDO 1632 1654 ELSE IF (field(ind)%ndim==4) THEN 1633 1655 DO n=1,req%size 1634 rval4d(req%target_ind(n),:,:)=field(req%src_domain(n))%rval4d(req%src_ind(n),:,:)*req%target_sign(n) 1656 rval4d(req%target_ind(n),:,:)=field(req%src_domain(n))%rval4d(req%src_ind(n),:,:)*& 1657 req%target_sign(n) 1635 1658 ENDDO 1636 1659 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.