gpt4 book ai didi

cudaEventElapsedTime 和 nvprof 运行时

转载 作者:行者123 更新时间:2023-12-05 05:07:57 32 4
gpt4 key购买 nike

考虑以下内核

__global__ void elementAccess( int *a, int N )
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
int z = a[ i ];
}

调用者

cudaEvent_t start, stop;
float elapsedTime;
cudaEventCreate(&start);
cudaEventRecord(start,0);

elementAccess<<< 1, 1>>>( d_A, 1 );

cudaEventCreate(&stop);
cudaEventRecord(stop,0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&elapsedTime, start,stop);

printf("Elapsed time : %f ms\n" ,elapsedTime);

其中 d_A 是一个整数数组。

当我在终端中运行代码时,我看到了

Elapsed time : 0.015328 ms

当我使用 nvprof --metrics SOME_METRICS -o e.nvvp ./element_access 对其进行分析时,我发现内核持续时间为 2.95 us

那么,为什么时钟事件说内核运行时间是 15us 而 nvvp 说是 2.95us?

它们是两个不同的东西吗?还是缺少其他东西?

最佳答案

您的第一次测量(基于运行时间)包括内核启动开销。第二个(基于 CUDA 事件)主要排除启动开销。

鉴于您的内核绝对不执行任何操作(单个内存负载将因缺少后续使用该值而被优化掉),耗时几乎完全由启动开销组成似乎是合理的。

关于cudaEventElapsedTime 和 nvprof 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58657719/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com