Changeset 105

Show
Ignore:
Timestamp:
03/18/07 18:03:49
Author:
kunxi
Message:

Fix bug, and add validation for io_fread_list_shared_ind test case
NOTE: when add more the nmembs and offsets to this test case for more threads support, please be careful not overlap the read buffer.

Files:

Legend:

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

    r103 r105  
    1414#endif 
    1515 
     16static TYPE vbf[180]; 
    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 [] = { 2, 30, 81 , 25, 77, 121, 139, 47}; 
     18 
     19/* nmembs and offsets, this only works for up to 3 threads */ 
     20/* Please consider the overlapping for list operation */ 
     21 
     22/* XXX: we need to test whether elemsize is enable for list operation ! */ 
     23 
     24static int nmembs [] = { 23, 2, 37, 5, 41, 7}; 
     25static int offsets [] = { 2, 130, 30, 140, 77, 150}; 
     26 
     27 
    2028 
    2129int  
     
    2634        upc_off_t offset = offsets[MYTHREAD]; 
    2735        int blocksize = BLOCKSIZE; 
     36        TYPE *vbfp;  
    2837 
    2938#if BLOCKSIZE != 0 
    30         shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(100, blocksize*sizeof(TYPE)); 
     39        shared [BLOCKSIZE] TYPE *buffer = (shared[BLOCKSIZE] TYPE*) upc_all_alloc(180, blocksize*sizeof(TYPE)); 
    3140#endif 
    3241 
    3342        struct upc_shared_memvec  memvec[2]; 
    34         memvec[0].baseaddr = buffer + offsets[MYTHREAD]; 
     43        memvec[0].baseaddr = buffer + offsets[MYTHREAD * 2]; 
    3544        memvec[0].blocksize = blocksize; 
    36         memvec[0].len = nmembs[MYTHREAD]; 
    37         memvec[0].elemsize = 1
     45        memvec[0].len = nmembs[MYTHREAD * 2]; 
     46        memvec[0].elemsize = sizeof(TYPE)
    3847 
    39         memvec[1].baseaddr = buffer + offsets[MYTHREAD+THREADS]; 
     48        memvec[1].baseaddr = buffer + offsets[MYTHREAD * 2 + 1]; 
    4049        memvec[1].blocksize = blocksize; 
    41         memvec[1].len = nmembs[MYTHREAD+THREADS]; 
    42         memvec[1].elemsize = 1
     50        memvec[1].len = nmembs[MYTHREAD * 2 + 1]; 
     51        memvec[1].elemsize = sizeof(TYPE)
    4352 
    4453        struct upc_filevec filevec[3]; 
    45         filevec[0].offset = offsets[MYTHREAD]; 
    46         filevec[0].len = 10; 
    47         filevec[1].offset = offsets[MYTHREAD+1]; 
    48         filevec[1].len = 10; 
    49         filevec[2].offset = offsets[MYTHREAD+2]; 
    50         filevec[2].len = nmembs[MYTHREAD] + nmembs[MYTHREAD+THREADS] - 20; 
    51  
    52         for( j = 0; j< THREADS; j++ ) { 
    53                 if( MYTHREAD == j) { 
    54                         fprintf(stderr, "TH%d : ", j); 
    55                         for(i = 0; i < 2; i++ ) 
    56                                 fprintf( stderr, "memvec: len = %d, fv: offset = %d\n", memvec[i].len, filevec[i].offset ); 
    57                         fprintf(stderr, "\n"); 
    58                 } 
    59                 upc_barrier; 
    60         } 
     54        filevec[0].offset = offsets[MYTHREAD] * sizeof(TYPE); 
     55        filevec[0].len = 10 * sizeof(TYPE); 
     56        filevec[1].offset = offsets[MYTHREAD+1] * sizeof(TYPE); 
     57        filevec[1].len = 10 * sizeof(TYPE); 
     58        filevec[2].offset = offsets[MYTHREAD+2] * sizeof(TYPE); 
     59        filevec[2].len = (memvec[0].len + memvec[1].len - 20) * sizeof(TYPE); 
    6160 
    6261        upc_file_t* fd = upc_all_fopen(argv[1], UPC_RDONLY | UPC_INDIVIDUAL_FP, 0, NULL); 
    63          
    6462        if (fd == NULL) { 
    6563#if BLOCKSIZE != 0 
     
    7371         
    7472        upc_all_fread_list_shared(fd, 2, memvec, 3, filevec, UPC_IN_NOSYNC | UPC_OUT_NOSYNC); 
    75         perror("deadbeef"); 
    76         fprintf(stderr, "finish reading Th%d \n", MYTHREAD); 
    7773        upc_barrier; 
    7874 
    79         for( j = 0; j< THREADS; j++ ) { 
    80                 if( MYTHREAD == j) { 
    81                         fprintf(stderr, "TH%d : ", j); 
    82                         for(i = 0; i < nmembs[MYTHREAD]; i++ ){ 
    83 #if TYPE == char 
    84                                 fprintf( stderr, "%u ", (unsigned char) buffer[ i+offsets[MYTHREAD] ] ); 
    85 #else 
    86                                 fprintf( stderr, "%u ",  buffer[ i+offsets[MYTHREAD] ] ); 
    87 #endif 
    88                         } 
    89                         fprintf(stderr, "\n"); 
     75        /* Validation start */ 
    9076 
    91                         fprintf(stderr, "TH%d : ", j); 
    92                         for(i = 0; i < nmembs[THREADS+MYTHREAD]; i++ ){ 
    93 #if TYPE == char 
    94                                 fprintf( stderr, "%u ", (unsigned char) buffer[ i+offsets[THREADS+MYTHREAD] ] ); 
    95 #else 
    96                                 fprintf( stderr, "%u ", buffer[ i+offsets[THREADS+MYTHREAD] ] ); 
    97 #endif 
    98                         } 
    99                         fprintf(stderr, "\n"); 
     77        /* copy the chunks to vbf */ 
     78        vbfp = vbf; 
     79        gupc_memget(vbfp, memvec[0].baseaddr, blocksize, sizeof(TYPE), memvec[0].len); 
     80        vbfp += memvec[0].len;  
     81        gupc_memget(vbfp, memvec[1].baseaddr, blocksize, sizeof(TYPE), memvec[1].len); 
     82         
     83        /* verify the data using the filevec information */ 
     84        vbfp = vbf; 
     85        for (i = 0; i < 3; i++) { 
     86                for (j = 0; j < filevec[i].len/sizeof(TYPE); j++) { 
     87                        if (*vbfp != (filevec[i].offset / sizeof(TYPE) + j) % 0x80) 
     88                                GULA_FAIL("Data integrity is violated!"); 
     89                        vbfp ++; 
     90                } 
    10091        } 
    101         upc_barrier; 
    102 
     92 
    10393#if BLOCKSIZE != 0 
    10494        if (MYTHREAD == 0)