【发布时间】:2012-05-09 20:44:53
【问题描述】:
我有一个在 GPU 上执行计算的 cuda 代码。 我正在使用时钟();找出时间
我的代码结构是
__global__ static void sum(){
// calculates sum
}
extern "C"
int run_kernel(int array[],int nelements){
clock_t start, end;
start = clock();
//perform operation on gpu - call sum
end = clock();
double elapsed_time = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("time required : %lf", elapsed_time);
}
但时间总是 0.0000 我检查了打印开始和结束时间。开始有一些价值,但结束时间总是零。
知道可能是什么原因吗?测量时间的任何替代方法。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
是
elapsed_time零还是end零?我想你使用的是 GPU 而不是 CPU,所以测量 CPU 时间不会给你 GPU 时间。 -
也许你测量的时间小于时钟的粒度?尝试在 start=clock() 和 end=clock() 行之间临时打一个 sleep(1) ,然后看看你是否得到非零结果。
-
可能和这个问题一样的原因:stackoverflow.com/q/2134363/10077
-
也许
clock正在测量 CPU 时间,(如times或getrusage)但 CUDA 在 GPU 卡上运行,从内核的角度来看,这是一个外围设备(如打印机)所以大部分时间内核都在等待它。