一点想法
这是我关于做这个项目的一个总体思路。从最初的的获取图像与输出图像开始着手;再到简单实验内核进行加速处理这里我也简单的做了两个常规程序的试验(图像旋转与高斯模糊);然后就是将内核程序运行速度与外程序运行速度进行一个简单比较(这里就需要引入计时系统了);过后便开始正式开始处理图像识别相关的问题了,比如通过获取图像的RGB对其进行卷积处理(从这里开始正式将OpenCL与CNN相结合起来)等。
计时系统
具体步骤
首先在创建命令队列时,要引入CL_QUEUE_PROFILING_ENABLE这个参数。
commandQueue = clCreateCommandQueue(context, devices[0], CL_QUEUE_PROFILING_ENABLE, &errNum);
之后是在内核排队时,创建一个事件(event)对接内核输出所用时长
cl_event event;
errNum = clEnqueueNDRangeKernel(commandQueue, kernel, 2, NULL,
globalWorkSize, NULL,
0, NULL, &event);
clWaitForEvents(1, &event);
clFinish(commandQueue);
cl_ulong time_start;
cl_ulong time_end;
clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL);
double times = time_end - time_start;
printf("OpenCL Kernel Execution time is: %0.4f\n", times / 1000000.0);
我仍然借上次的图片旋转案例一用
输出结果
这样一个简单的计时系统就完成了
关于图像RGB获取
这里是今天刚开始研究,预估计会使用FreeImage的库,通过GetPixelColor函数来获取图像的RGB,而后将其赋值给数组输出