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; }
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; }