1

我有一个简单的内核,我正在使用clock(). 我在如何测量 NVIDIA CUDA 中的内核时间?

所以我已经使用 clock_t start = clock();(并且同样停止)来计时。在编译时,我收到以下错误:

tex1.cu(14):错误:明显调用括号前的表达式必须具有(指向)函数类型`

我是否缺少头文件或编译器选项?

另外,我尝试使用 CUDA 计时器(cudaEvent_t start, stop;),但我得到的经过时间是 0 毫秒。我创建开始和停止,记录开始,做一些 CUDA 的东西,同步,记录停止,事件同步和测量经过的时间。这部分编译得很好,但让我经过的时间为零。

这是一个简单的内核,我用它来测试我对纹理内存的理解。内核:

__global__ void magic(float *mean, int *clock){
    int i, tid = threadIdx.x + blockIdx.x * blockDim.x;
    float t, sum=0.0;
    clock_t start = clock();
    if ( tid < dimy )
    {
        for(i=0;i<dimx; i++){
            t = tex2D( input, i, tid );
            sum = sum + t*t;
        }
        clock_t stop = clock();
        clock[tid] = (int)(stop-start);
    }
}
4

1 回答 1

4

在您的内核中,不要命名您的内核参数clock,因为这会使编译器感到困惑,因为您有一个名为的变量clock和一个名为 的函数clock。而是这样做:

__global__ void magic(float *mean, int *myclock){

...
myclock[tid] = (int)(stop-start);
}

如果您进行更改,括号前表达式的错误将消失。奇怪的是,您回答了有关是否有任何其他变量称为时钟或以 no 开头的问题,因为您两者都有

如果您在使用 cuda 事件方面需要帮助,请发布您用于计时的实际代码。您是否对所有 cuda 调用和内核调用进行错误检查?

于 2013-02-27T12:46:26.287 回答