我希望能够测量CUDA中内核启动的开销。
我知道有各种参数会影响这个开销,我对以下内容感兴趣:
- 创建的线程数
- 被复制数据的大小
我主要是为了测量使用在CUDA 6.0中引入的管理内存的优势。我会根据评论更新代码。谢谢!
我希望能够测量CUDA中内核启动的开销。
我知道有各种参数会影响这个开销,我对以下内容感兴趣:
我主要是为了测量使用在CUDA 6.0中引入的管理内存的优势。我会根据评论更新代码。谢谢!
如何测量CUDA中内核启动的开销在N. Wilt的《CUDA手册》书籍的6.1.1节中有所涉及。基本思想是启动一个空内核。以下是示例代码片段:
#include <stdio.h>
__global__ void EmptyKernel() { }
int main() {
const int N = 100000;
float time, cumulative_time = 0.f;
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
for (int i=0; i<N; i++) {
cudaEventRecord(start, 0);
EmptyKernel<<<1,1>>>();
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&time, start, stop);
cumulative_time = cumulative_time + time;
}
printf("Kernel launch overhead time: %3.5f ms \n", cumulative_time / N);
return 0;
}
0.00245毫秒
。<<<*,*>>>
。结果表明,随着启动的线程数量增加,计时时间并没有显著变化,这与书中的说法一致,即大部分时间都花费在驱动程序中。