【发布时间】:2015-07-04 09:13:36
【问题描述】:
我想测量我的内核代码在各种设备(即 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<500;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;
}
}
但是有人告诉我,不能在内核代码中使用 sleep()。如果这是真的,那么有人可以给出原因,如果不是,请告诉实现相同的方法。
另外,正如我所说,我希望比较我的 CPU 和 GPU 的性能,实现这一目标的方法之一是计算各种设备上内核代码的运行时间,而如果有另一种方法我可以让代码同时开始在所有设备上执行,然后我只需要列出相应的执行结束时间,这也可以达到目的!是否可以?
硬件细节:
GPU:AMD FirePro W7000、NVIDIA TESLA C2075 CPU: Intel(R) XEON(R) CPU X5660 @ 2.80GHZn
【问题讨论】:
-
sleep()与衡量性能有什么关系? -
我可以让线程休眠 30 秒,然后开始在所有三个设备上执行内核代码。如果运行时间 > 90 秒(对于 3 个设备),则意味着代码是按预期顺序执行而不是并行执行,而如果运行时间略高于 30 秒,则我的代码将在所有三个设备上并行执行.
-
@talonmies 您能否提出一个更好的方法来实现这一目标。谢谢
-
做什么?要计算运行时间,您需要使用某种计时器。 Internet 上充斥着基本主机计时器或基于 OpenCL 事件的计时器的示例,例如 here。 Google 是您的朋友
标签: c linux parallel-processing opencl gpgpu