Mon Nov 13 03:12:29 1995 Connection MachineLinking...done. : 2.1 Source Rev: f2100 page: 1 Source Listing File: /scratch2/hanson/pgm.fcm 1 1 0 program cmtest 2 2 0 code: test if cm Fort90 array functions from cm-guide work using cmf 3 3 0 include'/usr/include/cm/timer-fort.h' 18 4 0 integer, array(2,3):: a,b,cu 19 5 0 integer, array(2):: s2,ctr1,ctr2,ctr3,cr1,cr2,b2 20 6 0 integer, array(3):: s3,at,ar1,ar2,br1,br2 21 7 0 integer c(2,2),ct(3,2),cs(3,4),cst(4,3),as(4),d(2,9) 22 8 0 logical inmask(64,64) 23 9 0 real, array(64,64):: u,du 24 10 0 real us(8,8),diffav 25 11 0 Caution: Fortran90 array intrinsics need to be listed in INTRINSIC stmt 26 12 0 cft77: intrinsic sum,maxval,minval,product,dot_product,matmul,transpose 27 13 0 cft77: & ,cshift,eoshift,spread 28 14 0 data as/2,3,4,5/ 29 15 0 data at/2,3,4/ 30 16 0 call cm_timer_clear(0) 31 17 0 call cm_timer_start(0) 32 18 0 print* 33 19 0 print60 34 20 0 60 format(1x/1x,'CM TEST Program for Array Intrinsic Functions') 35 21 0 c --------------------CONSTRUCTOR 36 22 0 b(1,1:3) = [1, 3, 5] ! initialize first row, along dimension 2. 37 23 0 b(2,1:3) = [2, 4, 6] ! initialize second row, along dimension 2. 38 24 0 CAUTION: no constructors like "[1,2]" allowed in cf77v6.0 39 25 0 br1 = b(1,:) 40 26 0 br2 = b(2,:) 41 27 0 print63,'constructor defined b(2,3) =',br1,br2 42 28 0 63 format(1x,a36/(12x,3i3)) 43 29 0 c --------------------SUM 44 30 0 isum = sum(b) ! => isum = 21; i.e., Front-End scalar. 45 31 0 print61,'isum = sum(b) =',isum 46 32 0 61 format(1x,a36/(12x,i3)) 47 33 0 isum = sum(b(:,1:3:2)) ! => isum = 14; sole ':' means all values '1:2'. 48 34 0 print61,'isum = sum(b(:,1:3:2)) =',isum 49 35 0 s2 = sum(b,dim=2) ! declared with the correct array section shape. 50 36 0 print62,'s2 = sum(b,2) =',s2 ! => s2 = [9,12], row sums 51 37 0 62 format(1x,a36/(12x,2i3)) 52 38 0 s3 = sum(b,dim=1) ! => s3 = [3,7,11]; column sums. 53 39 0 print63,'s3 = sum(b,dim=1) =',s3 54 40 0 isum = sum(b,mask=b.gt.3) ! =>isum = 15; i.e., add only elements 55 41 0 print61,'isum = sum(b,mask=b.gt.3) =',isum 56 42 0 s3 = sum(b,dim=1,mask=b.gt.3) !=> s3 = [0,4,11], conditional col sum 57 43 0 print63,'s3 = sum(b,dim=1,mask=b.gt.3) =',s3 58 44 0 s2 = sum(b,dim=2,mask=b.gt.3) ! => s2 = [5,10], conditional row sum 59 45 0 print62,'s2 = sum(b,dim=2,mask=b.gt.3) =',s2 60 46 0 c --------------------MAXVAL 61 47 0 imax = maxval(b) ! => imax = 6; array maximum value. 62 48 0 print61,'imax = maxval(b) =',imax 63 49 0 s3 = maxval(b,dim=1) ! => s3 = [2,4,6]; column maximums. 64 50 0 print63,'s3 = maxval(b,dim=1) =',s3 65 51 0 s2 = maxval(b,dim=2) ! => s2 = [5,6]; row maximums. 66 52 0 print62,'s2 = maxval(b,dim=2) =',s2 Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 2 Source Listing File: /scratch2/hanson/pgm.fcm 67 53 0 c --------------------MINVAL 68 54 0 imin = minval(b) ! => imin = 1; array minimum value. 69 55 0 print61,'imin = minval(b) =',imin 70 56 0 c --------------------PRODUCT 71 57 0 s2 = product(b,dim=2) ! => s2 = [15,48]; products of column elements. 72 58 0 print62,'s2 = product(b,dim=2) =',s2 73 59 0 c --------------------DOTPRODUCT 74 60 0 idot = dotproduct(b(1,:),b(2,:)) ! => idot = 44; dot product of row 75 61 0 print61,'idot = dotproduct(b(1,:),b(2,:)) =',idot ! vectors of b. 76 62 0 c --------------------MATMUL 77 63 0 ! assuming array b of the previous section. 78 64 0 ![Ans] = matmul([Array_1],[Array_2]) ! computes matrix multiplication 79 65 0 ! of two rank two matrices. 80 66 0 c = matmul(b(:,1:2),b(:,2:3)) ! => c(1,:)=[15,23];c(2,:)=[22,34]. 81 67 0 cr1=c(1,:) 82 68 0 cr2=c(2,:) 83 69 0 print62,'c = matmul(b(:,1:2),b(:,2:3)) =',cr1,cr2 84 70 0 c --------------------TRANSPOSE 85 71 0 ![Ans] = transpose([Array]) ! transforms an array to its transpose. 86 72 0 ct = transpose(b) ! => ct(1,:)=[1,2];ct(2,:)=[3,4];ct(3,:)=[5,6]. 87 73 0 ctr1 = ct(1,:) 88 74 0 ctr2 = ct(2,:) 89 75 0 ctr3 = ct(3,:) 90 76 0 print62,'ct = transpose(b) =',ctr1,ctr2,ctr3 91 77 0 c -------------------- 92 78 0 CCCCCCCCCCC FORALL egs? 93 79 0 c -------------------- 94 80 0 CCCCCCCCCCC WHERE egs? 95 81 0 c --------------------CSHIFT 96 82 0 ! assume b is again initialized as 97 83 0 ! b = 1 3 5 98 84 0 ! 2 4 6 99 85 0 a = cshift(b,shift=1,dim=2) ! => a = 3 5 1 100 86 0 ! 4 6 2 101 87 0 print63,'a = cshift(a,shift=1,dim=2) =',transpose(a) 102 88 0 ! i.e., b(i,j+shift) -> a(i,j) for j=1:2, etc.; 103 89 0 ! i.e., the result is computed from shifting subscript in specified 104 90 0 ! dimension of the source array by the specified shift. 105 91 0 a = cshift(b,dim=2,shift=-1) ! => a = 5 1 3 106 92 0 ! 6 2 4 107 93 0 print63,'a = cshift(b,dim=2,shift=-1) =',transpose(a) 108 94 0 ! i.e., b(i,j+shift) -> a(i,j) for j=2:3, etc. 109 95 0 a = cshift(b,2,[1,2]) ! a = 3 5 1 110 96 0 ! 6 2 4 111 97 0 ! i.e., an array-valued shift, or shift per row. 112 98 0 CAUTION: Keywords like "dim=" are optional, but if used, must be used 113 99 0 ! for all but array arguments. 114 100 0 print63,'a = cshift(b,2,[1,2]) =',transpose(a) 115 101 0 c --------------------LAPLACE'S EQUATION 116 102 0 ! Jacobi Iteration for a 5-star discretization of 117 103 0 ! 2D Laplace's equation: 118 104 0 u = 0 Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 3 Source Listing File: /scratch2/hanson/pgm.fcm 119 105 0 u(1,:)=2 120 106 0 u(64,:)=2 121 107 0 u(:,1)=2 122 108 0 u(:,64)=1 123 109 0 inmask = .FALSE. 124 110 0 inmask(2:63,2:63) = .TRUE. 125 111 0 diffav = 1 126 112 0 iter=0 127 113 0 do while (diffav.gt.5.e-3.and.iter.lt.100) 128 114 0 iter=iter+1 129 115 0 du = 0 130 116 0 where(inmask) 131 117 0 du = 0.25*(cshift(u,1,1)+cshift(u,1,-1)+cshift(u,2,1) 132 118 0 & +cshift(u,2,-1)) - u 133 119 0 u = u + du 134 120 0 end where 135 121 0 du = du*du 136 122 0 diffav = sqrt(sum(du)/(62*62)) 137 123 0 end do 138 124 0 ! which is the main program fragment of laplace.fcm. 139 125 0 cf6er:print66,'u = laplace-shift(u) =',u(1:64:16,1:64:16) 140 126 0 us=transpose(u(1:64:9,1:64:9)) 141 127 0 print66,'u = laplace-shift(u)= ; iter=',iter,'; av-diff =' 142 128 0 & ,diffav,us 143 129 0 66 format(1x,a36,i3,a7,e10.3/(8f7.3)) 144 130 0 c --------------------EOSHIFT 145 131 0 a = eoshift(b,1,-1) ! a = 0 0 0 note default boundary value is 0. 146 132 0 ! 1 3 5 147 133 0 print63,'a = eoshift(b,1,-1) =',transpose(a) 148 134 0 a = eoshift(b,dim=2,shift=[-1,0],boundary=[7,8]) ! => a = 7 1 3 149 135 0 ! 2 4 6 150 136 0 print63,'a = eoshift(b,2,[-1,0],[7,8]) =',transpose(a) 151 137 0 a = eoshift(b,2,2) ! => a = 5 0 0 152 138 0 ! => 6 0 0 153 139 0 print63,'a = eoshift(b,2,2) =',transpose(a) 154 140 0 c --------------------REPLICATE 155 141 0 cst = replicate(b,dim=1,ncopies=2) 156 142 0 ! contents of cst: 157 143 0 ! 1 3 5 158 144 0 ! 2 4 6 159 145 0 ! 1 3 5 160 146 0 ! 2 4 6 161 147 0 print63,'cst=replicate(b,dim=1,ncopies=2) =',transpose(cst) 162 148 0 c --------------------------------------------------------------------------- 163 149 0 d = replicate(b,DIM=2,NCOPIES=3) 164 150 0 ! contents of d: 165 151 0 ! 1 3 5 1 3 5 1 3 5 166 152 0 ! 2 4 6 2 4 6 2 4 6 167 153 0 print69,'d = replicate(b,DIM=2,NCOPIES=3) =',transpose(d) 168 154 0 69 format(1x,a36/(12x,9i3)) 169 155 0 d(:,2:4) = replicate(b,2,1) 170 156 0 ! contents of d(:,2:4) is b Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 4 Source Listing File: /scratch2/hanson/pgm.fcm 171 157 0 print63,'d(:,2:4) = replicate(b,2,1) =',transpose(d(:,2:4)) 172 158 0 c --------------------SPREAD 173 159 0 as = [2,3,4,5] 174 160 0 cs = spread(as,dim=1,ncopies=3) 175 161 0 ! contents of cs: 176 162 0 ! 2 3 4 5 177 163 0 ! 2 3 4 5 178 164 0 ! 2 3 4 5 179 165 0 print64,'as = [2,3,4,5] = ',as 180 166 0 64 format(1x,a36/(12x,4i3)) 181 167 0 print64,'cs = spread(as,dim=1,ncopies=3) =',transpose(cs) 182 168 0 c --------------------------------------------------------------------------- 183 169 0 at = [2,3,4] 184 170 0 cs = spread(at,dim=2,ncopies=4) 185 171 0 ! contents of c: 186 172 0 ! 2 2 2 2 187 173 0 ! 3 3 3 3 188 174 0 ! 4 4 4 4 189 175 0 print63,'at = [2,3,4] = ',at 190 176 0 print64,'cs = spread(at,dim=2,ncopies=4) =',transpose(cs) 191 177 0 c --------------------------------------------------------------------------- 192 178 0 ! i.e., b=spread(a,d,c) => 193 179 0 ! a(n_1,n_2,...,n_(d-1),n_d,...,n_r) -> b(n_1,n_2,...,n_(d-1),c,n_d,...,n_r) 194 180 0 ! where r is the rank of source array a and n_i is the size of dimension i; 195 181 0 ! noting that a new dimension of size c is added before dimension d. 196 182 0 c --------------------------------------------------------------- 197 183 0 CCCCCCCCC LAYOUT egs? 198 184 0 c --------------------------------------------------------------- 199 185 0 CCCCCCCCC ALIGN egs? 200 186 0 c --------------------------------------------------------------- 201 187 0 call cm_timer_stop(0) 202 188 0 print*,'total CM5 time' 203 189 0 call cm_timer_print(0) 204 190 0 stop Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 5 Symbol Storage Map File: /scratch2/hanson/pgm.fcm ENTRY POINTS Offset Type Name 0 NONE CMTEST STORAGE BLOCKS Size Block 49800 local 1605 constants VARIABLES Offset Size Type Block Name 20 4 REAL4 local FE DIFFAV 4 4 INT4 local FE IDOT 12 4 INT4 local FE IMAX 8 4 INT4 local FE IMIN 16 4 INT4 local FE ISUM 0 4 INT4 local FE ITER --- 0 NONE global FE _cmpe_cmtest_0 --- 0 NONE global FE _cmpe_cmtest_0_ --- 0 NONE global FE _cmpe_cmtest_1 --- 0 NONE global FE _cmpe_cmtest_10 --- 0 NONE global FE _cmpe_cmtest_10_ --- 0 NONE global FE _cmpe_cmtest_11 --- 0 NONE global FE _cmpe_cmtest_11_ --- 0 NONE global FE _cmpe_cmtest_12 --- 0 NONE global FE _cmpe_cmtest_12_ --- 0 NONE global FE _cmpe_cmtest_13 --- 0 NONE global FE _cmpe_cmtest_13_ --- 0 NONE global FE _cmpe_cmtest_14 --- 0 NONE global FE _cmpe_cmtest_14_ --- 0 NONE global FE _cmpe_cmtest_15 --- 0 NONE global FE _cmpe_cmtest_15_ --- 0 NONE global FE _cmpe_cmtest_16 --- 0 NONE global FE _cmpe_cmtest_16_ --- 0 NONE global FE _cmpe_cmtest_17 --- 0 NONE global FE _cmpe_cmtest_17_ --- 0 NONE global FE _cmpe_cmtest_18 --- 0 NONE global FE _cmpe_cmtest_18_ --- 0 NONE global FE _cmpe_cmtest_19 --- 0 NONE global FE _cmpe_cmtest_19_ --- 0 NONE global FE _cmpe_cmtest_1_ --- 0 NONE global FE _cmpe_cmtest_2 --- 0 NONE global FE _cmpe_cmtest_20 --- 0 NONE global FE _cmpe_cmtest_20_ --- 0 NONE global FE _cmpe_cmtest_21 --- 0 NONE global FE _cmpe_cmtest_21_ --- 0 NONE global FE _cmpe_cmtest_22 --- 0 NONE global FE _cmpe_cmtest_22_ --- 0 NONE global FE _cmpe_cmtest_23 Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 6 Symbol Storage Map File: /scratch2/hanson/pgm.fcm --- 0 NONE global FE _cmpe_cmtest_23_ --- 0 NONE global FE _cmpe_cmtest_24 --- 0 NONE global FE _cmpe_cmtest_24_ --- 0 NONE global FE _cmpe_cmtest_25 --- 0 NONE global FE _cmpe_cmtest_25_ --- 0 NONE global FE _cmpe_cmtest_26 --- 0 NONE global FE _cmpe_cmtest_26_ --- 0 NONE global FE _cmpe_cmtest_27 --- 0 NONE global FE _cmpe_cmtest_27_ --- 0 NONE global FE _cmpe_cmtest_28 --- 0 NONE global FE _cmpe_cmtest_28_ --- 0 NONE global FE _cmpe_cmtest_29 --- 0 NONE global FE _cmpe_cmtest_29_ --- 0 NONE global FE _cmpe_cmtest_2_ --- 0 NONE global FE _cmpe_cmtest_3 --- 0 NONE global FE _cmpe_cmtest_30 --- 0 NONE global FE _cmpe_cmtest_30_ --- 0 NONE global FE _cmpe_cmtest_31 --- 0 NONE global FE _cmpe_cmtest_31_ --- 0 NONE global FE _cmpe_cmtest_32 --- 0 NONE global FE _cmpe_cmtest_32_ --- 0 NONE global FE _cmpe_cmtest_33 --- 0 NONE global FE _cmpe_cmtest_33_ --- 0 NONE global FE _cmpe_cmtest_34 --- 0 NONE global FE _cmpe_cmtest_34_ --- 0 NONE global FE _cmpe_cmtest_35 --- 0 NONE global FE _cmpe_cmtest_35_ --- 0 NONE global FE _cmpe_cmtest_36 --- 0 NONE global FE _cmpe_cmtest_36_ --- 0 NONE global FE _cmpe_cmtest_37 --- 0 NONE global FE _cmpe_cmtest_37_ --- 0 NONE global FE _cmpe_cmtest_38 --- 0 NONE global FE _cmpe_cmtest_38_ --- 0 NONE global FE _cmpe_cmtest_39 --- 0 NONE global FE _cmpe_cmtest_39_ --- 0 NONE global FE _cmpe_cmtest_3_ --- 0 NONE global FE _cmpe_cmtest_4 --- 0 NONE global FE _cmpe_cmtest_40 --- 0 NONE global FE _cmpe_cmtest_40_ --- 0 NONE global FE _cmpe_cmtest_41 --- 0 NONE global FE _cmpe_cmtest_41_ --- 0 NONE global FE _cmpe_cmtest_42 --- 0 NONE global FE _cmpe_cmtest_42_ --- 0 NONE global FE _cmpe_cmtest_43 --- 0 NONE global FE _cmpe_cmtest_43_ --- 0 NONE global FE _cmpe_cmtest_44 --- 0 NONE global FE _cmpe_cmtest_44_ --- 0 NONE global FE _cmpe_cmtest_45 --- 0 NONE global FE _cmpe_cmtest_45_ --- 0 NONE global FE _cmpe_cmtest_4_ --- 0 NONE global FE _cmpe_cmtest_5 --- 0 NONE global FE _cmpe_cmtest_5_ Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 7 Symbol Storage Map File: /scratch2/hanson/pgm.fcm --- 0 NONE global FE _cmpe_cmtest_6 --- 0 NONE global FE _cmpe_cmtest_6_ --- 0 NONE global FE _cmpe_cmtest_7 --- 0 NONE global FE _cmpe_cmtest_7_ --- 0 NONE global FE _cmpe_cmtest_8 --- 0 NONE global FE _cmpe_cmtest_8_ --- 0 NONE global FE _cmpe_cmtest_9 --- 0 NONE global FE _cmpe_cmtest_9_ --- 0 NONE not-referenced FE cmtest ARRAYS Offset Size Type Block/Class Home Name 0 24 INT4 local CM A --- --- INT4 not-referenced FE AR1 --- --- INT4 not-referenced FE AR2 12920 16 INT4 local CM AS 12936 12 INT4 local CM AT 24 24 INT4 local CM B --- --- INT4 not-referenced FE B2 120 12 INT4 local CM BR1 132 12 INT4 local CM BR2 144 16 INT4 local CM C 80 8 INT4 local CM CR1 88 8 INT4 local CM CR2 184 48 INT4 local CM CS 232 48 INT4 local CM CST 160 24 INT4 local CM CT 56 8 INT4 local CM CTR1 64 8 INT4 local CM CTR2 72 8 INT4 local CM CTR3 --- --- INT4 not-referenced FE CU 296 72 INT4 local CM D 33136 16384 REAL4 local CM DU 368 16384 LOG4 local CM INMASK 48 8 INT4 local CM S2 96 12 INT4 local CM S3 16752 16384 REAL4 local CM U 49520 256 REAL4 local CM US PARAMETERS (Offset is within Storage Block 'constants') Offset Type Name Value 0 INT4 _DOUBLE_ 64 0 INT4 _DOUBLE_COMPLEX_ 64 0 INT4 _DOUBLE_INT_ 64 0 INT4 _SINGLE_ 32 0 INT4 _SINGLE_COMPLEX_ 32 0 INT4 _SINGLE_INT_ 32 INTRINSIC PROCEDURES Name CSHIFT Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 8 Symbol Storage Map File: /scratch2/hanson/pgm.fcm DOTPRODUCT EOSHIFT MATMUL MAXVAL MINVAL PRODUCT REPLICATE SPREAD SQRT SUM TRANSPOSE STATEMENT FUNCTIONS Type Name EXTERNALS Type Unit_Kind Name INT4 function CM_NUMBER_OF_TIMERS NONE subroutine CM_TIMER_CLEAR NONE subroutine CM_TIMER_PRINT REAL8 function CM_TIMER_READ_CM_BUSY REAL8 function CM_TIMER_READ_CM_IDLE REAL8 function CM_TIMER_READ_ELAPSED INT4 function CM_TIMER_READ_RUN_STATE INT4 function CM_TIMER_READ_STARTS NONE subroutine CM_TIMER_START NONE subroutine CM_TIMER_STOP NAME LISTS Name CONSTRUCT NAMES Name COMMUNICATION ROUTINES Name Line Number (number of times) SUM (into scalar) 30, 33, 40, 60, 122, [<>: 0] MAXVAL (into scalar) 47 MINVAL (into scalar) 54 SEND 22, 23, 25, 26, 35, 38, 42, 44, 49, 51, 57, 67, 68, 72, 73, 74, 75, 87, 93, 95, 100, 126, 133, 134(2), 136, 139, 147, 153, 157, 167, 176 GET 141, 149, 155 NEWS 60, 155 VPMOVE 160, 170 BLOCKMOVE 66(2) CM TO FE ARRAY TRANSFER 87, 93, 100, 133, 136, 139, 147, 153, 157, 167, 176 FE TO CM ARRAY TRANSFER 22, 23, 95, 134(2), 159, 169 SUM (into vector) 35, 38, 42, 44 PRODUCT (into vector) 57 MAXVAL (into vector) 49, 51 Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 9 Symbol Storage Map File: /scratch2/hanson/pgm.fcm SPREAD 95, 134(2), 160, 170 MATRIX MULTIPLY 66 CSHIFT 85, 91, 95, 117(4) EOSHIFT 131, 134, 137 Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 10 Source Listing File: /scratch2/hanson/pgm.fcm Mon Nov 13 03:12:29 1995 Connection Machine Fortran Version: 2.1 Source Rev: f2100 page: 11 Utility Stats Input File: /scratch2/hanson/pgm.fcm Base File: pgm COMMAND QUALIFIERS -optimize -dp -list pgm.fcm analysis_data check = (no bounds,overflow,no underflow ) continuations = 19 directives f77 i4 ifconvert level_of_vectorization = 100 list machine_code optimize = (local,global,code_motion ) overlap show = (no dictionary,no include,no map,no preprocessor,no single ) standard = (no syntax,no source,no semantic ) v104 warnings = (no declarations,general,no ultrix,no vaxeln ) postoptimize preoptimize loadstoremotion ucephase uaephase prcphase prsphase ucepost uaepost prcpost prspost cppost complex_lower safety = 0 pnodes = -1 peephole axisreorder loopreversal dp trcback skip_garbage newforall killuselessalloc new_modifies prc2 prs2 redo_modifies defer_modifies comb_cp source_fc source_node const transp cp_last bb_merge meoptimize mecopypropagate memergetemps merepl menullallcntx mesgsize = 10000 merge amode single_complex_opt prover = () peschedule peschalias pe_asm_machine_code pe_asm_comments pe_asm_srclines