void run() { Performance p; printf("Allocating buffers\n"); text_buf = alloc_shared_buffer<char> (LENGTH_OF_TEXT, &text_c); pattern_buf= alloc_shared_buffer<char> (LENGTH_OF_PATTERN, &pattern_c); result_buf= alloc_shared_buffer<char> (1, &result_c); result_c[0] = 0; init_string( text_c, pattern_c ); printf("Initializing kernels\n"); size_t task_dim = 1; clKernelSet kernel_set (device, context, program); // kernel_set.addKernel ("text_processor", 1, &task_dim, text_buf, LENGTH_OF_TEXT); // kernel_set.addKernel ("word_processor", 1, &task_dim); kernel_set.addKernel ("word_processor", 1, &task_dim, text_buf, LENGTH_OF_TEXT); kernel_set.addKernel ("matching", 1, &task_dim, pattern_buf, LENGTH_OF_PATTERN, result_buf); printf("Launching the kernel...\n"); p.start(); kernel_set.launch(); printf(" start waiting.... \n"); kernel_set.finish(); p.stop(); printf(" done Execution (OpenCL Channel) time = (%u,%u), result = %d\n", p.report_sec(), p.report_usec(),result_c[0]); test_in_cpu( text_c, pattern_c ); return; }
void test_in_cpu( char* text, char* pattern ) { Performance p; p.start(); bool match = false; int count = 0; for( int n = 0 ; n < LENGTH_OF_TEXT - 1; n ++ ) { int m = 0; if( n == 0 || text[n-1] == ' ' ) { for( ; m < LENGTH_OF_PATTERN - 1; m ++ ) { if( pattern[m] != text[n+m] ) break; } } if( m == LENGTH_OF_PATTERN - 1 ) count ++; } p.stop(); printf(" done Execution (CPU) time = (%u,%u), result = %d\n", p.report_sec(), p.report_usec(),count); }