我有一个简单的内核,我使用clock()
计时。
我在How to measure the inner kernel time in 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);
}
}
答案 0 :(得分:3)
在你的内核中,不要将你的内核参数命名为clock
,因为这会让编译器感到困惑,因为你有一个名为clock
的变量和一个名为clock
的函数。而是这样做:
__global__ void magic(float *mean, int *myclock){
...
myclock[tid] = (int)(stop-start);
}
如果进行了更改,则有关括号前面的表达式的错误将消失。 很奇怪你回答了关于你是否有任何其他变量叫做clock或者从no开始的问题,因为你有两个。
如果您希望获得有关cuda事件使用的帮助,请发布您用于计时的实际代码。您是否正在对所有cuda调用和内核调用进行错误检查?