【发布时间】:2018-06-13 12:41:35
【问题描述】:
我正在审查适用于 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)
https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/amdgpu/sid.h#L1441
另外,我正在学习访问 AMD GPU 的性能计数器寄存器以计算 GPU 负载。对此的任何提示也将不胜感激。
【问题讨论】:
-
这可能是由某种宏自动生成的。它可能有一个用于位域类型值的位移版本以及一个枚举类型版本。
-
我不排除这只是代码编写方式的一个错误。我非常精通这类事情,我想不出一个很好的理由来写这个。它可能会从一个写得不好的自动代码生成器中掉出来,但即使这样也相当草率。
-
@Zalman Stern:不。如果这是为了将整数值放入位偏移
0处的手动实现的位域中,那么移位0是一种非常好的编程实践。我会尽可能声明这是在任何自尊代码中必需。 -
好的,我可以看到,但在这种情况下,我可能会继续使用位域掩码对其进行屏蔽。
标签: c linux driver gpu performance-testing