Changeset 106

Show
Ignore:
Timestamp:
03/18/07 20:43:51
Author:
kunxi
Message:

Add validation for io_fwrite_list_shared_ind.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/io_fwrite_list_shared_ind.upc

    r103 r106  
    77 
    88/* For all BLOCKSIZE == 0, use the static memeory. 
    9 for all other cases, use the dynamic memory allocation 
    10 */ 
     9 * for all other cases, use the dynamic memory allocation 
     10 */ 
    1111 
    1212#if BLOCKSIZE == 0 
    1313shared [0] TYPE buffer [180]; 
    1414#endif 
     15static TYPE vbf[180]; 
    1516 
    1617 
    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 
     23static int nmembs [] = { 23, 2, 37, 5, 41, 7}; 
     24static int offsets [] = { 0, 130, 26, 140, 77, 150}; 
     25static int foffs[] = { 0, 11, 22, 30, 45, 57, 90, 110, 133}; 
    2126 
    2227 
     
    2530 
    2631        int i, j; 
    27         int nmemb = nmembs[MYTHREAD]; 
    28         upc_off_t offset = offsets[MYTHREAD]; 
    2932        int blocksize = BLOCKSIZE; 
     33        TYPE *vbfp; 
    3034 
    3135#if BLOCKSIZE != 0 
    32         shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(100, blocksize*sizeof(TYPE)); 
     36        shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 
    3337#endif 
    3438 
    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
    3842        } 
    3943        upc_barrier; 
     
    4145 
    4246        struct upc_shared_memvec  memvec[2]; 
    43         memvec[0].baseaddr = buffer + offsets[MYTHREAD]; 
     47        memvec[0].baseaddr = buffer + offsets[MYTHREAD * 2]; 
    4448        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)
    4751 
    48         memvec[1].baseaddr = buffer + offsets[MYTHREAD+THREADS]; 
     52        memvec[1].baseaddr = buffer + offsets[MYTHREAD * 2 + 1]; 
    4953        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)
    5256 
    5357        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); 
    5664 
    57         filevec[1].offset = foffs[MYTHREAD+THREADS]; 
    58         filevec[1].len = 10; 
    5965 
    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); 
    7467        if (fd == NULL) { 
    7568#if BLOCKSIZE != 0 
     
    7770                upc_free(buffer); 
    7871#endif 
    79                 GULA_FAIL("failed to open the file using UPC_RDONLY | UPC_INDIVIDUAL_FP"); 
     72                GULA_FAIL("failed to open the file using UPC_RDWR | UPC_INDIVIDUAL_FP"); 
    8073        } 
    81         upc_barrier; 
    8274         
    8375        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); 
    8577        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                 
    8698 
    8799#if BLOCKSIZE != 0