我是GPU编程的新手。我阅读了一些解释基本概念的材料。
但是,我想知道是否可以将一组指令或整个算法/二进制分配给特定的ALU,这样我可以确定这些指令仅由此ALU执行(因此,绕过系统自动处理并行化?)
我必须"基准" GPU上的各个ALU,关于它们之间的任何潜在计算延迟。因此,我想为几个特定的ALU分配一组(类似的)指令,测量执行这组指令所需的时间,并在有任何差异时比较结果。
一般情况下,我想检查GPU是否有某些竞争条件来源。我想到的第一个是不同ALU执行速度的潜在微小差异。也许你们知道其他潜在的竞争条件来源。
然而,由于我的目标与GPU(parllelization等)的典型使用相当直接,因此我很难看到如何使用常用工具在低级别上访问单独的ALU。 / p>
致以最诚挚的问候,
答案 0 :(得分:1)
GPU具有您无权访问的各个warp调度程序。
对于Fermi架构,例如,该设备有一个千兆线程调度程序,可将工作分配给不同的流式多处理器,内部的双扭曲调度程序将warp调度到各个内核。但这对用户来说是透明的。
您可以使用NVTX跟踪库来帮助您注释部分代码,以便随后通过Parallel Nsight跟踪进行分析。
您可以在
上的NVTX库中找到一些资料CUDA Pro Tip: Generate Custom Application Profile Timelines with NVTX
Optimizing Application Performance with CUDA Profiling Tools
以及Rob Farber撰写的“CUDA应用程序设计与开发”一书的第3章。
关于使用NVTX,请在此处查看我的问题: