gpt4 book ai didi

cuda - 为什么第一个cudaMalloc是唯一的瓶颈?

转载 作者:行者123 更新时间:2023-12-04 23:45:10 30 4
gpt4 key购买 nike

我定义了这个功能:

void cuda_entering_function(...)
{
StructA *host_input, *dev_input;
StructB *host_output, *dev_output;

host_input = (StructA*)malloc(sizeof(StructA));
host_output = (StructB*)malloc(sizeof(StructB));
cudaMalloc(&dev_input, sizeof(StructA));
cudaMalloc(&dev_output, sizeof(StructB));

... some more other cudaMalloc()s and cudaMemcpy()s ...

cudaKernel<< ... >>(dev_input, dev_output);

...
}


在我的程序中,该函数被调用了几次(大约5到15次),我使用 gettimeofday()测量了该程序的性能。

然后我发现 cuda_entering_function()的瓶颈是整个程序中的第一个 cudaMalloc()-第一个 cudaMalloc()。第一个 cuda_entering_function()消耗了 cudaMalloc()的总执行时间的95%以上,当我更改了第一个 cudaMalloc()的分配内存的大小或更改了 cudaMalloc()的执行顺序时,也会发生这种情况s。

原因是什么,有什么办法可以减少第一次CUDA的分配时间?

最佳答案

第一个cudaMalloc也负责设备的初始化,因为它是涉及该设备的任何函数的第一个调用。这就是为什么您会受到打击:这是由于使用CUDA和GPU而造成的开销。您应该确保您的应用程序可以获得足够的加速,以补偿开销。

通常,人们使用对初始化函数的调用来设置他们的设备。在this答案中,您可以看到对cudaFree(0)的调用显然是这样做的规范方法。 This sample显示了cudaSetDevice的用法,如果您曾经在具有多个支持CUDA的设备的机器上工作,这可能是一个好习惯。

关于cuda - 为什么第一个cudaMalloc是唯一的瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346395/

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