如何在CUDA中测量内核启动的开销
我想测量CUDA中内核启动的开销 我知道有各种参数会影响这种开销。我对以下方面感兴趣:如何在CUDA中测量内核启动的开销,cuda,Cuda,我想测量CUDA中内核启动的开销 我知道有各种参数会影响这种开销。我对以下方面感兴趣: 创建的线程数 正在复制的数据的大小 我这样做主要是为了衡量使用CUDA6.0中引入的托管内存的优势。我将用我开发的代码和评论更新这个问题。谢谢 N.Wilt的《CUDA手册》第6.1.1节介绍了如何测量CUDA内核启动的开销。基本思想是启动一个空内核。下面是一个示例代码片段 #include <stdio.h> __global__ void EmptyKernel() { } int m
- 创建的线程数
- 正在复制的数据的大小
我这样做主要是为了衡量使用CUDA6.0中引入的托管内存的优势。我将用我开发的代码和评论更新这个问题。谢谢 N.Wilt的《CUDA手册》第6.1.1节介绍了如何测量CUDA内核启动的开销。基本思想是启动一个空内核。下面是一个示例代码片段
#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;
}
#包括
__全局{void EmptyKernel(){}
int main(){
常数N=100000;
浮动时间,累计_时间=0.f;
cudaEvent\u t启动、停止;
cudaEventCreate(&start);
cudaEventCreate(&stop);
对于(int i=0;i<p>),也许您应该对弗吉尼亚大学的这些测试结果感兴趣:
内存传输开销:
内核启动开销:
它们的测量方法与Jackolanten提案类似。您可能希望看看N.Wilt的《CUDA手册》第6.1.1节。CUDA手册并发目录中的源代码有测量内核启动开销的应用程序。我没有测试托管内存的含义,但在GTC听说驱动程序复制在同步时将所有托管内存返回到主机内存。因此,同步内核启动开销应随着分配更多托管内存而增加。是的,这解决了线程数部分的开销。我将尝试实现不同大小的内存。谢谢!