我实现了一些 CUDA 代码。它运行良好,但算法本质上会产生强烈的线程分歧。这是意料之中的。
稍后我将尝试减少分歧。但目前我很高兴能够测量它。
是否有一种简单的方法(最好使用运行时 API 调用或 CLI 工具)来检查我最初计划的扭曲和/或线程中有多少仍然处于活动状态?
我实现了一些 CUDA 代码。它运行良好,但算法本质上会产生强烈的线程分歧。这是意料之中的。
稍后我将尝试减少分歧。但目前我很高兴能够测量它。
是否有一种简单的方法(最好使用运行时 API 调用或 CLI 工具)来检查我最初计划的扭曲和/或线程中有多少仍然处于活动状态?
除了评论中给出的解决方案之外,您还可以使用它Nsight Compute
来分析您的内核。您可以尝试其 CLI,然后在其 GUI 中查看结果,例如:
ncu --export output --force-overwrite --target-processes application-only \
--replay-mode kernel --kernel-regex-base function --launch-skip-before-match 0 \
--section InstructionStats \
--section Occupancy \
--section SchedulerStats \
--section SourceCounters \
--section WarpStateStats \
--sampling-interval auto \
--sampling-max-passes 5 \
--profile-from-start 1 --cache-control all --clock-control base \
--apply-rules yes --import-source no --check-exit-code yes \
your-appication [arguments]
然后,在它的 GUI 中,您可以看到一些有用的信息。例如,在源计数器部分中,您可以看到如下内容: