--cudabacktrace= Possible values are 'all','none','kernel','memory','sync','other'. If tracing CUDA APIs, enable the collection of a backtrace when a CUDA API is invoked. When selected, significant runtime overhead may occur. Values may be combined using ','. Each value except 'none' may be appended with a threshold after ':'. Threshold is the duration, in nanoseconds, that CUDA APIs must execute before backtraces are collected, e.g. 'kernel:500'. Default value for each threshold is 80000ns (80us). Note that CPU sampling must be enabled. Default is 'none'. Application scope.
--cudabacktrace=
是一个选项参数,可能用于 NVIDIA 的性能分析工具 Nsight Systems。这个工具允许开发者对 CUDA 应用程序进行性能分析,从而帮助优化代码和找出性能瓶颈。
选项参数 --cudabacktrace=
允许用户指定在调用 CUDA API 时是否收集回溯(backtrace)信息。这是一个高级功能,可以帮助确定导致性能问题的具体位置,但它会引入显著的运行时开销,因此需要谨慎使用。
参数值及其含义
all
: 收集所有CUDA API调用的回溯信息。none
: 不收集任何CUDA API调用的回溯信息。kernel
: 仅为涉及CUDA内核的API调用收集回溯信息。memory
: 仅为涉及CUDA内存操作的API调用收集回溯信息。sync
: 仅为涉及CUDA同步操作的API调用收集回溯信息。other
: 收集除内核、内存、同步之外的其他CUDA API调用的回溯信息。
可以组合使用
可以通过逗号,
来组合多个值,例如:
kernel,memory
: 收集涉及内核和内存操作的API调用的回溯信息。
带有阈值
每个值(除了none
)都可以附加一个在其后面的阈值,该阈值指定了CUDA API必须执行的时间长度阈值(以纳秒计),只有当调用超过这个时间长度时,才会收集回溯信息。例如:
kernel:500
: 如果内核API调用执行时间超过500纳秒,则收集回溯。
默认情况下,每个阈值设定为80微秒(80000纳秒)。
使用场景和选择
- 默认情况: 默认值是
none
,即在正常情况下不收集任何回溯信息,这样可以避免额外的性能开销。 - 性能调试: 当需要深入理解CUDA程序性能问题时,可以启用特定类型的回溯收集。例如,如果你怀疑性能瓶颈与内存操作相关,你可以使用
memory
或者带有特定阈值的memory:threshold
。 - 调查特定API: 如果想要专注于某一类API调用,如同步调用,可以单独启用
sync
。 - 减少开销: 如果担心运行时开销,可以设置较高的阈值,这样只有较长时间的API调用才会记录回溯信息。
最终选择取决于具体的调试需求和性能权衡。请注意,由于收集完整的回溯信息可能会导致显著的性能降低,通常仅在开发和调试过程中使用,并且在实际部署的应用中禁用。此外,CPU采样必须被启用以支持这一功能。