comparison fft_fixstart/main.cc @ 4:8df0d3128672

add time measurement function
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Mon, 04 Feb 2013 03:43:17 +0900
parents f3cfea46e585
children 3602b23914ad
comparison
equal deleted inserted replaced
3:f3cfea46e585 4:8df0d3128672
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <math.h> 3 #include <math.h>
4 #include <sys/stat.h> 4 #include <sys/stat.h>
5 #include <fcntl.h> 5 #include <fcntl.h>
6 #include <sys/time.h>
6 7
7 #ifdef __APPLE__ 8 #ifdef __APPLE__
8 #include <OpenCL/opencl.h> 9 #include <OpenCL/opencl.h>
9 #else 10 #else
10 #include <CL/cl.h> 11 #include <CL/cl.h>
16 17
17 #define MAX_SOURCE_SIZE (0x100000) 18 #define MAX_SOURCE_SIZE (0x100000)
18 19
19 #define AMP(a, b) (sqrt((a)*(a)+(b)*(b))) 20 #define AMP(a, b) (sqrt((a)*(a)+(b)*(b)))
20 21
22 static double st_time;
23 static double ed_time;
24
21 cl_device_id device_id = NULL; 25 cl_device_id device_id = NULL;
22 cl_context context = NULL; 26 cl_context context = NULL;
23 cl_command_queue queue = NULL; 27 cl_command_queue queue = NULL;
24 cl_program program = NULL; 28 cl_program program = NULL;
25 cl_device_type device_type = CL_DEVICE_TYPE_GPU; 29 cl_device_type device_type = CL_DEVICE_TYPE_GPU;
26 30
27 enum Mode { 31 enum Mode {
28 forward = 0, 32 forward = 0,
29 inverse = 1 33 inverse = 1
30 }; 34 };
35
36 static double
37 getTime()
38 {
39 struct timeval tv;
40 gettimeofday(&tv, NULL);
41 return tv.tv_sec + (double)tv.tv_usec*1e-6;
42 }
31 43
32 int setWorkSize(size_t* gws, size_t* lws, cl_int x, cl_int y) 44 int setWorkSize(size_t* gws, size_t* lws, cl_int x, cl_int y)
33 { 45 {
34 switch(y) { 46 switch(y) {
35 case 1: 47 case 1:
208 ((float*)xm)[(2*n*j)+2*i+0] = (float)ipgm.buf[n*j+i]; 220 ((float*)xm)[(2*n*j)+2*i+0] = (float)ipgm.buf[n*j+i];
209 ((float*)xm)[(2*n*j)+2*i+1] = (float)0; 221 ((float*)xm)[(2*n*j)+2*i+1] = (float)0;
210 } 222 }
211 } 223 }
212 224
225 st_time = getTime();
213 /* Get platform/device */ 226 /* Get platform/device */
214 ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms); 227 ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);
215 ret = clGetDeviceIDs( platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &device_id, &ret_num_devices); 228 ret = clGetDeviceIDs( platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &device_id, &ret_num_devices);
216 229
217 /* Create OpenCL context */ 230 /* Create OpenCL context */
311 writePGM(&opgm, "output.pgm"); 324 writePGM(&opgm, "output.pgm");
312 325
313 /* Finalizations*/ 326 /* Finalizations*/
314 ret = clFlush(queue); 327 ret = clFlush(queue);
315 ret = clFinish(queue); 328 ret = clFinish(queue);
329 ed_time = getTime();
316 ret = clReleaseKernel(hpfl); 330 ret = clReleaseKernel(hpfl);
317 ret = clReleaseKernel(trns); 331 ret = clReleaseKernel(trns);
318 ret = clReleaseKernel(sfac); 332 ret = clReleaseKernel(sfac);
319 ret = clReleaseProgram(program); 333 ret = clReleaseProgram(program);
320 ret = clReleaseMemObject(xmobj); 334 ret = clReleaseMemObject(xmobj);
328 342
329 free(wm); 343 free(wm);
330 free(rm); 344 free(rm);
331 free(xm); 345 free(xm);
332 346
333 fprintf(stdout, "image out put succeeded.\n"); 347 fprintf(stdout, "image out put succeeded.\n");
348 printf("Time: %0.6f\n",ed_time-st_time);
334 return 0; 349 return 0;
335 } 350 }