//////////////////////////////////////////////////////////////////////////////// // main computation function //////////////////////////////////////////////////////////////////////////////// void computeImages() { const char *outputname_cpu = "task1_out_cpu.rbm"; const char *outputname_gpu = "task1_out_gpu.rbm"; unsigned int seed; int i, length = dataWidth * dataHeight; // SIZE OF DATA unsigned short int header[2]; gettimeofday(&t_s_cpu, NULL); seed = (unsigned int)t_s_cpu.tv_usec; printf("\nseed: %u\n",seed); if (init_OpenCL()<0) { close_OpenCL(); return; } data_cpu = generateRandomField(seed,length); data_gpu = (unsigned int *)malloc (length*sizeof(unsigned int)); if ((!data_cpu)||(!data_gpu)) { printf("\nError allocating data.\n\n"); return; } for(i=0;i<length;i++) data_gpu[i]=data_cpu[i]; gettimeofday(&t_s_cpu, NULL); cpu_Sort(data_cpu,length); gettimeofday(&t_e_cpu, NULL); gettimeofday(&t_s_gpu, NULL); gpu_Sort(data_gpu,length); gettimeofday(&t_e_gpu, NULL); // For small data sets you may print out errors here. // for(i=0;i<length;i++) // if(data_gpu[i]!=data_cpu[i]) printf("error @ %u\n",i); printf("\n time needed: \nCPU: %i us\n",(int)(t_e_cpu.tv_usec-t_s_cpu.tv_usec + (t_e_cpu.tv_sec-t_s_cpu.tv_sec)*1000000)); printf("\nGPU: %i us\n\n",(int)(t_e_gpu.tv_usec-t_s_gpu.tv_usec + (t_e_gpu.tv_sec-t_s_gpu.tv_sec)*1000000)); header[0]=dataWidth; header[1]=dataHeight; close_OpenCL(); return; }
// Main program, inits int main( int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_SINGLE | GLUT_RGBA ); glutInitWindowSize( 1024, 512 ); glutCreateWindow("CUDA on live GL"); glutDisplayFunc(Draw); ResetMilli(); if (init_OpenCL()<0) { printf("OpenCL could not be initialized!\n"); close_OpenCL(); return; } readAndBuildKernel("filter.cl"); computeImages(); close_OpenCL(); glutMainLoop(); }