我正在开发一个用 OpenCL 编写并在 Fusion APU 上运行的程序(一个芯片上的 CPU+GPU)。我想获得一些性能计数器,例如指令编号、分支编号等。我手头有两个工具:AMD APP Profiler 和 CodeAnalyst。当我使用APP Profiler时,我发现它似乎只能为GPU提供指令计数器,不能为CPU提供指令计数器。然后我使用 CodeAnalyst,但随后出现了三个混淆。在 App Profiler 上,它可以给出 ALUInsts 的数量(即每个工作项执行的 ALU 指令的数量)大约是 70000。GPU 上的整个线程空间有 8192 个线程,所以我直观地认为有 70000 * 8192 条指令执行显卡。那正确吗?当我使用 CodeAnalyst 在 CPU 部分测量同一程序的指令时,它只是给出了“Ret inst”、“Ret branch”这样的计数器,但我不确定一件事:这个程序同时在 CPU 和 GPU 上运行,这些计数器有什么用?仅适用于 CPU,仅适用于 GPU?还是总和?不管这些计数器是做什么用的,我发现Ret Inst(即退役指令)的值大约是40000,对于整个程序来说似乎太小了,我猜一个程序的指令应该在数十亿的数量级,它怎么可能只有4w?附图显示了结果。怎么可能只有4w?附图显示了结果。怎么可能只有4w?附图显示了结果。 有没有人可以帮助我解决这些困惑,我在这里只是一个tyro,希望得到大家的帮助。谢谢!