Changeset 295 for codes/icosagcm/trunk/src/transfert_omp.f90
- Timestamp:
- 10/31/14 14:52:01 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/transfert_omp.f90
r238 r295 34 34 END INTERFACE 35 35 36 PUBLIC bcast_omp, reduce_sum_omp, allreduce_sum_omp 36 37 INTERFACE reduce_max_omp 38 MODULE PROCEDURE reduce_max_omp_i,reduce_max_omp_i1,reduce_max_omp_i2,reduce_max_omp_i3,reduce_max_omp_i4, & 39 reduce_max_omp_r,reduce_max_omp_r1,reduce_max_omp_r2,reduce_max_omp_r3,reduce_max_omp_r4 40 END INTERFACE 41 42 INTERFACE allreduce_max_omp 43 MODULE PROCEDURE allreduce_max_omp_i,allreduce_max_omp_i1,allreduce_max_omp_i2,allreduce_max_omp_i3,allreduce_max_omp_i4, & 44 allreduce_max_omp_r,allreduce_max_omp_r1,allreduce_max_omp_r2,allreduce_max_omp_r3,allreduce_max_omp_r4 45 END INTERFACE 46 47 48 PUBLIC bcast_omp, reduce_sum_omp, allreduce_sum_omp, reduce_max_omp, allreduce_max_omp 37 49 38 50 CONTAINS … … 521 533 END SUBROUTINE allreduce_sum_omp_r4 522 534 535 536 537 538 539 540 541 542 543 544 545 546 SUBROUTINE reduce_max_omp_i(VarIn, VarOut) 547 IMPLICIT NONE 548 549 INTEGER,INTENT(IN) :: VarIn 550 INTEGER,INTENT(OUT) :: VarOut 551 INTEGER :: VarIn_tmp(1) 552 INTEGER :: VarOut_tmp(1) 553 554 VarIn_tmp(1)=VarIn 555 CALL Check_buffer_i(1) 556 CALL reduce_max_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i) 557 VarOut=VarOut_tmp(1) 558 559 END SUBROUTINE reduce_max_omp_i 560 561 SUBROUTINE reduce_max_omp_i1(VarIn, VarOut) 562 IMPLICIT NONE 563 564 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 565 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 566 567 CALL Check_buffer_i(size(VarIn)) 568 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 569 570 END SUBROUTINE reduce_max_omp_i1 571 572 573 SUBROUTINE reduce_max_omp_i2(VarIn, VarOut) 574 IMPLICIT NONE 575 576 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 577 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 578 579 CALL Check_buffer_i(size(VarIn)) 580 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 581 582 END SUBROUTINE reduce_max_omp_i2 583 584 585 SUBROUTINE reduce_max_omp_i3(VarIn, VarOut) 586 IMPLICIT NONE 587 588 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 589 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 590 591 CALL Check_buffer_i(size(VarIn)) 592 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 593 594 END SUBROUTINE reduce_max_omp_i3 595 596 597 SUBROUTINE reduce_max_omp_i4(VarIn, VarOut) 598 IMPLICIT NONE 599 600 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 601 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 602 603 CALL Check_buffer_i(size(VarIn)) 604 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 605 606 END SUBROUTINE reduce_max_omp_i4 607 608 609 SUBROUTINE reduce_max_omp_r(VarIn, VarOut) 610 IMPLICIT NONE 611 612 REAL,INTENT(IN) :: VarIn 613 REAL,INTENT(OUT) :: VarOut 614 REAL :: VarIn_tmp(1) 615 REAL :: VarOut_tmp(1) 616 617 VarIn_tmp(1)=VarIn 618 CALL Check_buffer_r(1) 619 CALL reduce_max_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r) 620 VarOut=VarOut_tmp(1) 621 622 END SUBROUTINE reduce_max_omp_r 623 624 SUBROUTINE reduce_max_omp_r1(VarIn, VarOut) 625 IMPLICIT NONE 626 627 REAL,INTENT(IN),DIMENSION(:) :: VarIn 628 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 629 630 CALL Check_buffer_r(size(VarIn)) 631 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 632 633 END SUBROUTINE reduce_max_omp_r1 634 635 636 SUBROUTINE reduce_max_omp_r2(VarIn, VarOut) 637 IMPLICIT NONE 638 639 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 640 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 641 642 CALL Check_buffer_r(size(VarIn)) 643 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 644 645 END SUBROUTINE reduce_max_omp_r2 646 647 648 SUBROUTINE reduce_max_omp_r3(VarIn, VarOut) 649 IMPLICIT NONE 650 651 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 652 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 653 654 CALL Check_buffer_r(size(VarIn)) 655 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 656 657 END SUBROUTINE reduce_max_omp_r3 658 659 660 SUBROUTINE reduce_max_omp_r4(VarIn, VarOut) 661 IMPLICIT NONE 662 663 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 664 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 665 666 CALL Check_buffer_r(size(VarIn)) 667 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 668 669 END SUBROUTINE reduce_max_omp_r4 670 671 672 673 674 SUBROUTINE allreduce_max_omp_i(VarIn, VarOut) 675 IMPLICIT NONE 676 677 INTEGER,INTENT(IN) :: VarIn 678 INTEGER,INTENT(OUT) :: VarOut 679 INTEGER :: VarIn_tmp(1) 680 INTEGER :: VarOut_tmp(1) 681 682 VarIn_tmp(1)=VarIn 683 CALL Check_buffer_i(1) 684 CALL allreduce_max_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i) 685 VarOut=VarOut_tmp(1) 686 687 END SUBROUTINE allreduce_max_omp_i 688 689 SUBROUTINE allreduce_max_omp_i1(VarIn, VarOut) 690 IMPLICIT NONE 691 692 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 693 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 694 695 CALL Check_buffer_i(size(VarIn)) 696 CALL allreduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 697 698 END SUBROUTINE allreduce_max_omp_i1 699 700 701 SUBROUTINE allreduce_max_omp_i2(VarIn, VarOut) 702 IMPLICIT NONE 703 704 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 705 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 706 707 CALL Check_buffer_i(size(VarIn)) 708 CALL allreduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 709 710 END SUBROUTINE allreduce_max_omp_i2 711 712 713 SUBROUTINE allreduce_max_omp_i3(VarIn, VarOut) 714 IMPLICIT NONE 715 716 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 717 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 718 719 CALL Check_buffer_i(size(VarIn)) 720 CALL allreduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 721 722 END SUBROUTINE allreduce_max_omp_i3 723 724 725 SUBROUTINE allreduce_max_omp_i4(VarIn, VarOut) 726 IMPLICIT NONE 727 728 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 729 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 730 731 CALL Check_buffer_i(size(VarIn)) 732 CALL allreduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 733 734 END SUBROUTINE allreduce_max_omp_i4 735 736 737 SUBROUTINE allreduce_max_omp_r(VarIn, VarOut) 738 IMPLICIT NONE 739 740 REAL,INTENT(IN) :: VarIn 741 REAL,INTENT(OUT) :: VarOut 742 REAL :: VarIn_tmp(1) 743 REAL :: VarOut_tmp(1) 744 745 VarIn_tmp(1)=VarIn 746 CALL Check_buffer_r(1) 747 CALL allreduce_max_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r) 748 VarOut=VarOut_tmp(1) 749 750 END SUBROUTINE allreduce_max_omp_r 751 752 SUBROUTINE allreduce_max_omp_r1(VarIn, VarOut) 753 IMPLICIT NONE 754 755 REAL,INTENT(IN),DIMENSION(:) :: VarIn 756 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 757 758 CALL Check_buffer_r(size(VarIn)) 759 CALL allreduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 760 761 END SUBROUTINE allreduce_max_omp_r1 762 763 764 SUBROUTINE allreduce_max_omp_r2(VarIn, VarOut) 765 IMPLICIT NONE 766 767 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 768 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 769 770 CALL Check_buffer_r(size(VarIn)) 771 CALL allreduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 772 773 END SUBROUTINE allreduce_max_omp_r2 774 775 776 SUBROUTINE allreduce_max_omp_r3(VarIn, VarOut) 777 IMPLICIT NONE 778 779 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 780 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 781 782 CALL Check_buffer_r(size(VarIn)) 783 CALL allreduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 784 785 END SUBROUTINE allreduce_max_omp_r3 786 787 788 SUBROUTINE allreduce_max_omp_r4(VarIn, VarOut) 789 IMPLICIT NONE 790 791 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 792 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 793 794 CALL Check_buffer_r(size(VarIn)) 795 CALL allreduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 796 797 END SUBROUTINE allreduce_max_omp_r4 798 523 799 524 800 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 740 1016 741 1017 END SUBROUTINE allreduce_sum_omp_rgen 1018 1019 1020 1021 1022 1023 1024 SUBROUTINE reduce_max_omp_igen(VarIn,VarOut,dimsize,Buff) 1025 IMPLICIT NONE 1026 1027 INTEGER,INTENT(IN) :: dimsize 1028 INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn 1029 INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1030 INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1031 1032 INTEGER :: i 1033 1034 !$OMP MASTER 1035 Buff(:)=VarIn(1) 1036 !$OMP END MASTER 1037 !$OMP BARRIER 1038 1039 !$OMP CRITICAL 1040 DO i=1,dimsize 1041 Buff(i)=MAX(Buff(i),VarIn(i)) 1042 ENDDO 1043 !$OMP END CRITICAL 1044 !$OMP BARRIER 1045 1046 !$OMP MASTER 1047 DO i=1,dimsize 1048 VarOut(i)=Buff(i) 1049 ENDDO 1050 !$OMP END MASTER 1051 !$OMP BARRIER 1052 1053 END SUBROUTINE reduce_max_omp_igen 1054 1055 SUBROUTINE reduce_max_omp_rgen(VarIn,VarOut,dimsize,Buff) 1056 IMPLICIT NONE 1057 1058 INTEGER,INTENT(IN) :: dimsize 1059 REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn 1060 REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1061 REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1062 1063 INTEGER :: i 1064 1065 !$OMP MASTER 1066 Buff(:)=VarIn(1) 1067 !$OMP END MASTER 1068 !$OMP BARRIER 1069 1070 !$OMP CRITICAL 1071 DO i=1,dimsize 1072 Buff(i)=MAX(Buff(i),VarIn(i)) 1073 ENDDO 1074 !$OMP END CRITICAL 1075 !$OMP BARRIER 1076 1077 DO i=1,dimsize 1078 VarOut(i)=Buff(i) 1079 ENDDO 1080 !$OMP BARRIER 1081 1082 END SUBROUTINE reduce_max_omp_rgen 1083 1084 1085 1086 SUBROUTINE allreduce_max_omp_igen(VarIn,VarOut,dimsize,Buff) 1087 IMPLICIT NONE 1088 1089 INTEGER,INTENT(IN) :: dimsize 1090 INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn 1091 INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1092 INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1093 1094 INTEGER :: i 1095 1096 !$OMP MASTER 1097 Buff(:)=VarIn(1) 1098 !$OMP END MASTER 1099 !$OMP BARRIER 1100 1101 !$OMP CRITICAL 1102 DO i=1,dimsize 1103 Buff(i)=MAX(Buff(i),VarIn(i)) 1104 ENDDO 1105 !$OMP END CRITICAL 1106 !$OMP BARRIER 1107 1108 DO i=1,dimsize 1109 VarOut(i)=Buff(i) 1110 ENDDO 1111 !$OMP BARRIER 1112 1113 END SUBROUTINE allreduce_max_omp_igen 1114 1115 SUBROUTINE allreduce_max_omp_rgen(VarIn,VarOut,dimsize,Buff) 1116 IMPLICIT NONE 1117 1118 INTEGER,INTENT(IN) :: dimsize 1119 REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn 1120 REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1121 REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1122 1123 INTEGER :: i 1124 1125 !$OMP MASTER 1126 Buff(:)=VarIn(1) 1127 !$OMP END MASTER 1128 !$OMP BARRIER 1129 1130 !$OMP CRITICAL 1131 DO i=1,dimsize 1132 Buff(i)=MAX(Buff(i),VarIn(i)) 1133 ENDDO 1134 !$OMP END CRITICAL 1135 !$OMP BARRIER 1136 1137 DO i=1,dimsize 1138 VarOut(i)=Buff(i) 1139 ENDDO 1140 1141 !$OMP BARRIER 1142 1143 END SUBROUTINE allreduce_max_omp_rgen 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 742 1155 743 1156 END MODULE transfert_omp_mod
Note: See TracChangeset
for help on using the changeset viewer.