我尝试在源代码上编写内核概要,并且需要在CUDA内核上分析多个指标。我已经尝试过使用CUDA组件的PAPI,但是它已经成功了。我还注意到了NVidia CUPTI API,但示例代码callback_metrics只为每个内核配置了一个度量标准,我对如何更改样本源代码以在多个度量下执行感到困惑。 PS:nvprof工具没有帮助,因为必须在我的源代码上进行profilling。
答案 0 :(得分:1)
CUPTI API使用多种技术从GPU收集数据。每种技术都可以限制在单个内核中收集哪些数据。为了收集更复杂的指标或多个指标CUPTI,必须多次重放内核启动。 CUPTI有一个称为内核重放的功能,可以在应用程序中多次透明地重放内核。从CUDA API的角度来看,内核的执行时间要长很多倍。可以通过调用
启用此功能CUptiResult CUPTIAPI cuptiEnableKernelReplayMode(CUcontext context);
这会将收集模式更改为CUPTI_EVENT_COLLECTION_MODE_KERNEL。
有关事件收集的其他信息,请参阅 cupti_events.h 和 CUPTI用户指南部分CUPTI Event API。