Changeset 113
- Timestamp:
- 03/20/07 18:11:40
- Files:
-
- src/io_fread_list_shared_async_comm.upc (modified) (4 diffs)
- src/io_fread_list_shared_async_ind.upc (modified) (3 diffs)
- src/io_fwrite_list_shared_async_comm.upc (modified) (4 diffs)
- src/io_fwrite_list_shared_async_ind.upc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/io_fread_list_shared_async_comm.upc
r103 r113 13 13 #endif 14 14 15 static TYPE vbf[180]; 15 16 16 17 /* nmembs and offsets, this only works for up to 8 threads */ … … 25 26 upc_off_t offset = offsets[MYTHREAD]; 26 27 int blocksize = BLOCKSIZE; 28 TYPE *vbfp; 27 29 ssize_t bytes; 28 30 29 31 #if BLOCKSIZE != 0 30 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(1 00, blocksize*sizeof(TYPE));32 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 31 33 #endif 34 struct upc_shared_memvec memvec[2]; 35 memvec[0].baseaddr = buffer + offsets[0]; 36 memvec[0].blocksize = blocksize; 37 memvec[0].len = nmembs[0]; 38 memvec[0].elemsize = sizeof(TYPE); 32 39 33 struct upc_shared_memvec memvec[2]; 34 memvec[0].baseaddr = buffer + offsets[0]; 35 memvec[0].blocksize = blocksize; 36 memvec[0].elemsize = 4; 37 memvec[0].len = nmembs[0]; 40 memvec[1].baseaddr = buffer + offsets[1]; 41 memvec[1].blocksize = blocksize; 42 memvec[1].len = nmembs[1]; 43 memvec[1].elemsize = sizeof(TYPE); 38 44 39 memvec[1].baseaddr = buffer + offsets[1]; 40 memvec[1].blocksize = blocksize; 41 memvec[1].len = nmembs[1]; 42 memvec[1].elemsize = 4; 45 struct upc_filevec filevec[3]; 46 filevec[0].offset = offsets[0] * sizeof(TYPE); 47 filevec[0].len = 30 * sizeof(TYPE); 43 48 44 struct upc_filevec filevec[3]; 45 filevec[0].offset = offsets[0]*4; 46 filevec[0].len = 30*4; 49 filevec[1].offset = offsets[1] * sizeof(TYPE); 50 filevec[1].len = 1 * sizeof(TYPE); 47 51 48 filevec[1].offset = offsets[1]*4; 49 filevec[1].len = 1*4; 50 51 filevec[2].offset = 40*4; 52 filevec[2].len = 29*4; 53 54 for( j = 0; j< THREADS; j++ ) { 55 if( MYTHREAD == j) { 56 fprintf(stderr, "TH%d : ", j); 57 for(i = 0; i < 2; i++ ) 58 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 59 fprintf(stderr, "\n"); 60 } 61 sleep(3); 62 upc_barrier; 63 } 52 filevec[2].offset = 40 * sizeof(TYPE); 53 filevec[2].len = 29 * sizeof(TYPE); 64 54 65 55 upc_file_t* fd = upc_all_fopen(argv[1], UPC_RDONLY | UPC_COMMON_FP, 0, NULL); … … 67 57 #if BLOCKSIZE != 0 68 58 if (MYTHREAD == 0) 69 upc_free(buffer);59 upc_free(buffer); 70 60 #endif 71 61 GULA_FAIL("failed to open the file using UPC_RDONLY | UPC_COMMON_FP"); … … 75 65 upc_all_fread_list_shared_async(fd, 2, memvec, 1, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 76 66 bytes = upc_all_fwait_async(fd); 77 offset = upc_all_fseek(fd, 0, UPC_SEEK_CUR);78 67 upc_barrier; 79 68 80 if( MYTHREAD == 0) { 81 fprintf(stderr, "TH%d : ", MYTHREAD); 82 for(i = 0; i < nmembs[0]; i++ ) 83 fprintf( stderr, "%u ", buffer[ i+offsets[0] ] ); 84 fprintf(stderr, "\n\n\n"); 69 /* Validation start */ 85 70 86 fprintf(stderr, "TH%d : ", MYTHREAD); 87 for(i = 0; i < nmembs[1]; i++ ) 88 fprintf( stderr, "%u ", buffer[ i+offsets[1] ] ); 89 fprintf(stderr, "\n"); 90 } 91 offset = upc_all_fseek(fd, 0, UPC_SEEK_CUR); 92 fprintf(stderr, "Th%d: origin=%d, read %d bytes, cur offset = %d\n", MYTHREAD, 0, bytes, offset); 93 upc_barrier; 71 /* copy the chunks to vbf */ 72 vbfp = vbf; 73 gupc_memget(vbfp, memvec[0].baseaddr, blocksize, sizeof(TYPE), memvec[0].len); 74 vbfp += memvec[0].len; 75 gupc_memget(vbfp, memvec[1].baseaddr, blocksize, sizeof(TYPE), memvec[1].len); 76 77 /* verify the data using the filevec information */ 78 vbfp = vbf; 79 for (i = 0; i < 3; i++) { 80 for (j = 0; j < filevec[i].len/sizeof(TYPE); j++) { 81 if (*vbfp != (filevec[i].offset / sizeof(TYPE) + j) % 0x80) 82 GULA_FAIL("Data integrity is violated!"); 83 vbfp ++; 84 } 85 } 94 86 95 87 #if BLOCKSIZE != 0 src/io_fread_list_shared_async_ind.upc
r103 r113 14 14 #endif 15 15 16 static TYPE vbf[180]; 16 17 17 /* nmembs and offsets, this only works for up to 8threads */18 static int nmembs [] = { 23, 37, 12 , 44, 14, 31, 4, 55};19 static int offsets [] = { 2, 30, 81 , 25, 77, 121, 139, 47};18 /* nmembs and offsets, this only works for up to 6 threads */ 19 static int nmembs [] = { 23, 2, 37, 5, 41, 7}; 20 static int offsets [] = { 2, 130, 30, 140, 77, 150}; 20 21 21 22 int … … 26 27 int offset = offsets[MYTHREAD]; 27 28 int blocksize = BLOCKSIZE; 28 ssize_t bytes;29 TYPE *vbfp; 29 30 30 31 #if BLOCKSIZE != 0 31 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(1 00, blocksize*sizeof(TYPE));32 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 32 33 #endif 34 35 struct upc_shared_memvec memvec[2]; 36 memvec[0].baseaddr = buffer + offsets[MYTHREAD * 2]; 37 memvec[0].blocksize = blocksize; 38 memvec[0].len = nmembs[MYTHREAD * 2]; 39 memvec[0].elemsize = sizeof(TYPE); 33 40 34 struct upc_shared_memvec memvec[2]; 35 memvec[0].baseaddr = buffer + offsets[MYTHREAD]; 36 memvec[0].blocksize = blocksize; 37 memvec[0].len = nmembs[MYTHREAD]; 38 memvec[0].elemsize = 4; 41 memvec[1].baseaddr = buffer + offsets[MYTHREAD * 2 + 1]; 42 memvec[1].blocksize = blocksize; 43 memvec[1].len = nmembs[MYTHREAD * 2 + 1]; 44 memvec[1].elemsize = sizeof(TYPE); 39 45 40 memvec[1].baseaddr = buffer + offsets[MYTHREAD+THREADS]; 41 memvec[1].blocksize = blocksize; 42 memvec[1].len = nmembs[MYTHREAD+THREADS]; 43 memvec[1].elemsize = 4; 44 45 struct upc_filevec filevec[3]; 46 filevec[0].offset = offsets[MYTHREAD]*4; 47 filevec[0].len = 10*4; 48 filevec[1].offset = offsets[MYTHREAD+1]*4; 49 filevec[1].len = 10*4; 50 filevec[2].offset = offsets[MYTHREAD+2]*4; 51 filevec[2].len = 4*(nmembs[MYTHREAD] + nmembs[MYTHREAD+THREADS] - 20); 52 53 for( j = 0; j< THREADS; j++ ) { 54 if( MYTHREAD == j) { 55 fprintf(stderr, "TH%d : ", j); 56 for(i = 0; i < 2; i++ ) 57 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 58 fprintf(stderr, "\n"); 59 } 60 upc_barrier; 61 } 46 struct upc_filevec filevec[3]; 47 filevec[0].offset = offsets[MYTHREAD] * sizeof(TYPE); 48 filevec[0].len = 10 * sizeof(TYPE); 49 filevec[1].offset = offsets[MYTHREAD+1] * sizeof(TYPE); 50 filevec[1].len = 10 * sizeof(TYPE); 51 filevec[2].offset = offsets[MYTHREAD+2] * sizeof(TYPE); 52 filevec[2].len = (memvec[0].len + memvec[1].len - 20) * sizeof(TYPE); 62 53 63 54 upc_file_t* fd = upc_all_fopen(argv[1], UPC_RDONLY | UPC_INDIVIDUAL_FP, 0, NULL); … … 65 56 #if BLOCKSIZE != 0 66 57 if (MYTHREAD == 0) 67 upc_free(buffer);58 upc_free(buffer); 68 59 #endif 69 60 GULA_FAIL("failed to open the file using UPC_RDONLY | UPC_INDIVIDUAL_FP"); 70 61 } 71 62 upc_barrier; 63 72 64 upc_all_fread_list_shared_async(fd, 2, memvec, 3, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 73 bytes = upc_all_fwait_async(fd);74 offset = upc_all_fseek(fd, 0, UPC_SEEK_CUR);75 76 65 upc_barrier; 77 66 78 for( j = 0; j< THREADS; j++ ) { 79 if( MYTHREAD == j) { 80 fprintf(stderr, "TH%d : ", j); 81 for(i = 0; i < nmembs[MYTHREAD]; i++ ) 82 fprintf( stderr, "%u ", buffer[ i+offsets[MYTHREAD] ] ); 83 fprintf(stderr, "\n"); 67 /* Validation start */ 84 68 85 fprintf(stderr, "TH%d : ", j); 86 for(i = 0; i < nmembs[THREADS+MYTHREAD]; i++ ) 87 fprintf( stderr, "%u ", buffer[ i+offsets[THREADS+MYTHREAD] ] ); 88 fprintf(stderr, "\n"); 89 } 90 upc_barrier; 91 } 69 /* copy the chunks to vbf */ 70 vbfp = vbf; 71 gupc_memget(vbfp, memvec[0].baseaddr, blocksize, sizeof(TYPE), memvec[0].len); 72 vbfp += memvec[0].len; 73 gupc_memget(vbfp, memvec[1].baseaddr, blocksize, sizeof(TYPE), memvec[1].len); 74 75 /* verify the data using the filevec information */ 76 vbfp = vbf; 77 for (i = 0; i < 3; i++) { 78 for (j = 0; j < filevec[i].len/sizeof(TYPE); j++) { 79 if (*vbfp != (filevec[i].offset / sizeof(TYPE) + j) % 0x80) 80 GULA_FAIL("Data integrity is violated!"); 81 vbfp ++; 82 } 83 } 92 84 93 85 #if BLOCKSIZE != 0 src/io_fwrite_list_shared_async_comm.upc
r103 r113 13 13 #endif 14 14 15 shared [0] TYPE vbf[180]; 16 15 17 /* nmembs and offsets, this only works for up to 8 threads */ 16 static int nmembs [] = { 23, 37 , 12 , 44, 14, 31, 4, 55};17 static int offsets [] = { 2, 3 0, 81 , 25, 77, 121, 139, 47};18 static int nmembs [] = { 23, 37}; 19 static int offsets [] = { 2, 35}; 18 20 19 21 int … … 21 23 22 24 int i, j; 23 int nmemb = nmembs[MYTHREAD];24 upc_off_t offset = offsets[MYTHREAD];25 25 int blocksize = BLOCKSIZE; 26 ssize_t ret, bytes; 27 shared [0] TYPE *vbfp; 26 28 27 29 #if BLOCKSIZE != 0 28 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(1 00, blocksize*sizeof(TYPE));30 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 29 31 #endif 30 32 31 if( MYTHREAD == 0) { 32 for(i=0; i< 100; i++) 33 buffer[i] = i% 256; 34 } 33 struct upc_shared_memvec memvec[2]; 34 memvec[0].baseaddr = buffer + offsets[0]; 35 memvec[0].blocksize = blocksize; 36 memvec[0].len = nmembs[0]; 37 memvec[0].elemsize = sizeof(TYPE); 35 38 36 struct upc_shared_memvec memvec[2]; 37 memvec[0].baseaddr = buffer + offsets[0]; 38 memvec[0].blocksize = blocksize; 39 memvec[0].len = nmembs[0]; 40 memvec[0].elemsize = 1; 39 memvec[1].baseaddr = buffer + offsets[1]; 40 memvec[1].blocksize = blocksize; 41 memvec[1].len = nmembs[1]; 42 memvec[1].elemsize = sizeof(TYPE); 41 43 42 memvec[1].baseaddr = buffer + offsets[1]; 43 memvec[1].blocksize = blocksize; 44 memvec[1].len = nmembs[1]; 45 memvec[1].elemsize = 1; 44 struct upc_filevec filevec[3]; 45 filevec[0].offset = offsets[0] * sizeof(TYPE); 46 filevec[0].len = 30 * sizeof(TYPE); 46 47 47 struct upc_filevec filevec[3]; 48 filevec[0].offset = offsets[0]; 49 filevec[0].len = 30; 48 filevec[1].offset = offsets[1] * sizeof(TYPE); 49 filevec[1].len = 1 * sizeof(TYPE); 50 50 51 filevec[1].offset = offsets[1];52 filevec[1].len = 1;51 filevec[2].offset = 40 * sizeof(TYPE); 52 filevec[2].len = 29 * sizeof(TYPE); 53 53 54 filevec[2].offset = 40; 55 filevec[2].len = 29; 54 if( MYTHREAD == 0) 55 for( i = 0; i< 180; i++ ) 56 buffer[i] = i % 0x80; 57 upc_barrier; 56 58 57 58 for( j = 0; j< THREADS; j++ ) { 59 if( MYTHREAD == j) { 60 fprintf(stderr, "TH%d : ", j); 61 for(i = 0; i < 2; i++ ) 62 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 63 fprintf(stderr, "\n"); 64 } 65 sleep(3); 66 upc_barrier; 67 } 68 69 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_WRONLY | UPC_COMMON_FP, 0, NULL); 59 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_RDWR | UPC_CREATE | UPC_TRUNC | UPC_COMMON_FP, 0, NULL); 70 60 if (fd == NULL) { 71 61 #if BLOCKSIZE != 0 … … 73 63 upc_free(buffer); 74 64 #endif 75 GULA_FAIL("failed to open the file using UPC_ WRONLY| UPC_COMMON_FP");65 GULA_FAIL("failed to open the file using UPC_RDWR | UPC_COMMON_FP"); 76 66 } 77 67 upc_barrier; … … 79 69 upc_all_fwrite_list_shared_async(fd, 2, memvec, 3, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 80 70 ssize_t bytes = upc_all_fwait_async(fd); 81 upc_off_t vo = upc_all_fseek(fd, 0, UPC_SEEK_CUR); 82 fprintf(stderr, "th%d: origin = 0 wrtie %d bytes, offset = %d \n", MYTHREAD, bytes, vo); 71 upc_barrier; 72 73 /* Validation for data integirty */ 74 /* Read the data to vbf */ 75 vbfp = vbf; 76 for (i = 0; i < 3; i++) { 77 upc_all_fseek(fd, filevec[i].offset, UPC_SEEK_SET); 78 ret = upc_all_fread_shared(fd, vbfp, 0, sizeof(TYPE), filevec[i].len/sizeof(TYPE), UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 79 vbfp += filevec[i].len / sizeof(TYPE); 80 upc_barrier; 81 } 82 83 /* Check the data integrity based on the memvec */ 84 vbfp = vbf; 85 for (i = 0; i < 2; i++) { 86 for (j = 0; j < memvec[i].len; j++) { 87 if (*vbfp != (offsets[i] + j) % 0x80) 88 GULA_FAIL("Data integrity is violated!"); 89 vbfp ++; 90 } 91 } 92 upc_barrier; 83 93 84 94 #if BLOCKSIZE != 0 src/io_fwrite_list_shared_async_ind.upc
r103 r113 14 14 #endif 15 15 16 static TYPE vbf[180]; 16 17 17 /* nmembs and offsets, this only works for up to 8 threads */ 18 static int nmembs [] = { 23, 37, 12 , 44, 14, 31, 4, 55}; 19 static int offsets [] = { 2, 30, 81 , 25, 77, 121, 139, 47}; 20 static int foffs[] = { 0, 30, 90, 11, 45, 110, 22, 57, 133 }; 18 /* nmembs and offsets, this only works for up to 3 threads */ 19 /* Please consider the overlapping for list operation */ 20 21 static int nmembs [] = { 23, 2, 37, 5, 41, 7}; 22 static int offsets [] = { 0, 130, 26, 140, 77, 150}; 23 static int foffs[] = { 0, 11, 22, 30, 45, 57, 90, 110, 133}; 21 24 22 25 int … … 24 27 25 28 int i, j; 26 int nmemb = nmembs[MYTHREAD];27 upc_off_t offset = offsets[MYTHREAD];28 29 int blocksize = BLOCKSIZE; 30 TYPE *vbfp; 29 31 30 32 #if BLOCKSIZE != 0 31 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc( 200, blocksize*sizeof(TYPE));33 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 32 34 #endif 33 35 34 36 if(MYTHREAD == 0) { 35 for(i = 0; i< 200; i++)36 buffer[i] = i % 256;37 for(i = 0; i< 180; i++) 38 buffer[i] = i % 0x80; 37 39 } 38 40 upc_barrier; 39 41 40 42 struct upc_shared_memvec memvec[2]; 41 memvec[0].baseaddr = buffer + offsets[MYTHREAD];42 memvec[0].blocksize = blocksize;43 memvec[0].len = nmembs[MYTHREAD];44 memvec[0].elemsize = 1;43 memvec[0].baseaddr = buffer + offsets[MYTHREAD * 2]; 44 memvec[0].blocksize = blocksize; 45 memvec[0].len = nmembs[MYTHREAD * 2]; 46 memvec[0].elemsize = sizeof(TYPE); 45 47 46 memvec[1].baseaddr = buffer + offsets[MYTHREAD+THREADS];47 memvec[1].blocksize = blocksize;48 memvec[1].len = nmembs[MYTHREAD+THREADS];49 memvec[1].elemsize = 1;48 memvec[1].baseaddr = buffer + offsets[MYTHREAD * 2 + 1]; 49 memvec[1].blocksize = blocksize; 50 memvec[1].len = nmembs[MYTHREAD * 2 + 1]; 51 memvec[1].elemsize = sizeof(TYPE); 50 52 51 struct upc_filevec filevec[3]; 52 filevec[0].offset = foffs[MYTHREAD]; 53 filevec[0].len = 10; 53 struct upc_filevec filevec[3]; 54 filevec[0].offset = foffs[MYTHREAD * 3] * sizeof(TYPE); 55 filevec[0].len = 10 * sizeof(TYPE); 56 filevec[1].offset = foffs[MYTHREAD * 3 + 1] * sizeof(TYPE); 57 filevec[1].len = 10 * sizeof(TYPE); 58 filevec[2].offset = foffs[MYTHREAD * 3 + 2] * sizeof(TYPE); 59 filevec[2].len = (memvec[0].len + memvec[1].len - 20) * sizeof(TYPE); 54 60 55 filevec[1].offset = foffs[MYTHREAD+THREADS]; 56 filevec[1].len = 10; 57 58 filevec[2].offset = foffs[MYTHREAD+THREADS*2]; 59 filevec[2].len = nmembs[MYTHREAD] + nmembs[MYTHREAD+THREADS]-20; 60 61 for( j = 0; j< THREADS; j++ ) { 62 if( MYTHREAD == j) { 63 fprintf(stderr, "TH%d : ", j); 64 for(i = 0; i < 2; i++ ) 65 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 66 fprintf(stderr, "\n"); 67 } 68 upc_barrier; 69 } 70 71 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_WRONLY | UPC_INDIVIDUAL_FP, 0, NULL); 61 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_RDWR | UPC_CREATE | UPC_TRUNC | UPC_INDIVIDUAL_FP, 0, NULL); 72 62 if (fd == NULL) { 73 63 #if BLOCKSIZE != 0 … … 75 65 upc_free(buffer); 76 66 #endif 77 GULA_FAIL("failed to open the file using UPC_ WRONLY| UPC_INDIVIDUAL_FP");67 GULA_FAIL("failed to open the file using UPC_RDWR | UPC_INDIVIDUAL_FP"); 78 68 } 79 69 upc_barrier; 80 70 81 71 upc_all_fwrite_list_shared_async(fd, 2, memvec, 3, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 82 fprintf(stderr, "finish writing Th%d \n", MYTHREAD);83 ssize_t bytes = upc_all_fwait_async(fd);84 upc_off_t vo = upc_all_fseek(fd, 0, UPC_SEEK_CUR);85 fprintf(stderr, "th%d: origin = 0 write %d bytes, offset = %d \n", MYTHREAD, bytes, vo);86 72 upc_barrier; 73 74 /* Validation for data integirty */ 75 /* Read the data to vbf */ 76 vbfp = vbf; 77 for (i = 0; i < 3; i++) { 78 upc_all_fseek(fd, filevec[i].offset, UPC_SEEK_SET); 79 upc_all_fread_local(fd, vbfp, sizeof(TYPE), filevec[i].len/sizeof(TYPE), UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 80 vbfp += filevec[i].len / sizeof(TYPE); 81 } 82 83 /* Check the data integrity based on the memvec */ 84 vbfp = vbf; 85 for (i = 0; i < 2; i++) { 86 for (j = 0; j < memvec[i].len; j++) { 87 if (*vbfp != (offsets[MYTHREAD * 2 + i] + j) % 0x80) 88 GULA_FAIL("Data integrity is violated!"); 89 vbfp ++; 90 } 91 } 87 92 88 93 #if BLOCKSIZE != 0
