如何在CUDA中测量内核启动的开销

如何在CUDA中测量内核启动的开销,cuda,Cuda,我想测量CUDA中内核启动的开销 我知道有各种参数会影响这种开销。我对以下方面感兴趣: 创建的线程数 正在复制的数据的大小 我这样做主要是为了衡量使用CUDA6.0中引入的托管内存的优势。我将用我开发的代码和评论更新这个问题。谢谢 N.Wilt的《CUDA手册》第6.1.1节介绍了如何测量CUDA内核启动的开销。基本思想是启动一个空内核。下面是一个示例代码片段 #include <stdio.h> __global__ void EmptyKernel() { } int m

我想测量CUDA中内核启动的开销

我知道有各种参数会影响这种开销。我对以下方面感兴趣:

  • 创建的线程数
  • 正在复制的数据的大小

我这样做主要是为了衡量使用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听说驱动程序复制在同步时将所有托管内存返回到主机内存。因此,同步内核启动开销应随着分配更多托管内存而增加。是的,这解决了线程数部分的开销。我将尝试实现不同大小的内存。谢谢!