void * shmemalign(size_t alignment, size_t size) { return shmem_align(alignment, size); }
int main(int argc, char **argv) { int me, c, l, j; int nWords, loops, incWords; pgm = strrchr(argv[0],'/'); if ( pgm ) pgm++; else pgm = argv[0]; shmem_init(); me = shmem_my_pe(); while ((c = getopt (argc, argv, "hpv")) != -1) switch (c) { case 'v': Verbose++; break; case 'h': default: usage(); break; } if (optind == argc) nWords = DFLT_NWORDS; else if ((nWords = getSize (argv[optind++])) <= 0) usage (); if (optind == argc) loops = DFLT_LOOPS; else if ((loops = getSize (argv[optind++])) < 0) usage (); if (optind == argc) incWords = DFLT_INCR; else if ((incWords = getSize (argv[optind++])) < 0) usage (); if (Verbose && me == 0) fprintf (stderr, "nWords(%d) loops(%d) incWords(%d)]\n", nWords, loops, incWords); for(l=0; l < loops; l++) { /* align 2**2 ... 2**23; 24 exceeds symetric heap max */ for(j=0,c=2; j < 23; j++,c<<=1) { target_sz = nWords * sizeof(DataType); if (!(target = (DataType *)shmem_align(c,target_sz))) { perror ("Failed target memory allocation"); exit (1); } if ( (unsigned long)target & (c-1) ) { fprintf(stdout,"PE%d Unaligned? ",me); fflush(stdout); fprintf(stdout,"align[%#09x]target %p\n", c, (void*)target); shmem_global_exit(1); } else if (Verbose > 1 && me == 0) fprintf(stdout,"align[%#09x]target %p\n", c, (void*)target); shmem_barrier_all(); shmem_free(target); } nWords += incWords; if (Verbose && me == 0) fprintf(stdout,"Fini loop %d\n",(l+1)); } shmem_finalize(); return 0; }