Example #1
0
int main( int argc, char *argv[] )
{
    int32     k;
    char      *tsuf;
    timing_t  start;
    timing_t  end;
    timing_t  diff;
    real32    time;
    real32    secs;
    carray_t  haystack;
    hthread_t *threads;
    arg_t     *args;

    // Allocate the threads structure
    threads = (hthread_t*)malloc( tarsize * sizeof(hthread_t) );

    // Allocate the argument structures
    args    = (arg_t*)malloc( tarsize * sizeof(arg_t) );

    // Create arrays for the search string
    carray_fromstr( &haystack, beowulf );
    carray_concatstr( &haystack, britannica1 );
    carray_concatstr( &haystack, britannica2 );
    carray_concatstr( &haystack, britannica3 );
    carray_concatstr( &haystack, caesar );
    carray_concatstr( &haystack, hamlet );
    carray_concatstr( &haystack, huckfinn );
    carray_concatstr( &haystack, illiad );
    carray_concatstr( &haystack, macbeth );
    carray_concatstr( &haystack, pride );
    carray_concatstr( &haystack, sense );
    carray_concatstr( &haystack, tomsawyer );
    carray_concatstr( &haystack, twist );
    carray_concatstr( &haystack, ulysses );
    carray_concatstr( &haystack, venice );


    // Create all of the thread arguments
    for( k = 0; k < tarsize; k++ )
    {
        args[k].search = &haystack;
        args[k].found  = 0;
        carray_fromstr( &args[k].target, tar[k] );
        boyermoore_init( &args[k].bm, &args[k].target );
    }

    // Create worker threads for all of the search strings
    timing_get( &start );
    for( k = 0; k < tarsize; k++ )
    {
        hthread_create( &threads[k], NULL, search, &args[k] );
    }

    // Wait for all of the worker threads to complete
    for( k = 0; k < tarsize; k++ )
    {
        hthread_join( threads[k], (void*)&args[k].found );
    }
    timing_get( &end );
    timing_diff(diff,end,start);
    secs = timing_sec(diff);
    calculate_time( &tsuf, &time, secs );
    printf( "Test Finished: %.2f %s\n", time, tsuf );

    // Show the results and destroy the thread arguments
    for( k = 0; k < tarsize; k++ )
    {
        printf( "Thread %d found %d matches of the string '%s'\n", k, args[k].found, tar[k] );
        boyermoore_destroy( &args[k].bm );
        carray_destroy( &args[k].target );
    }

    // Exit the program
    return 0;
}
Example #2
0
File: main.c Project: zhanxw/mycode
int main(int argc, char *argv[])
{
    //////////////////////////////////////////////////////////////////////
    // Handel argument
    if (argc != 4) {
        usage(argv[0]);
        exit(1);
    }
    const unsigned int shuffle_time = atof(argv[1]);
    const char* inputX = argv[2];
    const char* inputY = argv[3]; 

    debug_level_set(SILENT);
    printf("begin allocating memory:\n");
    vec_p x, y;
    x = vector_new(4);
    y = vector_new(4);

    printf("begin read:\n");
    vector_read(x, inputX);
    vector_read(y, inputY);
    // vector_print(x);

    double* ret = malloc(sizeof(double)*shuffle_time);
    assert(ret);

    
    //////////////////////////////////////////////////////////////////////
    // Method 1
    // parallel this part
    timing_start();
    for (int i = 0; i < shuffle_time; i++) {
        inplace_shuffle(y->value, y->len);
        ret[i] = vector_corr(x,y);
    }
    timing_stop();
    timing_diff();

    //////////////////////////////////////////////////////////////////////
    // Method 2
    timing_start();
    vector_corr_permutation(x, y, ret, shuffle_time);
    timing_stop();
    timing_diff();

    //////////////////////////////////////////////////////////////////////
    // Method 3
    timing_start();
    mkl_vector_corr_permutation(x, y, ret, shuffle_time);
    timing_stop();
    timing_diff();



    exit(0);
    // output result
    printf("Result\n");

    for (int i = 0; i < shuffle_time; i++) {
        printf("%f\n", ret[i]);
    }

    vector_delete(&x);
    vector_delete(&y);
    free(ret);
    return 0;
    
}