Changeset 106
- Timestamp:
- 03/18/07 20:43:51
- Files:
-
- src/io_fwrite_list_shared_ind.upc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/io_fwrite_list_shared_ind.upc
r103 r106 7 7 8 8 /* For all BLOCKSIZE == 0, use the static memeory. 9 for all other cases, use the dynamic memory allocation10 */9 * for all other cases, use the dynamic memory allocation 10 */ 11 11 12 12 #if BLOCKSIZE == 0 13 13 shared [0] TYPE buffer [180]; 14 14 #endif 15 static TYPE vbf[180]; 15 16 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 [] = { 0, 26, 77 , 130, 77, 121, 140, 150}; 20 static int foffs[] = { 0, 30, 90, 11, 45, 110, 22, 57, 133 }; 18 19 /* nmembs and offsets, this only works for up to 3 threads */ 20 /* Please consider the overlapping for list operation */ 21 22 23 static int nmembs [] = { 23, 2, 37, 5, 41, 7}; 24 static int offsets [] = { 0, 130, 26, 140, 77, 150}; 25 static int foffs[] = { 0, 11, 22, 30, 45, 57, 90, 110, 133}; 21 26 22 27 … … 25 30 26 31 int i, j; 27 int nmemb = nmembs[MYTHREAD];28 upc_off_t offset = offsets[MYTHREAD];29 32 int blocksize = BLOCKSIZE; 33 TYPE *vbfp; 30 34 31 35 #if BLOCKSIZE != 0 32 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(1 00, blocksize*sizeof(TYPE));36 shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 33 37 #endif 34 38 35 if(MYTHREAD == 0) {36 for(i = 0; i< 200; i++)37 buffer[i] = i % 256;39 if(MYTHREAD == 0) { 40 for(i = 0; i< 180; i++) 41 buffer[i] = i % 0x80; 38 42 } 39 43 upc_barrier; … … 41 45 42 46 struct upc_shared_memvec memvec[2]; 43 memvec[0].baseaddr = buffer + offsets[MYTHREAD ];47 memvec[0].baseaddr = buffer + offsets[MYTHREAD * 2]; 44 48 memvec[0].blocksize = blocksize; 45 memvec[0].len = nmembs[MYTHREAD ];46 memvec[0].elemsize = 1;49 memvec[0].len = nmembs[MYTHREAD * 2]; 50 memvec[0].elemsize = sizeof(TYPE); 47 51 48 memvec[1].baseaddr = buffer + offsets[MYTHREAD +THREADS];52 memvec[1].baseaddr = buffer + offsets[MYTHREAD * 2 + 1]; 49 53 memvec[1].blocksize = blocksize; 50 memvec[1].len = nmembs[MYTHREAD +THREADS];51 memvec[1].elemsize = 1;54 memvec[1].len = nmembs[MYTHREAD * 2 + 1]; 55 memvec[1].elemsize = sizeof(TYPE); 52 56 53 57 struct upc_filevec filevec[3]; 54 filevec[0].offset = foffs[MYTHREAD]; 55 filevec[0].len = 10; 58 filevec[0].offset = foffs[MYTHREAD * 3] * sizeof(TYPE); 59 filevec[0].len = 10 * sizeof(TYPE); 60 filevec[1].offset = foffs[MYTHREAD * 3 + 1] * sizeof(TYPE); 61 filevec[1].len = 10 * sizeof(TYPE); 62 filevec[2].offset = foffs[MYTHREAD * 3 + 2] * sizeof(TYPE); 63 filevec[2].len = (memvec[0].len + memvec[1].len - 20) * sizeof(TYPE); 56 64 57 filevec[1].offset = foffs[MYTHREAD+THREADS];58 filevec[1].len = 10;59 65 60 filevec[2].offset = foffs[MYTHREAD+THREADS*2]; 61 filevec[2].len = nmembs[MYTHREAD] + nmembs[MYTHREAD+THREADS]-20; 62 63 for( j = 0; j< THREADS; j++ ) { 64 if( MYTHREAD == j) { 65 fprintf(stderr, "TH%d : ", j); 66 for(i = 0; i < 3; i++ ) 67 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 68 fprintf(stderr, "\n"); 69 } 70 upc_barrier; 71 } 72 73 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_WRONLY | UPC_INDIVIDUAL_FP, 0, NULL); 66 upc_file_t* fd = upc_all_fopen("write_test.txt", UPC_RDWR | UPC_CREATE | UPC_TRUNC | UPC_INDIVIDUAL_FP, 0, NULL); 74 67 if (fd == NULL) { 75 68 #if BLOCKSIZE != 0 … … 77 70 upc_free(buffer); 78 71 #endif 79 GULA_FAIL("failed to open the file using UPC_RD ONLY| UPC_INDIVIDUAL_FP");72 GULA_FAIL("failed to open the file using UPC_RDWR | UPC_INDIVIDUAL_FP"); 80 73 } 81 upc_barrier;82 74 83 75 upc_all_fwrite_list_shared(fd, 2, memvec, 3, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 84 fprintf(stderr, "finish writing Th%d \n", MYTHREAD);76 upc_all_fsync(fd); 85 77 upc_barrier; 78 79 /* Validation for data integirty */ 80 /* Read the data to vbf */ 81 vbfp = vbf; 82 for (i = 0; i < 3; i++) { 83 upc_all_fseek(fd, filevec[i].offset, UPC_SEEK_SET); 84 upc_all_fread_local(fd, vbfp, sizeof(TYPE), filevec[i].len/sizeof(TYPE), UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 85 vbfp += filevec[i].len/sizeof(TYPE); 86 } 87 88 /* Check the data integrity based on the memvec */ 89 vbfp = vbf; 90 for (i = 0; i < 2; i++) { 91 for (j = 0; j < memvec[i].len; j++) { 92 if (*vbfp != (offsets[MYTHREAD * 2 + i] + j) % 0x80) 93 GULA_FAIL("Data integrity is violated!"); 94 vbfp ++; 95 } 96 } 97 86 98 87 99 #if BLOCKSIZE != 0
