Mic*_*ney 4 c linux gpu driver performance-testing
我正在审查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负载.关于这一点的任何提示也将受到赞赏.
AnT*_*AnT 10
这样的事情只是为了保持一致(不一定适用于您的具体情况).例如,我可以将一组单比特标志描述为
#define FLAG_1 0x01
#define FLAG_2 0x02
#define FLAG_3 0x04
#define FLAG_4 0x08
Run Code Online (Sandbox Code Playgroud)
或者作为
#define FLAG_1 (1u << 0)
#define FLAG_2 (1u << 1)
#define FLAG_3 (1u << 2)
#define FLAG_4 (1u << 3)
Run Code Online (Sandbox Code Playgroud)
在后一种方法的第一行中,我没有必要转变0.但它看起来更加一致,并强调FLAG_1与其他旗帜具有相同性质的事实.并0充当一个不同的值的占位符,如果我有一天会改变它.
实际上,你可以看到正是带换档链接的代码通过0在定义DYN_OR_EN和DYN_RR_EN宏.
该方法可以扩展到单词内的多位字段,如下面(设计)示例中所示
// Bits 0-3 - lower counter, bits 4-7 - upper counter
#define LOWER_0  (0u << 0)
#define LOWER_1  (1u << 0)
#define LOWER_2  (2u << 0)
#define LOWER_3  (3u << 0)
#define UPPER_0  (0u << 4)
#define UPPER_1  (1u << 4)
#define UPPER_2  (2u << 4)
#define UPPER_3  (3u << 4)
unsigned packed_counters = LOWER_2 + UPPER_3; /* or `LOWER_2 | UPPER_3` */
Run Code Online (Sandbox Code Playgroud)
同样,按位移0位纯粹是为了视觉上的一致性.以及0价值观的转变.
实际上,你可以看到正是带换档链接的代码通过0在定义LC_XMIT_N_FTS和LC_XMIT_N_FTS_MASK宏.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           133 次  |  
        
|   最近记录:  |