TEST(testqueues, defaultqueue) { cout << "start" << endl; if(!EasyCL::isOpenCLAvailable()) { cout << "opencl library not found" << endl; exit(-1); } cout << "found opencl library" << endl; EasyCL *cl = EasyCL::createForFirstGpuOtherwiseCpu(); CLKernel *kernel = cl->buildKernelFromString(getKernel(), "test", ""); float in[5]; float out[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } kernel->input(5, in); kernel->output(5, out); size_t global = 5; size_t local = 5; kernel->run(1, &global, &local); cl->finish(); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } cout << "cl->queue " << (void *)cl->queue << endl; cout << "*cl->queue " << (void *)*cl->queue << endl; cout << "cl->default_queue->queue" << (void *)cl->default_queue->queue << endl; kernel->input(5, in); kernel->output(5, out); kernel->run(cl->default_queue, 1, &global, &local); cl->finish(); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); cout << "tests completed ok" << endl; }
TEST(testfloatwrapperconst, main) { if(!EasyCL::isOpenCLAvailable()) { cout << "opencl library not found" << endl; exit(-1); } cout << "found opencl library" << endl; EasyCL *cl = EasyCL::createForFirstGpuOtherwiseCpu(); CLKernel *kernel = cl->buildKernelFromString(getKernel(), "test", ""); float in[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; } float out[5]; CLWrapper *inwrapper = cl->wrap(5, (float const *)in); CLWrapper *outwrapper = cl->wrap(5, out); inwrapper->copyToDevice(); kernel->input(inwrapper); kernel->output(outwrapper); kernel->run_1d(5, 5); outwrapper->copyToHost(); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); cout << "tests completed ok" << endl; delete inwrapper; delete outwrapper; delete kernel; delete cl; }
TEST( SLOW_testintwrapper_huge, testreadwrite ) { EasyCL *cl = EasyCL::createForFirstGpuOtherwiseCpu(); CLKernel *kernel = cl->buildKernel("testeasycl.cl", "test_stress"); const int N = 1000000; int *in = new int[N]; for( int i = 0; i < N; i++ ) { in[i] = i * 3; } int *out = new int[N]; CLWrapper *inwrapper = cl->wrap(N, in); CLWrapper *outwrapper = cl->wrap(N, out); inwrapper->copyToDevice(); outwrapper->createOnDevice(); kernel->input( inwrapper ); kernel->output( outwrapper ); int globalSize = N; int workgroupsize = cl->getMaxWorkgroupSize(); globalSize = ( ( globalSize + workgroupsize - 1 ) / workgroupsize ) * workgroupsize; cout << "globalsize: " << globalSize << " workgroupsize " << workgroupsize << endl; kernel->run_1d( globalSize, workgroupsize ); outwrapper->copyToHost(); for( int i = 0; i < N; i++ ) { if( out[i] != 689514 ) { cout << "out[" << i << "] != 689514: " << out[i] << endl; exit(-1); } } delete outwrapper; delete inwrapper; delete kernel; delete cl; }
TEST( SLOW_testintwrapper_huge, testread ) { Timer timer; EasyCL *cl = EasyCL::createForFirstGpuOtherwiseCpu(); CLKernel *kernel = cl->buildKernel("testeasycl.cl", "test_read"); // const int N = 4500000; // const int N = (4500000/512)*512; int N = 100000; int *out = new int[N]; CLWrapper *outwrapper = cl->wrap(N, out); kernel->in(3)->in(7); kernel->output( outwrapper ); int globalSize = N; int workgroupsize = cl->getMaxWorkgroupSize(); globalSize = ( ( globalSize + workgroupsize - 1 ) / workgroupsize ) * workgroupsize; cout << "globalsize: " << globalSize << " workgroupsize " << workgroupsize << endl; timer.timeCheck("before kernel"); kernel->run_1d( globalSize, workgroupsize ); timer.timeCheck("after kernel"); outwrapper->copyToHost(); timer.timeCheck("after copy to host"); for( int i = 0; i < N; i++ ) { if( out[i] != 4228 ) { cout << "out[" << i << "] != 4228: " << out[i] << endl; exit(-1); } } delete outwrapper; delete kernel; delete cl; }
TEST(testqueues, main) { cout << "start" << endl; if(!EasyCL::isOpenCLAvailable()) { cout << "opencl library not found" << endl; exit(-1); } cout << "found opencl library" << endl; EasyCL *cl = EasyCL::createForFirstGpuOtherwiseCpu(); CLQueue *queue2 = cl->newQueue(); CLQueue *queue3 = cl->newQueue(); CLKernel *kernel = cl->buildKernelFromString(getKernel(), "test", ""); // CLKernel *kernel2 = cl->buildKernelFromString(queue, getKernel(), "test", ""); float in[5]; float out[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } kernel->input(5, in); kernel->output(5, out); size_t global = 5; size_t local = 5; kernel->run(1, &global, &local); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); // in[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } // float out[5]; kernel->input(5, in); kernel->output(5, out); // size_t global = 5; // size_t local = 5; kernel->run(queue2, 1, &global, &local); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); // in[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } // float out[5]; kernel->input(5, in); kernel->output(5, out); // size_t global = 5; // size_t local = 5; kernel->run(queue3, 1, &global, &local); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); // in[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } // float out[5]; kernel->input(5, in); kernel->output(5, out); // size_t global = 5; // size_t local = 5; kernel->run(1, &global, &local); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); // in[5]; for(int i = 0; i < 5; i++) { in[i] = i * 3; out[i] = 0; } // float out[5]; kernel->input(5, in); kernel->output(5, out); // size_t global = 5; // size_t local = 5; kernel->run(queue2, 1, &global, &local); assertEquals(out[0] , 7); assertEquals(out[1] , 10); assertEquals(out[2] , 13); assertEquals(out[3] , 16); assertEquals(out[4] , 19); delete queue2; delete queue3; cout << "tests completed ok" << endl; }