在OpenCLC中实现sleep()

在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++) {

我想测量不同设备的性能,即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++)
    {
        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;}