Mercurial > hg > Members > yuuhi > OpenCL
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 } |