如何在Linux上访问GPU寄存器

时间:2018-01-05 21:43:27

标签: c linux performance-testing performancecounter gpu-programming

我试图访问AMD HD7000系列卡上的GPU寄存器。我有传感器连接到GPU电源输入和消耗可以测量。我想开发一个Linux C ++应用程序来访问GPU的性能计数器,以根据GPU事件/操作评估功耗。我熟悉C和C ++,但我不熟悉操作系统,而且我不确定从哪里开始执行这样的任务。

我有一张PDF。 AMD 15h系列型号30h-3Fh的Bios和内核开发人员指南位于此处: https://support.amd.com/TechDocs/49125_15h_Models_30h-3Fh_BKDG.pdf

在链接的文档中,在第106页上,描述了性能计数器。计数器必须在开始计数之前通过控制寄存器设置。在页715,计数器更详细地定义。

本文档未列出内存偏移量,因此我查看了开源的AMD Linux 4.14.12驱动程序。在/drivers/gpu/drm/amd/amdgpu/sid.h第1256行,我发现性能计数器地址为0x2688:

#define CB_PERFCOUNTER0_SELECT0     0x2688

http://elixir.free-electrons.com/linux/v4.14.12/source/drivers/gpu/drm/amd/amdgpu/sid.h#L1256

此外,开始和停止计数器整数开始行1457:

#define PERFCOUNTER_START     (23 << 0)
#define PERFCOUNTER_STOP      (24 << 0)

http://elixir.free-electrons.com/linux/v4.14.12/source/drivers/gpu/drm/amd/amdgpu/sid.h#L1457

我假设CB_PERFCOUNTER定义是相关地址,可以用作GPU寄存器存储单元的偏移量。我在互联网上搜索得很多,而且有很多资源,虽然我很难评估每个资源是否有任何相关信息或者整个过程如何适应整个过程。任何对材料的直接解释或参考都将不胜感激。

0 个答案:

没有答案