小编Mic*_*ney的帖子

如何在 Linux 上访问 GPU 寄存器

我正在尝试访问 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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

我假设 CB_PERFCOUNTER 定义是相关地址,并且可以用作 GPU 寄存器内存位置的偏移量。我在互联网上搜索了很多,并且有很多资源,尽管我很难评估每个资源是否有任何相关信息或任何步骤如何适合整个流程。任何直接的解释或对材料的引用将不胜感激。

c linux gpu performancecounter performance-testing

5
推荐指数
0
解决办法
437
查看次数

比特移位的目的是什么?

我正在审查Linux的开源AMD GPU驱动程序.我注意到了以前没见过的东西,我想知道目的.在sid.h文件的第1441行,有一系列定义是整数被0左移位.这不会导致原始整数被操作吗?

这是摘录和头部的链接

    #define VGT_EVENT_INITIATOR                      0xA2A4
    #define SAMPLE_STREAMOUTSTATS1                   (1 << 0)
    #define SAMPLE_STREAMOUTSTATS2                   (2 << 0)
    #define SAMPLE_STREAMOUTSTATS3                   (3 << 0)
Run Code Online (Sandbox Code Playgroud)

https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/amdgpu/sid.h#L1441

此外,我正在学习访问AMD GPU的性能计数器寄存器,以计算GPU负载.关于这一点的任何提示也将受到赞赏.

c linux gpu driver performance-testing

4
推荐指数
1
解决办法
133
查看次数

标签 统计

c ×2

gpu ×2

linux ×2

performance-testing ×2

driver ×1

performancecounter ×1