在OpenCLC中实现sleep()
我想测量不同设备的性能,即CPU和GPU。 这是我的内核代码:在OpenCLC中实现sleep(),c,linux,parallel-processing,opencl,gpgpu,C,Linux,Parallel Processing,Opencl,Gpgpu,我想测量不同设备的性能,即CPU和GPU。 这是我的内核代码: __kernel void dataParallel(__global int* A) { sleep(10); A[0]=2; A[1]=3; A[2]=5; int pnp;//pnp=probable next prime int pprime;//previous prime int i,j; for(i=3;i<10;i++) {
__kernel void dataParallel(__global int* A)
{
sleep(10);
A[0]=2;
A[1]=3;
A[2]=5;
int pnp;//pnp=probable next prime
int pprime;//previous prime
int i,j;
for(i=3;i<10;i++)
{
j=0;
pprime=A[i-1];
pnp=pprime+2;
while((j<i) && A[j]<=sqrt((float)pnp))
{
if(pnp%A[j]==0)
{
pnp+=2;
j=0;
}
j++;
}
A[i]=pnp;
}
}
是否有其他方法来实现该功能。还有一种方法可以记录执行此代码段所花费的时间
p.S.我已经将
#include
包含在我的主机代码中。您不需要在内核中使用睡眠来测量执行时间
测量时间有两种方法。
1.使用opencl固有评测
看这里:
#include <time.h>
相关问题:还有一种方法可以记录执行此代码段所花费的时间。将事件附加到内核启动,然后查询分析信息。如果你搜索一下,你可能会找到很多答案。我一定会试试的。Thnx!另外,正如我所说,我希望比较我的CPU和GPU的性能,实现这一点的方法之一是计算内核代码的运行时间,而如果有另一种方法可以让代码同时在所有设备上开始执行,那么我只需要列出它们相应的执行结束时间,这也可以达到目的!有可能吗?要做到这一点,您需要为每个设备创建一个opencl上下文。您也可以测量时间,将拾取的设备更改3次,然后比较时间。
double start = getTimeInMS();
//The kernel starts here
clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &tasksize, &local_size_in, 0, NULL, NULL)
//wait for kernel execution
clFinish(command_queue);
cout << "kernel execution time " << (getTimeInMS() - start) << endl;
static inline double getTimeInMS(){
SYSTEMTIME st;
GetLocalTime(&st);
return (double)st.wSecond * (double)1000 + (double)st.wMilliseconds;}
#include <time.h>
static inline double getTime() {
struct timeval starttime;
gettimeofday(&starttime, 0x0);
return (double)starttime.tv_sec * (double)1000 + (double)starttime.tv_usec / (double)1000;}