Nvidia visual profiler在内核启动后未显示cudamaloc()

Nvidia visual profiler在内核启动后未显示cudamaloc(),cuda,nvidia,thrust,dynamic-parallelism,Cuda,Nvidia,Thrust,Dynamic Parallelism,我正在尝试编写一个几乎完全在GPU上运行的程序(与主机的交互很少)initKernel是从主机启动的第一个内核。我使用动态并行从initKernel启动连续的内核,其中两个是推力::排序(推力::设备,…) 在启动initKernel之前,我对主机代码执行cudamaloc(),它显示在可视化分析器的运行时API中。Visual profiler的运行时API中未显示出现在\uuuuu设备\uuuuuu函数和后续内核中的cudamaloc(在启动initKernel之后)。有人能帮我理解为什么

我正在尝试编写一个几乎完全在GPU上运行的程序(与主机的交互很少)
initKernel
是从主机启动的第一个内核。我使用动态并行从
initKernel
启动连续的内核,其中两个是
推力::排序(推力::设备,…)

在启动
initKernel
之前,我对主机代码执行
cudamaloc()
,它显示在可视化分析器的运行时API中。Visual profiler的运行时API中未显示出现在
\uuuuu设备\uuuuuu
函数和后续内核中的
cudamaloc
(在启动
initKernel
之后)。有人能帮我理解为什么我不能在可视探查器中看到
cudamaloc
s吗

谢谢你抽出时间

有人能帮我理解为什么我不能在视觉分析器中看到cudaMallocs吗

因为这是该工具的一个记录限制。从:

VisualProfiler时间线不显示从设备启动内核中调用的CUDAAPI调用

有人能帮我理解为什么我不能在视觉分析器中看到cudaMallocs吗

因为这是该工具的一个记录限制。从:

VisualProfiler时间线不显示从设备启动内核中调用的CUDAAPI调用


谢谢你提供的信息。您能推荐一个技巧(或技巧)来识别此类Cudamaloc()相关热点吗?例如,当我从设备中使用推力::sort()时,我意识到每次调用推力::sort()内核时,都会调用cudamaloc()来分配一个大的临时缓冲区。当从设备代码中调用推力::sort()时,有没有办法找出这些特定cudaMallocs所花费的时间?推力和cub都提供了使用您自己的分配器的可能性。这对幼兽是强制性的,对推力是可选的。如果您不喜欢推力的
cudamaloc
行为,您可以研究通过自定义分配器使用推力,或者只使用cub进行设备代码排序。我不知道如何使设备API Cudamaloc出现在VisualProfiler时间线中,就像我不知道如何使任何其他设备级指令出现一样。不过,您可以使用来获得想法。是的,几天前,我在推力::sort()中研究了自定义分配器的使用。我在internet上找到的有关自定义分配器的示例给出了几个编译时错误(当集成到VisualStudio项目中时)。显然,这并不是那么简单。我不能使用cub,因为我需要对结构数组进行排序。谢谢你的链接。谢谢你的信息。您能推荐一个技巧(或技巧)来识别此类Cudamaloc()相关热点吗?例如,当我从设备中使用推力::sort()时,我意识到每次调用推力::sort()内核时,都会调用cudamaloc()来分配一个大的临时缓冲区。当从设备代码中调用推力::sort()时,有没有办法找出这些特定cudaMallocs所花费的时间?推力和cub都提供了使用您自己的分配器的可能性。这对幼兽是强制性的,对推力是可选的。如果您不喜欢推力的
cudamaloc
行为,您可以研究通过自定义分配器使用推力,或者只使用cub进行设备代码排序。我不知道如何使设备API Cudamaloc出现在VisualProfiler时间线中,就像我不知道如何使任何其他设备级指令出现一样。不过,您可以使用来获得想法。是的,几天前,我在推力::sort()中研究了自定义分配器的使用。我在internet上找到的有关自定义分配器的示例给出了几个编译时错误(当集成到VisualStudio项目中时)。显然,这并不是那么简单。我不能使用cub,因为我需要对结构数组进行排序。谢谢你的链接。