我是 OpenCL 的新手,对数组添加有一些问题我使用下面链接中提供的代码
我添加了一些部件来测量 GPU 的性能
clFinish(commandQueue);
// Queue the kernel up for execution across the array
cl_ulong start, end; cl_event k_events;
errNum = clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL,
globalWorkSize, localWorkSize,
0, NULL, &k_events);
clGetEventProfilingInfo(k_events, CL_PROFILING_COMMAND_START,
sizeof(cl_ulong), &start, NULL);
clWaitForEvents(1 , &k_events);
clGetEventProfilingInfo(k_events, CL_PROFILING_COMMAND_END,
sizeof(cl_ulong), &end, NULL);
clGetEventProfilingInfo(k_events, CL_PROFILING_COMMAND_START,
sizeof(cl_ulong), &start, NULL);
float GPUTime = (end - start);
这可以测量 CPU 时间
LARGE_INTEGER CPUstart, finish, freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&CPUstart);
for (int i=0;i<ARRAY_SIZE;i++){
result[i]=a[i]+b[i];
}
QueryPerformanceCounter(&finish);
double timeCPU=(finish.QuadPart - CPUstart.QuadPart) /((double)freq.QuadPart)/1000000000.0) ;
我遇到的第一个问题是数组大小;它不能超过 10000 ;如果我这样做;它只是崩溃。如何解决?
第二个问题是性能;GPU/CPU 比率范围太宽;从 13% 到 210% (ish)。为什么会发生这种情况,您能否提出修复建议?
编辑:我想出了第二个;延迟是由省电模式引起的;它将 core/mem 设置为远低于 default 。只需使用程序锁定它;并且性能稳定在 ~150-300 % (GPU/CPU)
好案例
GPU time :632667 nanosecs.
CPU time : 990023 nanosecs.
GPU/CPU ratio : 156.484 percent.
还有一个不好的:
GPU time :6.83267e+006 nanosecs.
CPU time : 1.00756e+006 nanosecs.
GPU/CPU ratio : 14.7462 percent.
任何想法将不胜感激。谢谢 :D
PS:CPU是酷睿i3-370M;显卡:HD5470。我在 Windows 7 上使用 VS2008