我如何知道 CUDA 程序中是否存在 nvprof?
How do I know the presence of nvprof inside CUDA program?
我有一个小的 CUDA 程序,我想用 nvprof
进行分析。问题是我想以
这样的方式编写程序
- 当我 运行
nvprof my_prog
时,它会调用 cudaProfilerStart
和 cudaProfilerStop
。
- 当我 运行
my_prog
时,它不会调用任何上述 API,因此可以摆脱分析开销。
问题因此变成了如何让我的代码在 运行 时知道 nvprof
的存在,而不需要额外的命令行参数。
您是否测量并验证了 cudaProfilerStart/Stop 调用在未附加 nvprof 时引入了可测量的开销?我非常怀疑是这种情况。
如果这是一个问题,您可以使用 #ifdef
指令从您的发布版本中排除这些调用。
无法检测 nvprof 是否 运行,因为这违背了分析的目的 - 如果被分析的应用程序 "senses" 分析器并改变了它的行为。
我有一个小的 CUDA 程序,我想用 nvprof
进行分析。问题是我想以
- 当我 运行
nvprof my_prog
时,它会调用cudaProfilerStart
和cudaProfilerStop
。 - 当我 运行
my_prog
时,它不会调用任何上述 API,因此可以摆脱分析开销。
问题因此变成了如何让我的代码在 运行 时知道 nvprof
的存在,而不需要额外的命令行参数。
您是否测量并验证了 cudaProfilerStart/Stop 调用在未附加 nvprof 时引入了可测量的开销?我非常怀疑是这种情况。
如果这是一个问题,您可以使用 #ifdef
指令从您的发布版本中排除这些调用。
无法检测 nvprof 是否 运行,因为这违背了分析的目的 - 如果被分析的应用程序 "senses" 分析器并改变了它的行为。