曾经在cudaprof中为全局内存(gst_coherent,gst_incoherent,gld_coherent,gld_incoherent)分析计数器对我来说很有用,因为他们告诉我有多少未合并的全局读写数据。
现在,似乎只有“gst请求”和“gld请求”。这些是每个warp在mp 0上的总加载/存储量。如何确定我是否有未加入的读/写?我猜测如果请求被合并会有更少的请求。我是否应该弄清楚我对每个线程的期望值并进行比较?不幸的是,我的内核过于动态了。
答案 0 :(得分:1)
相干/非相干计数器与sm_10 / sm_11设备相关,其中访问必须对齐并合并以避免病态性能。在sm_12和sm_13上,硬件尝试将访问权限尽可能地合并到段事务中,而在sm_2x上,L1高速缓存提供了类似的功能,并且在不可能的情况下提供了额外的高速缓存。
理想情况下,您可以了解您正在阅读和编写的数据量,并将其与实现的性能进行比较,这将使您了解效率。但是,鉴于您的内核非常依赖于数据,您应该查看GTC2010的几个演示文稿,以了解分析器中提供的其他信息。我建议Fundamental Performance Optimizations for GPUs谈话,更重要的是,继续第一个谈话,Analysis-Driven Performance Optimization谈话。
您还可以考虑使用一些额外的计数器手动检测代码。