void* roundrobin(void* tparam) { ptrdiff_t tid = (ptrdiff_t)tparam; int offset = tid*N_ELEMS; /* fprintf(stderr,"Starting thread %lu with offset %d\n",tid,offset); */ int nextpe = (shmem_my_pe()+1)%shmem_n_pes(); int prevpe = (shmem_my_pe()-1 + shmem_n_pes())%shmem_n_pes(); shmem_long_put(target+offset, source+offset, N_ELEMS, nextpe); /* fprintf(stderr,"Thread %lu done first put\n",tid); */ pthread_barrier_wait(&fencebar); if(tid == 0) shmem_barrier_all(); pthread_barrier_wait(&fencebar); shmem_long_get(source+offset, target+offset, N_ELEMS, prevpe); /* fprintf(stderr,"Thread %lu done first get\n",tid); */ pthread_barrier_wait(&fencebar); if(tid == 0) shmem_barrier_all(); pthread_barrier_wait(&fencebar); shmem_long_get(target+offset, source+offset, N_ELEMS, nextpe); /* fprintf(stderr,"Thread %lu done second get\n",tid); */ pthread_barrier_wait(&fencebar); if(tid == 0) shmem_barrier_all(); pthread_barrier_wait(&fencebar); /* fprintf(stderr,"Done thread %lu\n",tid); */ return 0; }
/**************************************************************************** * Place for Test Item functions ***************************************************************************/ static int test_item1(void) { int rc = TC_PASS; long* shmem_addr = NULL; int my_proc = 0; int root = 0; int i = 0, j = 0; long original_value, prev_value, new_value, check_value; long *lock_value = 0; my_proc = _my_pe(); shmem_addr = shmalloc(sizeof(*shmem_addr)); lock_value = shmalloc(sizeof(*lock_value)); *lock_value = 0; shmem_barrier_all(); if (my_proc < (int)sizeof(long)) { for (i = 0; ((i < COUNT_VALUE) && (rc == TC_PASS)); i++) { shmem_long_get(&original_value, shmem_addr, 1, root); shmem_set_lock(lock_value); new_value = my_proc; prev_value = shmem_long_cswap(shmem_addr, original_value, new_value, root); for (j = 0; j < CHECK_COUNT_VALUE; j++) { shmem_long_get(&check_value, shmem_addr, 1, root); if (check_value != new_value && check_value != prev_value) { rc = TC_FAIL; break; } } shmem_clear_lock(lock_value); } } if (shmem_addr) { shfree(shmem_addr); } shfree(lock_value); return rc; }
int main (int argc, char **argv) { long dest; long src; int me, npes; shmem_init (); me = shmem_my_pe (); npes = shmem_n_pes (); src = 42; shmem_barrier_all (); if (me == 0) { shmem_long_get (&dest, &src, 1, 1); } shmem_barrier_all (); shmem_finalize (); return 0; }
int main(int argc, char* argv[]) { int i; shmem_init(); if (shmem_n_pes() == 1) { printf("%s: Requires number of PEs > 1\n", argv[0]); shmem_finalize(); return 0; } if (shmem_my_pe() == 0) { memset(target, 0, sizeof(target)); /* put 10 elements into target on PE 1 */ shmem_long_get(target, source, 10, 1); } shmem_barrier_all(); /* sync sender and receiver */ if (shmem_my_pe() == 0) { if (0 != memcmp(source, target, sizeof(long) * 10)) { fprintf(stderr,"[%d] Src & Target mismatch?\n",shmem_my_pe()); for (i = 0 ; i < 10 ; ++i) { printf("%ld,%ld ", source[i], target[i]); } printf("\n"); shmem_global_exit(1); } } shmem_finalize(); return 0; }
void FORTRANIFY (shmem_get) (long *target, const long *source, int *size, int *pe) { shmem_long_get (target, source, *size, *pe); }
int main(int argc, char **argv) { int i,j; int nextpe; int me, npes; int success1,success2,success3, success4, success5, success6, success7, success8; short dest1[N]; int dest2[N]; long dest3[N]; long double dest4[N]; long long dest5[N]; double dest6[N]; float dest7[N]; char *dest8; short dest9; int dest10; long dest11; double dest12; float dest13; short *src1; int *src2; long *src3; long double *src4; long long *src5; double *src6; float *src7; char *src8; short *src9; int *src10; long *src11; double *src12; float *src13; start_pes(0); me = _my_pe(); npes = _num_pes(); if(npes>1){ success1 =0; success2 =0; success3 =0; success4 =0; success5 =0; success6 =0; success7 =0; success8 =0; dest8 = (char *)malloc(N*sizeof(char)); for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; dest5[i] = -9; dest6[i] = -9; dest7[i] = -9.0; dest8[i] = -9; } dest9 = -9; dest10 = -9; dest11 = -9; dest12 = -9; dest13 = -9; src1 = (short *)shmalloc( N * sizeof(*src1) ); src2 = (int *)shmalloc( N * sizeof(*src2) ); src3 = (long *)shmalloc( N * sizeof(*src3) ); src4 = (long double *)shmalloc( N * sizeof(*src4) ); src5 = (long long*)shmalloc( N * sizeof(*src5) ); src6 = (double *)shmalloc( N * sizeof(*src6) ); src7 = (float *)shmalloc( N * sizeof(*src7) ); src8 = (char *)shmalloc( 4 * sizeof(*src8) ); src9 = (short *)shmalloc( sizeof(*src9) ); src10 = (int *)shmalloc( sizeof(*src10) ); src11 = (long *)shmalloc( sizeof(*src11) ); src12 = (double *)shmalloc( sizeof(*src12) ); src13 = (float *)shmalloc( sizeof(*src13) ); for (i = 0; i < N; i += 1) { src1[i] = (short)me; src2[i] = me; src3[i] = (long)me; src4[i] = (long double)me; src5[i] = (long long)me; src6[i] = (double)me; src7[i] = (float)me; src8[i] = (char)me; } *src9 = (short)me; *src10 = me; *src11 = (long)me; *src12 = (double)me; *src13 = (float)me; nextpe = (me + 1) % npes; /*Testing shmem_short_get, shmem_short_get, shmem_int_get, shmem_long_get, shmem_longdouble_get, shmem_longlong_get, shmem_double_get, shmem_float_get, shmem_getmem*/ shmem_barrier_all(); shmem_short_get(dest1, src1, N, nextpe); shmem_int_get(dest2, src2, N, nextpe); shmem_long_get(dest3, src3, N, nextpe); shmem_longdouble_get(dest4, src4, N, nextpe); shmem_longlong_get(dest5, src5, N, nextpe); shmem_double_get(dest6, src6, N, nextpe); shmem_float_get(dest7, src7, N, nextpe); shmem_getmem(dest8, src8, N*sizeof(char), nextpe); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N; i += 1) { if(dest1[i] != ( 1)){ success1=1; } if(dest2[i] != ( 1)){ success2=1; } if(dest3[i] != ( 1)){ success3=1; } if(dest4[i] != ( 1)){ success4=1; } if(dest5[i] != ( 1)){ success5=1; } if(dest6[i] != ( 1)){ success6=1; } if(dest7[i] != ( 1)){ success7=1; } if(dest8[i] != ( 1)){ success8=1; } } if(success1==0) printf("Test shmem_short_get: Passed\n"); else printf("Test shmem_short_get: Failed\n"); if(success2==0) printf("Test shmem_int_get: Passed\n"); else printf("Test shmem_int_get: Failed\n"); if(success3==0) printf("Test shmem_long_get: Passed\n"); else printf("Test shmem_long_get: Failed\n"); if(success4==0) printf("Test shmem_longdouble_get: Passed\n"); else printf("Test shmem_longdouble_get: Failed\n"); if(success5==0) printf("Test shmem_longlong_get: Passed\n"); else printf("Test shmem_longlong_get: Failed\n"); if(success6==0) printf("Test shmem_double_get: Passed\n"); else printf("Test shmem_double_get: Failed\n"); if(success7==0) printf("Test shmem_float_get: Passed\n"); else printf("Test shmem_float_get: Failed\n"); if(success8==0) printf("Test shmem_getmem: Passed\n"); else printf("Test shmem_getmem: Failed\n"); } shmem_barrier_all(); /*Testing shmem_get32, shmem_get64, shmem_get128 */ if(sizeof(int)==4){ for (i = 0; i < N; i += 1) { dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; } success2 = 0; success3 = 0; success4 = 0; shmem_barrier_all(); shmem_get32(dest2, src2, N, nextpe); shmem_get64(dest3, src3, N, nextpe); shmem_get128(dest4, src4, N, nextpe); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N; i += 1) { if(dest2[i] != ( 1)){ success2=1; } if(dest3[i] != ( 1)){ success3=1; } if(dest4[i] != ( 1)){ success4=1; } } if(success2==0) printf("Test shmem_get32: Passed\n"); else printf("Test shmem_get32: Failed\n"); if(success3==0) printf("Test shmem_get64: Passed\n"); else printf("Test shmem_get64: Failed\n"); if(success4==0) printf("Test shmem_get128: Passed\n"); else printf("Test shmem_get128: Failed\n"); } } else if(sizeof(int)==8){ for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; } success1 = 0; success2 = 0; success3 = 0; shmem_barrier_all(); shmem_get32(dest1, src1, N, nextpe); shmem_get64(dest2, src2, N, nextpe); shmem_get128(dest3, src3, N, nextpe); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N; i += 1) { if(dest1[i] != ( 1)){ success1=1; } if(dest2[i] != ( 1)){ success2=1; } if(dest3[i] != ( 1)){ success3=1; } } if(success1==0) printf("Test shmem_get32: Passed\n"); else printf("Test shmem_get32: Failed\n"); if(success2==0) printf("Test shmem_get64: Passed\n"); else printf("Test shmem_get64: Failed\n"); if(success3==0) printf("Test shmem_get128: Passed\n"); else printf("Test shmem_get128: Failed\n"); } } /* Testing shmem_iget32, shmem_iget64, shmem_iget128 */ shmem_barrier_all(); if(sizeof(int)==4){ for (i = 0; i < N; i += 1) { dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; } success2 = 0; success3 = 0; success4 = 0; shmem_barrier_all(); shmem_iget32(dest2, src2, 1, 2, N/2, npes-1); shmem_iget64(dest3, src3, 1, 2, N/2, npes-1); shmem_iget128(dest4, src4, 1, 2, N/2, npes-1); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N/2; i += 1) { if(dest2[i] != (npes-1)){ success2=1; } if(dest3[i] != (npes-1)){ success3=1; } if(dest4[i] != (npes-1)){ success4=1; } } if(success2==0) printf("Test shmem_iget32: Passed\n"); else printf("Test shmem_iget32: Failed\n"); if(success3==0) printf("Test shmem_iget64: Passed\n"); else printf("Test shmem_iget64: Failed\n"); if(success4==0) printf("Test shmem_iget128: Passed\n"); else printf("Test shmem_iget128: Failed\n"); } } else if(sizeof(int)==8){ for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; } success1 = 0; success2 = 0; success3 = 0; shmem_barrier_all(); shmem_iget32(dest1, src1, 1, 2, N/2, npes-1); shmem_iget64(dest2, src2, 1, 2, N/2, npes-1); shmem_iget128(dest3, src3, 1, 2, N/2, npes-1); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N/2; i += 1) { if(dest1[i] != (npes-1)){ success1=1; } if(dest2[i] != (npes-1)){ success2=1; } if(dest3[i] != (npes-1)){ success3=1; } } if(success1==0) printf("Test shmem_iget32: Passed\n"); else printf("Test shmem_iget32: Failed\n"); if(success2==0) printf("Test shmem_iget64: Passed\n"); else printf("Test shmem_iget64: Failed\n"); if(success3==0) printf("Test shmem_iget128: Passed\n"); else printf("Test shmem_iget128: Failed\n"); } } /*Testing shmem_short_iget, shmem_int_iget, shmem_long_iget, shmem_double_iget, shmem_float_iget */ for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; dest6[i] = -9; dest7[i] = -9; } success1 = 0; success2 = 0; success3 = 0; success6 = 0; success7 = 0; shmem_barrier_all(); shmem_short_iget(dest1, src1, 1, 2, N/2, npes-1); shmem_int_iget(dest2, src2, 1, 2, N/2, npes-1); shmem_long_iget(dest3, src3, 1, 2, N/2, npes-1); shmem_double_iget(dest6, src6, 1, 2, N/2, npes-1); shmem_float_iget(dest7, src7, 1, 2, N/2, npes-1); shmem_barrier_all(); if(me == 0){ for (i = 0; i < N/2; i += 1) { if(dest1[i] != (npes-1)){ success1=1; } if(dest2[i] != (npes-1)){ success2=1; } if(dest3[i] != (npes-1)){ success3=1; } if(dest6[i] != (npes-1)){ success6=1; } if(dest7[i] != (npes-1)){ success7=1; } } if(success1==0) printf("Test shmem_short_iget: Passed\n"); else printf("Test shmem_short_iget: Failed\n"); if(success2==0) printf("Test shmem_int_iget: Passed\n"); else printf("Test shmem_int_iget: Failed\n"); if(success3==0) printf("Test shmem_long_iget: Passed\n"); else printf("Test shmem_long_iget: Failed\n"); if(success6==0) printf("Test shmem_double_iget: Passed\n"); else printf("Test shmem_double_iget: Failed\n"); if(success7==0) printf("Test shmem_float_iget: Passed\n"); else printf("Test shmem_float_iget: Failed\n"); } /* Testing shmem_double_g, shmem_float_g, shmem_int_g, shmem_long_g, shmem_short_g */ shmem_barrier_all(); dest9 = shmem_short_g(src9, nextpe); dest10 = shmem_int_g(src10, nextpe); dest11 = shmem_long_g(src11, nextpe); dest12 = shmem_double_g(src12, nextpe); dest13 = shmem_float_g(src13, nextpe); shmem_barrier_all(); if(me == 0){ if(dest9 == 1) printf("Test shmem_short_g: Passed\n"); else printf("Test shmem_short_g: Failed\n"); if(dest10 == 1) printf("Test shmem_int_g: Passed\n"); else printf("Test shmem_int_g: Failed\n"); if(dest11 == 1) printf("Test shmem_long_g: Passed\n"); else printf("Test shmem_long_g: Failed\n"); if(dest12 == 1) printf("Test shmem_double_g: Passed\n"); else printf("Test shmem_double_g: Failed\n"); if(dest13 == 1) printf("Test shmem_float_g: Passed\n"); else printf("Test shmem_float_g: Failed\n"); } shmem_barrier_all(); shfree(src1); shfree(src2); shfree(src3); shfree(src4); shfree(src5); shfree(src6); shfree(src7); shfree(src8); } else{ printf("Number of PEs must be > 1 to test shmem get, test skipped\n"); } return 0; }
int main(int argc, char **argv) { int i,j; long modj,oldj,oldxmodj,newcount; int my_pe,n_pes; size_t max_elements_bytes; static long *x; shmem_init(); my_pe = shmem_my_pe(); n_pes = shmem_n_pes(); #ifdef HAVE_SET_CACHE_INV shmem_set_cache_inv(); #endif /* fail if trying to use only one processor */ if ( n_pes <= 1 ){ fprintf(stderr, "FAIL - test requires at least two PEs\n"); exit(1); } if(my_pe == 0) fprintf(stderr, "shmem_lock_set_clear(%s) n_pes=%d\n", argv[0],n_pes); /* shmalloc x on all pes (only use the one on PE 0) */ max_elements_bytes = (size_t) (sizeof(long) * n_pes); x = shmem_malloc( max_elements_bytes ); for(i=0; i<n_pes; i++) x[i] = 0; count = 0; shmem_barrier_all(); for(i=0; i<ITER; i++) { if (my_pe != 0) { /* emulate oldj = shmem_long_finc(&count, 0); */ shmem_set_lock(&lock); shmem_long_get(&oldj,&count,1,0); /* get oldj from PE 0's count */ newcount = oldj+1; shmem_long_put(&count,&newcount,1,0); /* update count on PE 0 */ shmem_quiet; /* insure that write completes */ shmem_clear_lock(&lock); /* end of emulation */ modj = (oldj % (n_pes-1)); /* PE 0 is just the counter/checker */ /* increment value in x[modj] */ oldxmodj = shmem_long_finc(&x[modj], 0); /* printf("PE=%d,oldj=%ld,modj=%ld,oldxmodj=%ld\n",my_pe,oldj,modj,oldxmodj); */ } } shmem_barrier_all(); if (my_pe == 0) { /* check x[j] array on PE 0 */ for(j=1 ; j<n_pes; j++) { if (x[j-1] != (long) ITER) fprintf(stderr, "FAIL PE %d of %d: x[%d] = %ld expected = %ld\n", my_pe, n_pes, j-1, x[j-1], (long) ITER); } } shmem_barrier_all(); #ifdef NEEDS_FINALIZE shmem_finalize(); #endif return 0; }
void shmemi_broadcast32_tree (void *target, const void *source, size_t nlong, int PE_root, int PE_start, int logPE_stride, int PE_size, long *pSync) { int child_l, child_r, parent; const int step = 1 << logPE_stride; int my_pe = GET_STATE (mype); int *target_ptr, *source_ptr; int no_children; long is_ready, lchild_ready, rchild_ready; is_ready = 1; lchild_ready = -1; rchild_ready = -1; shmem_long_wait_until (&pSync[0], SHMEM_CMP_EQ, SHMEM_SYNC_VALUE); shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, SHMEM_SYNC_VALUE); pSync[0] = 0; pSync[1] = 0; target_ptr = (int *) target; source_ptr = (int *) source; set_2tree (PE_start, step, PE_size, &parent, &child_l, &child_r, my_pe); no_children = 0; build_tree (PE_start, step, PE_root, PE_size, &parent, &child_l, &child_r, my_pe); shmemi_trace (SHMEM_LOG_BROADCAST, "before broadcast, R_child = %d L_child = %d", child_r, child_l); /* The actual broadcast */ if (PE_size > 1) { if (my_pe == (PE_start + step * PE_root)) { pSync[0] = SHMEM_SYNC_VALUE; if (child_l != -1) { shmem_long_get (&lchild_ready, (const long *) &pSync[0], 1, child_l); while (lchild_ready != 0) shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); shmem_int_put (target_ptr, source_ptr, nlong, child_l); shmem_fence (); shmem_long_put (&pSync[0], &is_ready, 1, child_l); no_children = 1; } if (child_r != -1) { shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); while (rchild_ready != 0) shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); shmem_int_put (target_ptr, source_ptr, nlong, child_r); shmem_fence (); shmem_long_put (&pSync[0], &is_ready, 1, child_r); no_children = 2; } shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, (long) no_children); pSync[1] = SHMEM_SYNC_VALUE; } else { shmem_long_wait_until (&pSync[0], SHMEM_CMP_EQ, is_ready); pSync[0] = SHMEM_SYNC_VALUE; shmemi_trace (SHMEM_LOG_BROADCAST, "inside else"); memcpy (source_ptr, target_ptr, nlong * sizeof (int)); if (child_l != -1) { shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); while (lchild_ready != 0) shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); shmem_int_put (target_ptr, source_ptr, nlong, child_l); shmem_fence (); shmem_long_put (&pSync[0], &is_ready, 1, child_l); no_children = 1; } if (child_r != -1) { shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); while (rchild_ready != 0) shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); shmem_int_put (target_ptr, source_ptr, nlong, child_r); shmem_fence (); shmem_long_put (&pSync[0], &is_ready, 1, child_r); no_children = 2; } pSync[0] = SHMEM_SYNC_VALUE; if (no_children == 0) { pSync[1] = SHMEM_SYNC_VALUE; /* TO DO: Is check for parents pSync required? */ shmem_long_inc (&pSync[1], parent); } else { shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, (long) no_children); pSync[1] = SHMEM_SYNC_VALUE; /* printf("PE %d incrementing child count on PE %d\n",my_pe,parent); */ shmem_long_inc (&pSync[1], parent); } } shmemi_trace (SHMEM_LOG_BROADCAST, "at the end of bcast32"); /* shmem_barrier(PE_start, logPE_stride, PE_size, pSync); */ } }
void shmemi_barrier_tree (int PE_start, int logPE_stride, int PE_size, long *pSync) { int child_l, child_r, parent; const int step = 1 << logPE_stride; int my_pe = GET_STATE (mype); int no_children; long is_ready, lchild_ready, rchild_ready; is_ready = 1; lchild_ready = -1; rchild_ready = -1; shmem_long_wait_until (&pSync[0], SHMEM_CMP_EQ, SHMEM_SYNC_VALUE); shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, SHMEM_SYNC_VALUE); /* printf("Tree barrier\n"); */ set_2tree (PE_start, step, PE_size, &parent, &child_l, &child_r, my_pe); no_children = 0; shmemi_trace (SHMEM_LOG_BARRIER, "before barrier, R_child = %d L_child = %d", child_r, child_l); /* The actual barrier */ if (PE_size > 1) { pSync[0] = 0; pSync[1] = 0; if (my_pe == PE_start) { pSync[0] = SHMEM_SYNC_VALUE; if (child_l != -1) { shmem_long_get (&lchild_ready, (const long *) &pSync[0], 1, child_l); while (lchild_ready != 0) shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); shmem_long_put (&pSync[0], &is_ready, 1, child_l); no_children = 1; } if (child_r != -1) { shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); while (rchild_ready != 0) shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); shmem_long_put (&pSync[0], &is_ready, 1, child_r); no_children = 2; } shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, (long) no_children); pSync[1] = SHMEM_SYNC_VALUE; } else { shmem_long_wait_until (&pSync[0], SHMEM_CMP_EQ, is_ready); shmemi_trace (SHMEM_LOG_BARRIER, "inside else"); if (child_l != -1) { shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); while (lchild_ready != 0) shmem_long_get (&lchild_ready, &pSync[0], 1, child_l); shmem_long_put (&pSync[0], &is_ready, 1, child_l); no_children = 1; } if (child_r != -1) { shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); while (rchild_ready != 0) shmem_long_get (&rchild_ready, &pSync[0], 1, child_r); shmem_long_put (&pSync[0], &is_ready, 1, child_r); no_children = 2; } pSync[0] = SHMEM_SYNC_VALUE; if (no_children == 0) { pSync[1] = SHMEM_SYNC_VALUE; shmem_long_inc (&pSync[1], parent); } else { shmem_long_wait_until (&pSync[1], SHMEM_CMP_EQ, (long) no_children); pSync[1] = SHMEM_SYNC_VALUE; shmem_long_inc (&pSync[1], parent); } } shmemi_trace (SHMEM_LOG_BARRIER, "at the end of barrier"); } }
int main (int argc, char **argv) { int i; int nextpe; int me, npes; int success1, success2, success3, success4, success5, success6, success7, success8; short dest1[N]; int dest2[N]; long dest3[N]; long double dest4[N]; long long dest5[N]; double dest6[N]; float dest7[N]; char *dest8; short dest9; int dest10; long dest11; double dest12; float dest13; int fail_count = 0; shmem_init (); me = shmem_my_pe (); npes = shmem_n_pes (); if (npes > 1) { success1 = 0; success2 = 0; success3 = 0; success4 = 0; success5 = 0; success6 = 0; success7 = 0; success8 = 0; dest8 = (char *) malloc (N * sizeof (char)); for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; dest5[i] = -9; dest6[i] = -9; dest7[i] = -9.0; dest8[i] = -9; } dest9 = -9; dest10 = -9; dest11 = -9; dest12 = -9; dest13 = -9; for (i = 0; i < N; i += 1) { src1[i] = (short) me; src2[i] = me; src3[i] = (long) me; src4[i] = (long double) me; src5[i] = (long long) me; src6[i] = (double) me; src7[i] = (float) me; src8[i] = (char) me; } src9 = (short) me; src10 = me; src11 = (long) me; src12 = (double) me; src13 = (float) me; nextpe = (me + 1) % npes; /* Testing shmem_short_get, shmem_short_get, shmem_int_get, shmem_long_get, shmem_longdouble_get, shmem_longlong_get, shmem_double_get, shmem_float_get, shmem_getmem */ shmem_barrier_all (); shmem_short_get (dest1, src1, N, nextpe); shmem_int_get (dest2, src2, N, nextpe); shmem_long_get (dest3, src3, N, nextpe); shmem_longdouble_get (dest4, src4, N, nextpe); shmem_longlong_get (dest5, src5, N, nextpe); shmem_double_get (dest6, src6, N, nextpe); shmem_float_get (dest7, src7, N, nextpe); shmem_getmem (dest8, src8, N * sizeof (char), nextpe); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N; i += 1) { if (dest1[i] != (1)) { success1 = 1; } if (dest2[i] != (1)) { success2 = 1; } if (dest3[i] != (1)) { success3 = 1; } if (dest4[i] != (1)) { success4 = 1; } if (dest5[i] != (1)) { success5 = 1; } if (dest6[i] != (1)) { success6 = 1; } if (dest7[i] != (1)) { success7 = 1; } if (dest8[i] != (1)) { success8 = 1; } } if (success1 == 0) printf ("Test shmem_short_get: Passed\n"); else { printf ("Test shmem_short_get: Failed\n"); fail_count++; } if (success2 == 0) printf ("Test shmem_int_get: Passed\n"); else { printf ("Test shmem_int_get: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_long_get: Passed\n"); else { printf ("Test shmem_long_get: Failed\n"); fail_count++; } if (success4 == 0) printf ("Test shmem_longdouble_get: Passed\n"); else { printf ("Test shmem_longdouble_get: Failed\n"); fail_count++; } if (success5 == 0) printf ("Test shmem_longlong_get: Passed\n"); else { printf ("Test shmem_longlong_get: Failed\n"); fail_count++; } if (success6 == 0) printf ("Test shmem_double_get: Passed\n"); else { printf ("Test shmem_double_get: Failed\n"); fail_count++; } if (success7 == 0) printf ("Test shmem_float_get: Passed\n"); else { printf ("Test shmem_float_get: Failed\n"); fail_count++; } if (success8 == 0) printf ("Test shmem_getmem: Passed\n"); else { printf ("Test shmem_getmem: Failed\n"); fail_count++; } } shmem_barrier_all (); /* Testing shmem_get32, shmem_get64, shmem_get128 */ if (sizeof (int) == 4) { for (i = 0; i < N; i += 1) { dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; } success2 = 0; success3 = 0; success4 = 0; shmem_barrier_all (); shmem_get32 (dest2, src2, N, nextpe); shmem_get64 (dest3, src3, N, nextpe); shmem_get128 (dest4, src4, N, nextpe); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N; i += 1) { if (dest2[i] != (1)) { success2 = 1; } if (dest3[i] != (1)) { success3 = 1; } if (dest4[i] != (1)) { success4 = 1; } } if (success2 == 0) printf ("Test shmem_get32: Passed\n"); else { printf ("Test shmem_get32: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_get64: Passed\n"); else { printf ("Test shmem_get64: Failed\n"); fail_count++; } if (success4 == 0) printf ("Test shmem_get128: Passed\n"); else { printf ("Test shmem_get128: Failed\n"); fail_count++; } } } else if (sizeof (int) == 8) { for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; } success1 = 0; success2 = 0; success3 = 0; shmem_barrier_all (); shmem_get32 (dest1, src1, N, nextpe); shmem_get64 (dest2, src2, N, nextpe); shmem_get128 (dest3, src3, N, nextpe); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N; i += 1) { if (dest1[i] != (1)) { success1 = 1; } if (dest2[i] != (1)) { success2 = 1; } if (dest3[i] != (1)) { success3 = 1; } } if (success1 == 0) printf ("Test shmem_get32: Passed\n"); else { printf ("Test shmem_get32: Failed\n"); fail_count++; } if (success2 == 0) printf ("Test shmem_get64: Passed\n"); else { printf ("Test shmem_get64: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_get128: Passed\n"); else { printf ("Test shmem_get128: Failed\n"); fail_count++; } } } /* Testing shmem_iget32, shmem_iget64, shmem_iget128 */ shmem_barrier_all (); if (sizeof (int) == 4) { for (i = 0; i < N; i += 1) { dest2[i] = -9; dest3[i] = -9; dest4[i] = -9; } success2 = 0; success3 = 0; success4 = 0; shmem_barrier_all (); shmem_iget32 (dest2, src2, 1, 2, N / 2, npes - 1); shmem_iget64 (dest3, src3, 1, 2, N / 2, npes - 1); shmem_iget128 (dest4, src4, 1, 2, N / 2, npes - 1); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N / 2; i += 1) { if (dest2[i] != (npes - 1)) { success2 = 1; } if (dest3[i] != (npes - 1)) { success3 = 1; } if (dest4[i] != (npes - 1)) { success4 = 1; } } if (success2 == 0) printf ("Test shmem_iget32: Passed\n"); else { printf ("Test shmem_iget32: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_iget64: Passed\n"); else { printf ("Test shmem_iget64: Failed\n"); fail_count++; } if (success4 == 0) printf ("Test shmem_iget128: Passed\n"); else { printf ("Test shmem_iget128: Failed\n"); fail_count++; } } } else if (sizeof (int) == 8) { for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; } success1 = 0; success2 = 0; success3 = 0; shmem_barrier_all (); shmem_iget32 (dest1, src1, 1, 2, N / 2, npes - 1); shmem_iget64 (dest2, src2, 1, 2, N / 2, npes - 1); shmem_iget128 (dest3, src3, 1, 2, N / 2, npes - 1); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N / 2; i += 1) { if (dest1[i] != (npes - 1)) { success1 = 1; } if (dest2[i] != (npes - 1)) { success2 = 1; } if (dest3[i] != (npes - 1)) { success3 = 1; } } if (success1 == 0) printf ("Test shmem_iget32: Passed\n"); else { printf ("Test shmem_iget32: Failed\n"); fail_count++; } if (success2 == 0) printf ("Test shmem_iget64: Passed\n"); else { printf ("Test shmem_iget64: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_iget128: Passed\n"); else { printf ("Test shmem_iget128: Failed\n"); fail_count++; } } } /* Testing shmem_short_iget, shmem_int_iget, shmem_long_iget, shmem_double_iget, shmem_float_iget */ for (i = 0; i < N; i += 1) { dest1[i] = -9; dest2[i] = -9; dest3[i] = -9; dest6[i] = -9; dest7[i] = -9; } success1 = 0; success2 = 0; success3 = 0; success6 = 0; success7 = 0; shmem_barrier_all (); shmem_short_iget (dest1, src1, 1, 2, N / 2, npes - 1); shmem_int_iget (dest2, src2, 1, 2, N / 2, npes - 1); shmem_long_iget (dest3, src3, 1, 2, N / 2, npes - 1); shmem_double_iget (dest6, src6, 1, 2, N / 2, npes - 1); shmem_float_iget (dest7, src7, 1, 2, N / 2, npes - 1); shmem_barrier_all (); if (me == 0) { for (i = 0; i < N / 2; i += 1) { if (dest1[i] != (npes - 1)) { success1 = 1; } if (dest2[i] != (npes - 1)) { success2 = 1; } if (dest3[i] != (npes - 1)) { success3 = 1; } if (dest6[i] != (npes - 1)) { success6 = 1; } if (dest7[i] != (npes - 1)) { success7 = 1; } } if (success1 == 0) printf ("Test shmem_short_iget: Passed\n"); else { printf ("Test shmem_short_iget: Failed\n"); fail_count++; } if (success2 == 0) printf ("Test shmem_int_iget: Passed\n"); else { printf ("Test shmem_int_iget: Failed\n"); fail_count++; } if (success3 == 0) printf ("Test shmem_long_iget: Passed\n"); else { printf ("Test shmem_long_iget: Failed\n"); fail_count++; } if (success6 == 0) printf ("Test shmem_double_iget: Passed\n"); else { printf ("Test shmem_double_iget: Failed\n"); fail_count++; } if (success7 == 0) printf ("Test shmem_float_iget: Passed\n"); else { printf ("Test shmem_float_iget: Failed\n"); fail_count++; } } /* Testing shmem_double_g, shmem_float_g, shmem_int_g, shmem_long_g, shmem_short_g */ shmem_barrier_all (); dest9 = shmem_short_g (&src9, nextpe); dest10 = shmem_int_g (&src10, nextpe); dest11 = shmem_long_g (&src11, nextpe); dest12 = shmem_double_g (&src12, nextpe); dest13 = shmem_float_g (&src13, nextpe); shmem_barrier_all (); if (me == 0) { if (dest9 == 1) printf ("Test shmem_short_g: Passed\n"); else { printf ("Test shmem_short_g: Failed\n"); fail_count++; } if (dest10 == 1) printf ("Test shmem_int_g: Passed\n"); else { printf ("Test shmem_int_g: Failed\n"); fail_count++; } if (dest11 == 1) printf ("Test shmem_long_g: Passed\n"); else { printf ("Test shmem_long_g: Failed\n"); fail_count++; } if (dest12 == 1) printf ("Test shmem_double_g: Passed\n"); else { printf ("Test shmem_double_g: Failed\n"); fail_count++; } if (dest13 == 1) printf ("Test shmem_float_g: Passed\n"); else { printf ("Test shmem_float_g: Failed\n"); fail_count++; } } shmem_barrier_all (); if (me == 0) { if (fail_count == 0) printf("All Tests Passed\n"); else printf("%d Tests Failed\n", fail_count); } } else { printf ("Number of PEs must be > 1 to test shmem get, test skipped\n"); } shmem_finalize (); return 0; }