int main(int argc, char* argv[]) { int me, num_procs, l, j; int Verbose = 0; start_pes(0); me = _my_pe(); num_procs = _num_pes(); if ( num_procs < 2 ) { if (me ==0) printf("PE[0] requires 2 or more PEs?\n"); return 1; } for (l = 0 ; l < loops ; ++l) { if ((src_int = shmalloc(2*num_procs*sizeof(int))) == NULL) { printf("PE-%d int shmalloc() failed?\n", me); exit(1); } dst_int = &src_int[num_procs]; for(j=0; j < num_procs; j++) { src_int[j] = 4; dst_int[j] = 0; } if ((src_float = shmalloc(2*num_procs*sizeof(float))) == NULL) { printf("PE-%d float shmalloc() failed?\n", me); exit(1); } dst_float = &src_float[num_procs]; for(j=0; j < num_procs; j++) { src_float[j] = 4.0; dst_float[j] = 0.0; } if ((src_double = shmalloc(2*num_procs*sizeof(double))) == NULL) { printf("PE-%d double shmalloc() failed?\n", me); exit(1); } dst_double = &src_double[num_procs]; for(j=0; j < num_procs; j++) { src_double[j] = 8.0; dst_double[j] = 0.0; } if ((src_long = shmalloc(2*num_procs*sizeof(long))) == NULL) { printf("PE-%d long shmalloc() failed?\n", me); exit(1); } dst_long = &src_long[num_procs]; for(j=0; j < num_procs; j++) { src_long[j] = 8; dst_long[j] = 0; } if ((src_llong = shmalloc(2*num_procs*sizeof(long long))) == NULL) { printf("PE-%d long shmalloc() failed?\n", me); exit(1); } dst_llong = &src_llong[num_procs]; for(j=0; j < num_procs; j++) { src_llong[j] = 16; dst_llong[j] = 0; } shmem_barrier_all(); if ( me != 0 ) { /* is 'src_*' accessible from PE0? should be. */ if (!shmem_addr_accessible(src_int,0)) { printf("PE-%d local src_int %p not accessible from PE-%d?\n", me, (void*)src_int, 0); exit(1); } if (!shmem_addr_accessible(src_float,0)) { printf("PE-%d local src_float %p not accessible from PE-%d?\n", me, (void*)src_float, 0); exit(1); } if (!shmem_addr_accessible(src_double,0)) { printf("PE-%d local src_double %p not accessible from PE-%d?\n", me, (void*)src_double, 0); exit(1); } if (!shmem_addr_accessible(src_long,0)) { printf("PE-%d local src_long %p not accessible from PE-%d?\n", me, (void*)src_long, 0); exit(1); } if (!shmem_addr_accessible(src_llong,0)) { printf("PE-%d local src_llong %p not accessible from PE-%d?\n", me, (void*)src_llong, 0); exit(1); } } shmem_barrier_all(); if ( me == 0 ) { shmem_quiet(); for(j=1; j < num_procs; j++) { dst_int[j] = shmem_int_swap(src_int+j,0,j); if (dst_int[j] != 4) { printf("PE-%d dst_int[%d] %d != 4?\n",me,j,dst_int[j]); exit(1); } } shmem_barrier_all(); /* verify remote data */ for(j=1; j < num_procs; j++) { itmp = shmem_int_g(src_int+j,j); if (itmp != 0) { printf("PE-0 int PE[%d] rem(%d) != 0?\n",j,itmp); exit(1); } /* swap back */ dst_int[j] = shmem_int_swap(src_int+j,dst_int[j],j); if (dst_int[j] != 0) { printf("PE-0 dst_int[%d] %d != 0?\n",j,dst_int[j]); exit(1); } itmp = shmem_int_g(src_int+j,j); if (itmp != 4) { printf("PE-0 PE[%d] rem %d != 4?\n",j,itmp); exit(1); } } for(j=1; j < num_procs; j++) { dst_float[j] = shmem_float_swap(src_float+j,0.0,j); if (dst_float[j] != 4.0) { printf("PE-0 dst_float[%d] %f != 4.0?\n",j,dst_float[j]); exit(1); } /* verify remote data */ ftmp = shmem_float_g(src_float+j,j); if (ftmp != 0.0) { printf("PE-0 float rem(%f) != 0.0?\n",ftmp); exit(1); } /* swap back */ dst_float[j] = shmem_float_swap(src_float+j,dst_float[j],j); if (dst_float[j] != 0.0) { printf("PE-0 dst_float[%d] %f != 0.0?\n",j,dst_float[j]); exit(1); } ftmp = shmem_float_g(src_float+j,j); if (ftmp != 4.0) { printf("PE-%d float rem(%f) != 4.0?\n",me,ftmp); exit(1); } } for(j=1; j < num_procs; j++) { dst_double[j] = shmem_double_swap(src_double+j,0.0,j); if (dst_double[j] != 8.0) { printf("PE-0 dst_double[%d] %f != 8.0?\n",j,dst_double[j]); exit(1); } /* verify remote data */ dtmp = shmem_double_g(src_double+j,j); if (dtmp != 0.0) { printf("PE-0 float rem(%f) != 0.0?\n",dtmp); exit(1); } dst_double[j] = shmem_double_swap(src_double+j,dst_double[j],j); if (dst_double[j] != 0.0) { printf("PE-0 dst_double[%d] %f != 0.0?\n",j,dst_double[j]); exit(1); } dtmp = shmem_double_g(src_double+j,j); if (dtmp != 8.0) { printf("PE-0 double rem(%f) != 8.0?\n",dtmp); exit(1); } } for(j=1; j < num_procs; j++) { dst_long[j] = shmem_long_swap(src_long+j,0,j); if (dst_long[j] != 8) { printf("PE-0 dst_long[%d] %ld != 8?\n",j,dst_long[j]); exit(1); } } shmem_barrier_all(); /* verify remote data */ for(j=1; j < num_procs; j++) { ltmp = shmem_long_g(src_long+j,j); if (ltmp != 0) { printf("PE-0 PE[%d]long rem(%ld) != 0?\n",j,ltmp); exit(1); } /* swap back */ dst_long[j] = shmem_long_swap(src_long+j,dst_long[j],j); if (dst_long[j] != 0) { printf("PE-%d dst_long[%d] %ld != 0?\n",me,j,dst_long[j]); exit(1); } ltmp = shmem_long_g(src_long+j,j); if (ltmp != 8) { printf("PE-%d long rem(%ld) != 8?\n",me,ltmp); exit(1); } } for(j=1; j < num_procs; j++) { dst_llong[j] = shmem_longlong_swap(src_llong+j,0,j); if (dst_llong[j] != 16) { printf("PE-%d dst_llong[%d] %lld != 16?\n",me,j,dst_llong[j]); exit(1); } } shmem_barrier_all(); /* verify remote data */ for(j=1; j < num_procs; j++) { lltmp = shmem_longlong_g(src_llong+j,j); if (lltmp != 0) { printf("PE-%d long long rem(%lld) != 0?\n",me,lltmp); exit(1); } /* swap back */ dst_llong[j] = shmem_longlong_swap(src_llong+j,dst_llong[j],j); if (dst_llong[j] != 0) { printf("PE-%d dst_llong[%d] %lld != 0?\n", me,j,dst_llong[j]); exit(1); } lltmp = shmem_longlong_g(src_llong+j,j); if (lltmp != 16) { printf("PE-%d longlong rem(%lld) != 16?\n",me,lltmp); exit(1); } } } else { shmem_int_wait_until(&src_int[me],SHMEM_CMP_EQ,0); shmem_barrier_all(); shmem_long_wait_until(&src_long[me],SHMEM_CMP_EQ,0); shmem_barrier_all(); shmem_longlong_wait_until(&src_llong[me],SHMEM_CMP_EQ,0); shmem_barrier_all(); } shmem_barrier_all(); shfree(src_int); shfree(src_float); shfree(src_double); shfree(src_long); shfree(src_llong); } if (Verbose) fprintf(stderr,"[%d] exit\n",_my_pe()); return 0; }
int main(int argc, char **argv) { int j; int my_pe,n_pes; int one; char value_char; short value_short; int value_int; long value_long; float value_float; double value_double; long long value_longlong; #ifdef HAVE_LONG_DOUBLE long double value_longdouble; #endif shmem_init(); my_pe = shmem_my_pe(); n_pes = shmem_n_pes(); one = 1; /* fail if trying to use odd number of processors */ if ( (n_pes % 2) != 0 ){ fprintf(stderr, "FAIL - test requires even number of PEs\n"); exit(1); } if(my_pe == 0) fprintf(stderr, "shmem_type_g(%s)\n", argv[0]); /* shmem_char_g test */ if(my_pe == 0) fprintf(stderr,"shmem_char_g\n"); if ( (my_pe % 2) == 0 ) value_char = (char) my_pe; else targ_char = (char) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_char = shmem_char_g(&targ_char,my_pe+1); if ( value_char != (char)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_char=%d my_pe+1=%d\n", my_pe,value_char,my_pe+1); } /* shmem_short_g test */ if(my_pe == 0) fprintf(stderr,"shmem_short_g\n"); if ( (my_pe % 2) == 0 ) value_short = (short) my_pe; else targ_short = (short) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_short = shmem_short_g(&targ_short,my_pe+1); if ( value_short != (short)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_short=%d my_pe+1=%d\n", my_pe,value_short,my_pe+1); } /* shmem_int_g test */ if(my_pe == 0) fprintf(stderr,"shmem_int_g\n"); if ( (my_pe % 2) == 0 ) value_int = (int) my_pe; else targ_int = (int) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_int = shmem_int_g(&targ_int,my_pe+1); if ( value_int != (int)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_int=%d my_pe+1=%d\n", my_pe,value_int,my_pe+1); } /* shmem_long_g test */ if(my_pe == 0) fprintf(stderr,"shmem_long_g\n"); if ( (my_pe % 2) == 0 ) value_long = (long) my_pe; else targ_long = (long) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_long = shmem_long_g(&targ_long,my_pe+1); if ( value_long != (long)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_long=%d my_pe+1=%d\n", my_pe,value_long,my_pe+1); } /* shmem_longlong_g test */ if(my_pe == 0) fprintf(stderr,"shmem_longlong_g\n"); if ( (my_pe % 2) == 0 ) value_longlong = (long long) my_pe; else targ_longlong = (long long) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_longlong = shmem_longlong_g(&targ_longlong,my_pe+1); if ( value_longlong != (long long)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_longlong=%d my_pe+1=%d\n", my_pe,value_longlong,my_pe+1); } /* shmem_float_g test */ if(my_pe == 0) fprintf(stderr,"shmem_float_g\n"); if ( (my_pe % 2) == 0 ) value_float = (float) my_pe; else targ_float = (float) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_float = shmem_float_g(&targ_float,my_pe+1); if ( value_float != (float)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_float=%10.2f my_pe+1=%d\n", my_pe,value_float,my_pe+1); } /* shmem_double_g test */ if(my_pe == 0) fprintf(stderr,"shmem_double_g\n"); if ( (my_pe % 2) == 0 ) value_double = (double) my_pe; else targ_double = (double) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_double = shmem_double_g(&targ_double,my_pe+1); if ( value_double != (double)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_double=%10.2f my_pe+1=%d\n", my_pe,value_double,my_pe+1); } /* shmem_longdouble_g test */ #ifdef HAVE_LONG_DOUBLE if(my_pe == 0) fprintf(stderr,"shmem_longdouble_g\n"); if ( (my_pe % 2) == 0 ) value_longdouble = (long double) my_pe; else targ_longdouble = (long double) my_pe; shmem_barrier_all(); if ( (my_pe % 2) == 0 ) { value_longdouble =shmem_longdouble_g(&targ_longdouble,my_pe+1); if ( value_longdouble != (long double)(my_pe+1) ) fprintf(stderr, "FAIL: PE [%d] value_longdouble=%10.2f my_pe+1=%d\n", my_pe,value_longdouble,my_pe+1); } #endif #ifdef NEEDS_FINALIZE shmem_finalize(); #endif return 0; }
int main(int argc, char* argv[]) { int me, num_pes, l, pe; int Verbose = 0; start_pes(0); me = _my_pe(); num_pes = _num_pes(); for (l = 0 ; l < loops ; ++l) { if ((src_int = shmalloc(sizeof(int))) == NULL) { printf("PE-%d int shmalloc() failed?\n", me); exit(1); } *src_int = 4; dst_int = itmp = 0; if ((src_long = shmalloc(sizeof(long))) == NULL) { printf("PE-%d long shmalloc() failed?\n", me); exit(1); } *src_long = 8; dst_long = ltmp = 0; if ((src_llong = shmalloc(sizeof(long long))) == NULL) { printf("PE-%d long long shmalloc() failed?\n", me); exit(1); } *src_llong = 16; dst_llong = lltmp = 0; //printf("PE-%d malloc()s done.\n",me); shmem_barrier_all(); if ( me == 0 ) { /* integer swap */ itmp = shmem_int_g(src_int,1); Vprintf("PE-0 Initial Conditions(int) local %d rem(%d)\n", dst_int,itmp); dst_int = shmem_int_cswap(src_int,*src_int,0,1); if (dst_int != 4) { printf("PE-%d dst_int %d != 4?\n",me,dst_int); exit(1); } /* verify remote data */ itmp = shmem_int_g(src_int,1); if (itmp != 0) { printf("PE-%d rem %d != 0?\n",me,itmp); exit(1); } Vprintf("PE-0 1st int_cswap done: local %d rem(%d)\n",dst_int,itmp); dst_int = shmem_int_cswap(src_int,0,dst_int,1); if (dst_int != 0) { printf("PE-%d dst_int %d != 0?\n",me,dst_int); exit(1); } /* verify remote data */ itmp = shmem_int_g(src_int,1); if (itmp != 4) { printf("PE-%d rem %d != 4?\n",me,itmp); exit(1); } Vprintf("PE-0 2nd int_swap done: local %d rem(%d)\n",dst_int,itmp); /* cswap() should not swap as cond(0) != remote(4) */ dst_int = shmem_int_cswap(src_int,0,0,1); if (dst_int != 4) { printf("PE-%d int no-swap returned dst_int %d != 4?\n", me,dst_int); exit(1); } /* verify previous cswap() did not swap */ itmp = shmem_int_g(src_int,1); if (itmp != 4) { printf("PE-%d failed cond int_cswap() swapped? rem(%d) != 4?\n", me,itmp); exit(1); } /* long swap */ ltmp = shmem_long_g(src_long,1); Vprintf("PE-0 Initial Conditions(long) local %ld rem(%ld)\n", dst_long,ltmp); dst_long = shmem_long_cswap(src_long,*src_long,0,1); if (dst_long != 8) { printf("PE-%d dst_long %ld != 8?\n",me,dst_long); exit(1); } /* verify remote data */ ltmp = shmem_long_g(src_long,1); if (ltmp != 0) { printf("PE-%d long rem(%ld) != 0?\n",me,ltmp); exit(1); } Vprintf("PE-0 1st long_cswap done: local %ld rem(%ld)\n", dst_long,ltmp); dst_long = shmem_long_cswap(src_long,0,dst_long,1); if (dst_long != 0) { printf("PE-%d dst_long %ld != 0?\n",me,dst_long); exit(1); } /* verify remote data */ ltmp = shmem_long_g(src_long,1); if (ltmp != 8) { printf("PE-%d long rem(%ld) != 8?\n",me,ltmp); exit(1); } Vprintf("PE-0 2nd long_swap done: local %ld rem(%ld)\n", dst_long,ltmp); /* cswap() should not swap as cond(0) != remote(8) */ dst_long = shmem_long_cswap(src_long,0,0,1); if (dst_long != 8) { printf("PE-%d long no-swap returned dst_long %ld != 8?\n", me,dst_long); exit(1); } /* verify previous cswap() did not swap */ ltmp = shmem_long_g(src_long,1); if (ltmp != 8) { printf("PE-%d failed cond long_cswap() swapped? rem(%ld) != 8?\n", me,ltmp); exit(1); } /* long long swap */ lltmp = shmem_longlong_g(src_llong,1); Vprintf("PE-0 Initial Conditions(long long) local %lld rem(%lld)\n", dst_llong,lltmp); dst_llong = shmem_longlong_cswap(src_llong,*src_llong,0,1); if (dst_llong != 16) { printf("PE-%d dst_llong %lld != 16?\n",me,dst_llong); exit(1); } /* verify remote data */ lltmp = shmem_longlong_g(src_llong,1); if (lltmp != 0) { printf("PE-%d longlong rem(%lld) != 0?\n",me,lltmp); exit(1); } Vprintf("PE-0 1st longlong_cswap done: local %lld rem(%lld)\n", dst_llong, lltmp); dst_llong = shmem_longlong_cswap(src_llong,0,dst_llong,1); if (dst_llong != 0) { printf("PE-%d dst_llong %lld != 0?\n",me,dst_llong); exit(1); } /* verify remote data */ lltmp = shmem_longlong_g(src_llong,1); if (lltmp != 16) { printf("PE-%d long long rem(%lld) != 16?\n",me,lltmp); exit(1); } Vprintf("PE-0 2nd longlong_swap done: local %lld rem(%lld)\n", dst_llong,lltmp); /* cswap() should not swap as cond(0) != remote(8) */ dst_llong = shmem_longlong_cswap(src_llong,0,0,1); if (dst_llong != 16) { printf("PE-%d longlong no-swap returned dst_llong %lld != 16?\n", me,dst_llong); exit(1); } /* verify previous cswap() did not swap */ lltmp = shmem_longlong_g(src_llong,1); if (lltmp != 16) { printf("PE-0 failed cond longlong_cswap() swapped? rem(%lld) != 16?\n", lltmp); exit(1); } } else { if (!shmem_addr_accessible(src_int,0)) { printf("PE-%d local src_int %p not accessible from PE-%d?\n", me, (void*)src_int, 0); exit(1); } if (!shmem_addr_accessible(src_long,0)) { printf("PE-%d local src_long %p not accessible from PE-%d?\n", me, (void*)src_long, 0); exit(1); } if (!shmem_addr_accessible(src_llong,0)) { printf("PE-%d local src_llong %p not accessible from PE-%d?\n", me, (void*)src_llong, 0); exit(1); } } shmem_barrier_all(); /* shmem_*fadd() exercise */ if (me == 0) { itmp = 0; ltmp = 0; lltmp = 0; *src_int = 0; *src_long = 0; *src_llong = 0; } shmem_barrier_all(); (void)shmem_int_fadd( &itmp, me+1, 0 ); (void)shmem_long_fadd( <mp, me+1, 0 ); (void)shmem_longlong_fadd( &lltmp, me+1, 0 ); shmem_barrier_all(); if (me == 0) { int tot; for(pe=0,tot=0; pe < num_pes; pe++) tot += pe+1; if ( itmp != tot ) printf("fadd() total %d != expected %d?\n",itmp,tot); if ( ltmp != (long)tot ) printf("fadd() total %ld != expected %d?\n",ltmp,tot); if ( lltmp != (long long)tot ) printf("fadd() total %lld != expected %d?\n",lltmp,tot); } shmem_barrier_all(); (void)shmem_int_finc(src_int,0); (void)shmem_long_finc(src_long,0); (void)shmem_longlong_finc(src_llong,0); shmem_barrier_all(); if (me == 0) { int tot = num_pes; if ( *src_int != tot ) printf("finc() total %d != expected %d?\n",*src_int,tot); if ( *src_long != (long)tot ) printf("finc() total %ld != expected %d?\n",*src_long,tot); if ( *src_llong != (long long)tot ) printf("finc() total %lld != expected %d?\n",*src_llong,tot); } shmem_barrier_all(); shfree(src_int); shfree(src_long); shfree(src_llong); } if (Verbose) fprintf(stderr,"[%d] exit\n",_my_pe()); return 0; }