带和不带-lineinfo标志时内核的寄存器使用计数不同

问题描述 投票:0回答:1

我有一个在 CUDA 上运行的简单矩阵乘法内核。

当使用

-lineinfo
命令和
--ptxas-options -v
一起编译时,寄存器计数显示为 28,而没有
-lineinfo
选项时,寄存器计数为 20。

使用的确切命令:

nvcc -g -G --ptxas-options -v -arch=sm_86 -o mmul_dbg mmul.cu

nvcc -lineinfo --ptxas-options -v -arch=sm_86 -o mmul_ncu mmul.cu

我也检查过

nvcc --ptxas-options -v -arch=sm_86 -o mmul_dbg mmul.cu

它产生 20 个寄存器。

__global__ void matrixMul(const int *a, const int *b, int *c, int N) {
  // Compute each thread's global row and column index
  int row = blockIdx.y * blockDim.y + threadIdx.y;
  int col = blockIdx.x * blockDim.x + threadIdx.x;

  // Iterate over row, and down column
  c[row * N + col] = 0;
  for (int k = 0; k < N; k++) {
    // Accumulate results for a single element
    c[row * N + col] += a[row * N + k] * b[k * N + col];
  }
}

寄存器数量增加的原因可能是什么?

编辑:nvcc 是 12.3
编辑(2):删除图像并添加文本输出

$ nvcc --ptxas-options -v -lineinfo -o wlineinfo -arch=sm_86 m mul.cu  
ptxas info    : 0 bytes gmem 
ptxas info    : Compiling entry function '_Z9matrixMulPKiS0_Pii' for 'sm_86' 
ptxas info    : Function properties for _Z9matrixMulPKiS0_Pii
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads   
ptxas info    : Used 28 registers, 380 bytes cmem[0]

$ nvcc --ptxas-options -v -g -G -o wlineinfo -arch=sm_86 mmul.cu 
ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function '_Z9matrixMulPKiS0_Pii' for 'sm_86'
ptxas info    : Function properties for _Z9matrixMulPKiS0_Pii
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 20 registers, 380 bytes cmem[0]
cuda nvcc
1个回答
0
投票

造成差异的原因是使用了

-G
开关。这会选择在调试模式下编译。

在调试模式下,许多/大多数优化被禁用。编译器可能使用但被禁用的一种优化是循环展开。

在非

-G
情况下,编译器实现循环展开。内核中的指令总数要高得多,循环展开对性能的好处之一是重新排序加载指令,但是这通常会增加寄存器压力

因此,由于非

-G
情况下的循环展开和指令重新排序,编译器使用额外的寄存器来携带加载数据。答案中的字符限制使我无法提供这两种情况的完整输出,但您可以使用
cuobjdump
工具自行获取。这是展开/非
-G
情况的输出的一部分(第一部分):

# cuobjdump -sass wlineinfo

Fatbin elf code:
================
arch = sm_86
code version = [1,7]
host = linux
compile_size = 64bit
identifier = t128.cu

        code for sm_86
                Function : _Z9matrixMulPKiS0_Pii
        .headerflags    @"EF_CUDA_TEXMODE_UNIFIED EF_CUDA_64BIT_ADDRESS EF_CUDA_SM86 EF_CUDA_VIRTUAL_SM(EF_CUDA_SM86)"
        /*0000*/                   MOV R1, c[0x0][0x28] ;                       /* 0x00000a0000017a02 */
                                                                                /* 0x000fc40000000f00 */
        /*0010*/                   S2R R9, SR_CTAID.Y ;                         /* 0x0000000000097919 */
                                                                                /* 0x000e220000002600 */
        /*0020*/                   MOV R7, 0x4 ;                                /* 0x0000000400077802 */
                                                                                /* 0x000fe20000000f00 */
        /*0030*/                   ULDC.64 UR4, c[0x0][0x118] ;                 /* 0x0000460000047ab9 */
                                                                                /* 0x000fe40000000a00 */
        /*0040*/                   S2R R0, SR_TID.Y ;                           /* 0x0000000000007919 */
                                                                                /* 0x000e280000002200 */
        /*0050*/                   S2R R8, SR_CTAID.X ;                         /* 0x0000000000087919 */
                                                                                /* 0x000e680000002500 */
        /*0060*/                   S2R R3, SR_TID.X ;                           /* 0x0000000000037919 */
                                                                                /* 0x000e620000002100 */
        /*0070*/                   IMAD R9, R9, c[0x0][0x4], R0 ;               /* 0x0000010009097a24 */
                                                                                /* 0x001fe200078e0200 */
        /*0080*/                   MOV R0, c[0x0][0x178] ;                      /* 0x00005e0000007a02 */
                                                                                /* 0x000fc60000000f00 */
        /*0090*/                   IMAD R9, R9, c[0x0][0x178], RZ ;             /* 0x00005e0009097a24 */
                                                                                /* 0x000fe200078e02ff */
        /*00a0*/                   ISETP.GE.AND P0, PT, R0, 0x1, PT ;           /* 0x000000010000780c */
                                                                                /* 0x000fe20003f06270 */
        /*00b0*/                   IMAD R8, R8, c[0x0][0x0], R3 ;               /* 0x0000000008087a24 */
                                                                                /* 0x002fca00078e0203 */
        /*00c0*/                   IADD3 R2, R8, R9, RZ ;                       /* 0x0000000908027210 */
                                                                                /* 0x000fca0007ffe0ff */
        /*00d0*/                   IMAD.WIDE R2, R2, R7, c[0x0][0x170] ;        /* 0x00005c0002027625 */
                                                                                /* 0x000fca00078e0207 */
        /*00e0*/                   STG.E [R2.64], RZ ;                          /* 0x000000ff02007986 */
                                                                                /* 0x0001e2000c101904 */
        /*00f0*/              @!P0 EXIT ;                                       /* 0x000000000000894d */
                                                                                /* 0x000fea0003800000 */
        /*0100*/                   IADD3 R4, R0, -0x1, RZ ;                     /* 0xffffffff00047810 */
                                                                                /* 0x000fe40007ffe0ff */
        /*0110*/                   MOV R15, RZ ;                                /* 0x000000ff000f7202 */
                                                                                /* 0x000fe40000000f00 */
        /*0120*/                   ISETP.GE.U32.AND P0, PT, R4, 0x3, PT ;       /* 0x000000030400780c */
                                                                                /* 0x000fe40003f06070 */
        /*0130*/                   LOP3.LUT R6, R0, 0x3, RZ, 0xc0, !PT ;        /* 0x0000000300067812 */
                                                                                /* 0x000fe400078ec0ff */
        /*0140*/                   MOV R11, RZ ;                                /* 0x000000ff000b7202 */
                                                                                /* 0x000fd20000000f00 */
        /*0150*/              @!P0 BRA 0xc80 ;                                  /* 0x00000b2000008947 */
                                                                                /* 0x000fea0003800000 */
        /*0160*/                   IADD3 R10, -R6, c[0x0][0x178], RZ ;          /* 0x00005e00060a7a10 */
                                                                                /* 0x000fe20007ffe1ff */
        /*0170*/                   IMAD.WIDE R4, R9, R7.reuse, c[0x0][0x160] ;  /* 0x0000580009047625 */
                                                                                /* 0x080fe200078e0207 */
        /*0180*/                   MOV R15, RZ ;                                /* 0x000000ff000f7202 */
                                                                                /* 0x000fe40000000f00 */
        /*0190*/                   ISETP.GT.AND P0, PT, R10, RZ, PT ;           /* 0x000000ff0a00720c */
                                                                                /* 0x000fe20003f04270 */
        /*01a0*/                   IMAD.WIDE R12, R8, R7, c[0x0][0x168] ;       /* 0x00005a00080c7625 */
                                                                                /* 0x000fe200078e0207 */
        /*01b0*/                   IADD3 R4, P1, R4, 0x8, RZ ;                  /* 0x0000000804047810 */
                                                                                /* 0x000fe40007f3e0ff */
        /*01c0*/                   MOV R11, RZ ;                                /* 0x000000ff000b7202 */
                                                                                /* 0x000fe40000000f00 */
        /*01d0*/                   IADD3.X R5, RZ, R5, RZ, P1, !PT ;            /* 0x00000005ff057210 */
                                                                                /* 0x000fce0000ffe4ff */
        /*01e0*/              @!P0 BRA 0xad0 ;                                  /* 0x000008e000008947 */
                                                                                /* 0x000fea0003800000 */
        /*01f0*/                   ISETP.GT.AND P1, PT, R10, 0xc, PT ;          /* 0x0000000c0a00780c */
                                                                                /* 0x000fe40003f24270 */
        /*0200*/                   PLOP3.LUT P0, PT, PT, PT, PT, 0x80, 0x0 ;    /* 0x000000000000781c */
                                                                                /* 0x000fd60003f0f070 */
        /*0210*/              @!P1 BRA 0x7a0 ;                                  /* 0x0000058000009947 */
                                                                                /* 0x000fea0003800000 */
        /*0220*/                   PLOP3.LUT P0, PT, PT, PT, PT, 0x8, 0x0 ;     /* 0x000000000000781c */
                                                                                /* 0x000fc40003f0e170 */
        /*0230*/                   LDG.E R14, [R12.64] ;                        /* 0x000000040c0e7981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0240*/                   LDG.E R16, [R4.64+-0x8] ;                    /* 0xfffff80404107981 */
                                                                                /* 0x000ea4000c1e1900 */
        /*0250*/                   IMAD R19, R14, R16, R15 ;                    /* 0x000000100e137224 */
                                                                                /* 0x004fe400078e020f */
        /*0260*/                   IMAD.WIDE R14, R0, 0x4, R12 ;                /* 0x00000004000e7825 */
                                                                                /* 0x008fc600078e020c */
        /*0270*/                   STG.E [R2.64], R19 ;                         /* 0x0000001302007986 */
                                                                                /* 0x0003e8000c101904 */
        /*0280*/                   LDG.E R16, [R14.64] ;                        /* 0x000000040e107981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0290*/                   LDG.E R17, [R4.64+-0x4] ;                    /* 0xfffffc0404117981 */
                                                                                /* 0x000ea4000c1e1900 */
        /*02a0*/                   IMAD R21, R16, R17, R19 ;                    /* 0x0000001110157224 */
                                                                                /* 0x004fc400078e0213 */
        /*02b0*/                   IMAD.WIDE R16, R0, 0x4, R14 ;                /* 0x0000000400107825 */
                                                                                /* 0x000fc600078e020e */
        /*02c0*/                   STG.E [R2.64], R21 ;                         /* 0x0000001502007986 */
                                                                                /* 0x0005e8000c101904 */
        /*02d0*/                   LDG.E R18, [R16.64] ;                        /* 0x0000000410127981 */
                                                                                /* 0x000ee8000c1e1900 */
        /*02e0*/                   LDG.E R12, [R4.64] ;                         /* 0x00000004040c7981 */
                                                                                /* 0x000ee4000c1e1900 */
        /*02f0*/                   IMAD R23, R18, R12, R21 ;                    /* 0x0000000c12177224 */
                                                                                /* 0x008fc400078e0215 */
        /*0300*/                   IMAD.WIDE R12, R0, 0x4, R16 ;                /* 0x00000004000c7825 */
                                                                                /* 0x000fc600078e0210 */
        /*0310*/                   STG.E [R2.64], R23 ;                         /* 0x0000001702007986 */
                                                                                /* 0x0007e8000c101904 */
        /*0320*/                   LDG.E R18, [R12.64] ;                        /* 0x000000040c127981 */
                                                                                /* 0x000e68000c1e1900 */
        /*0330*/                   LDG.E R14, [R4.64+0x4] ;                     /* 0x00000404040e7981 */
                                                                                /* 0x000e64000c1e1900 */
        /*0340*/                   IMAD R19, R18, R14, R23 ;                    /* 0x0000000e12137224 */
                                                                                /* 0x002fc400078e0217 */
        /*0350*/                   IMAD.WIDE R14, R0, 0x4, R12 ;                /* 0x00000004000e7825 */
                                                                                /* 0x000fc600078e020c */
        /*0360*/                   STG.E [R2.64], R19 ;                         /* 0x0000001302007986 */
                                                                                /* 0x0003e8000c101904 */
        /*0370*/                   LDG.E R18, [R14.64] ;                        /* 0x000000040e127981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0380*/                   LDG.E R16, [R4.64+0x8] ;                     /* 0x0000080404107981 */
                                                                                /* 0x000ea4000c1e1900 */
        /*0390*/                   IMAD R21, R18, R16, R19 ;                    /* 0x0000001012157224 */
                                                                                /* 0x004fc400078e0213 */
        /*03a0*/                   IMAD.WIDE R16, R0, 0x4, R14 ;                /* 0x0000000400107825 */
                                                                                /* 0x000fc600078e020e */
        /*03b0*/                   STG.E [R2.64], R21 ;                         /* 0x0000001502007986 */
                                                                                /* 0x0005e8000c101904 */
        /*03c0*/                   LDG.E R18, [R16.64] ;                        /* 0x0000000410127981 */
                                                                                /* 0x000ee8000c1e1900 */
        /*03d0*/                   LDG.E R12, [R4.64+0xc] ;                     /* 0x00000c04040c7981 */
                                                                                /* 0x000ee4000c1e1900 */
        /*03e0*/                   IMAD R23, R18, R12, R21 ;                    /* 0x0000000c12177224 */
                                                                                /* 0x008fc400078e0215 */
        /*03f0*/                   IMAD.WIDE R12, R0, 0x4, R16 ;                /* 0x00000004000c7825 */
                                                                                /* 0x000fc600078e0210 */
        /*0400*/                   STG.E [R2.64], R23 ;                         /* 0x0000001702007986 */
                                                                                /* 0x0007e8000c101904 */
        /*0410*/                   LDG.E R18, [R12.64] ;                        /* 0x000000040c127981 */
                                                                                /* 0x000e68000c1e1900 */
        /*0420*/                   LDG.E R14, [R4.64+0x10] ;                    /* 0x00001004040e7981 */
                                                                                /* 0x000e64000c1e1900 */
        /*0430*/                   IMAD R19, R18, R14, R23 ;                    /* 0x0000000e12137224 */
                                                                                /* 0x002fc400078e0217 */
        /*0440*/                   IMAD.WIDE R14, R0, 0x4, R12 ;                /* 0x00000004000e7825 */
                                                                                /* 0x000fc600078e020c */
        /*0450*/                   STG.E [R2.64], R19 ;                         /* 0x0000001302007986 */
                                                                                /* 0x0003e8000c101904 */
        /*0460*/                   LDG.E R18, [R14.64] ;                        /* 0x000000040e127981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0470*/                   LDG.E R16, [R4.64+0x14] ;                    /* 0x0000140404107981 */
                                                                                /* 0x000ea4000c1e1900 */
        /*0480*/                   IMAD R21, R18, R16, R19 ;                    /* 0x0000001012157224 */
                                                                                /* 0x004fc400078e0213 */
        /*0490*/                   IMAD.WIDE R16, R0, 0x4, R14 ;                /* 0x0000000400107825 */
                                                                                /* 0x000fc600078e020e */
        /*04a0*/                   STG.E [R2.64], R21 ;                         /* 0x0000001502007986 */
                                                                                /* 0x0005e8000c101904 */
        /*04b0*/                   LDG.E R18, [R16.64] ;                        /* 0x0000000410127981 */
                                                                                /* 0x000ee8000c1e1900 */
        /*04c0*/                   LDG.E R12, [R4.64+0x18] ;                    /* 0x00001804040c7981 */
                                                                                /* 0x000ee4000c1e1900 */
        /*04d0*/                   IMAD R23, R18, R12, R21 ;                    /* 0x0000000c12177224 */
                                                                                /* 0x008fc400078e0215 */
        /*04e0*/                   IMAD.WIDE R12, R0, 0x4, R16 ;                /* 0x00000004000c7825 */
                                                                                /* 0x000fc600078e0210 */
        /*04f0*/                   STG.E [R2.64], R23 ;                         /* 0x0000001702007986 */
                                                                                /* 0x0007e8000c101904 */
        /*0500*/                   LDG.E R18, [R12.64] ;                        /* 0x000000040c127981 */
                                                                                /* 0x000e68000c1e1900 */
        /*0510*/                   LDG.E R14, [R4.64+0x1c] ;                    /* 0x00001c04040e7981 */
                                                                                /* 0x000e64000c1e1900 */
        /*0520*/                   IMAD R19, R18, R14, R23 ;                    /* 0x0000000e12137224 */
                                                                                /* 0x002fc400078e0217 */
        /*0530*/                   IMAD.WIDE R14, R0, 0x4, R12 ;                /* 0x00000004000e7825 */
                                                                                /* 0x000fc600078e020c */
        /*0540*/                   STG.E [R2.64], R19 ;                         /* 0x0000001302007986 */
                                                                                /* 0x000fe8000c101904 */
        /*0550*/                   LDG.E R18, [R14.64] ;                        /* 0x000000040e127981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0560*/                   LDG.E R16, [R4.64+0x20] ;                    /* 0x0000200404107981 */
                                                                                /* 0x000ea4000c1e1900 */
        /*0570*/                   IMAD R21, R18, R16, R19 ;                    /* 0x0000001012157224 */
                                                                                /* 0x004fc400078e0213 */
        /*0580*/                   IMAD.WIDE R16, R0, 0x4, R14 ;                /* 0x0000000400107825 */
                                                                                /* 0x000fc600078e020e */
        /*0590*/                   STG.E [R2.64], R21 ;                         /* 0x0000001502007986 */
                                                                                /* 0x0003e8000c101904 */
        /*05a0*/                   LDG.E R18, [R16.64] ;                        /* 0x0000000410127981 */
                                                                                /* 0x000ee8000c1e1900 */
        /*05b0*/                   LDG.E R12, [R4.64+0x24] ;                    /* 0x00002404040c7981 */
                                                                                /* 0x000ee4000c1e1900 */
        /*05c0*/                   IMAD R23, R18, R12, R21 ;                    /* 0x0000000c12177224 */
                                                                                /* 0x008fc400078e0215 */
        /*05d0*/                   IMAD.WIDE R12, R0, 0x4, R16 ;                /* 0x00000004000c7825 */
                                                                                /* 0x000fc600078e0210 */
        /*05e0*/                   STG.E [R2.64], R23 ;                         /* 0x0000001702007986 */
                                                                                /* 0x0005e8000c101904 */
        /*05f0*/                   LDG.E R18, [R12.64] ;                        /* 0x000000040c127981 */
                                                                                /* 0x000ee8000c1e1900 */
        /*0600*/                   LDG.E R14, [R4.64+0x28] ;                    /* 0x00002804040e7981 */
                                                                                /* 0x000ee4000c1e1900 */
        /*0610*/                   IMAD R25, R18, R14, R23 ;                    /* 0x0000000e12197224 */
                                                                                /* 0x008fc400078e0217 */
        /*0620*/                   IMAD.WIDE R14, R0, 0x4, R12 ;                /* 0x00000004000e7825 */
                                                                                /* 0x000fc600078e020c */
        /*0630*/                   STG.E [R2.64], R25 ;                         /* 0x0000001902007986 */
                                                                                /* 0x0007e8000c101904 */
        /*0640*/                   LDG.E R18, [R14.64] ;                        /* 0x000000040e127981 */
                                                                                /* 0x000e68000c1e1900 */
        /*0650*/                   LDG.E R16, [R4.64+0x2c] ;                    /* 0x00002c0404107981 */
                                                                                /* 0x000e64000c1e1900 */
        /*0660*/                   IMAD R21, R18, R16, R25 ;                    /* 0x0000001012157224 */
                                                                                /* 0x002fc400078e0219 */
        /*0670*/                   IMAD.WIDE R16, R0, 0x4, R14 ;                /* 0x0000000400107825 */
                                                                                /* 0x000fc600078e020e */
        /*0680*/                   STG.E [R2.64], R21 ;                         /* 0x0000001502007986 */
                                                                                /* 0x0007e8000c101904 */
        /*0690*/                   LDG.E R18, [R16.64] ;                        /* 0x0000000410127981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*06a0*/                   LDG.E R12, [R4.64+0x30] ;                    /* 0x00003004040c7981 */
                                                                                /* 0x000ea2000c1e1900 */
        /*06b0*/                   IADD3 R10, R10, -0x10, RZ ;                  /* 0xfffffff00a0a7810 */
                                                                                /* 0x000fe20007ffe0ff */
        /*06c0*/                   IMAD R23, R18, R12, R21 ;                    /* 0x0000000c12177224 */
                                                                                /* 0x004fc400078e0215 */
        /*06d0*/                   IMAD.WIDE R18, R0, 0x4, R16 ;                /* 0x0000000400127825 */
                                                                                /* 0x000fc600078e0210 */
        /*06e0*/                   STG.E [R2.64], R23 ;                         /* 0x0000001702007986 */
                                                                                /* 0x0007e8000c101904 */
        /*06f0*/                   LDG.E R12, [R18.64] ;                        /* 0x00000004120c7981 */
                                                                                /* 0x000ea8000c1e1900 */
        /*0700*/                   LDG.E R15, [R4.64+0x34] ;                    /* 0x00003404040f7981 */
                                                                                /* 0x0002a2000c1e1900 */
        /*0710*/                   ISETP.GT.AND P1, PT, R10, 0xc, PT ;          /* 0x0000000c0a00780c */
                                                                                /* 0x000fe40003f24270 */
        /*0720*/                   IADD3 R14, P2, R4, 0x40, RZ ;                /* 0x00000040040e7810 */
                                                                                /* 0x000fc40007f5e0ff */
        /*0730*/                   IADD3 R11, R11, 0x10, RZ ;                   /* 0x000000100b0b7810 */
                                                                                /* 0x000fe40007ffe0ff */
        /*0740*/                   IADD3.X R5, RZ, R5, RZ, P2, !PT ;            /* 0x00000005ff057210 */
                                                                                /* 0x002fe400017fe4ff */
        /*0750*/                   MOV R4, R14 ;                                /* 0x0000000e00047202 */
                                                                                /* 0x000fe20000000f00 */
        /*0760*/                   IMAD R15, R12, R15, R23 ;                    /* 0x0000000f0c0f7224 */
                                                                                /* 0x004fe400078e0217 */
        /*0770*/                   IMAD.WIDE R12, R0, 0x4, R18 ;                /* 0x00000004000c7825 */
                                                                                /* 0x000fc600078e0212 */
        /*0780*/                   STG.E [R2.64], R15 ;                         /* 0x0000000f02007986 */
                                                                                /* 0x0007e2000c101904 */
        /*0790*/               @P1 BRA 0x230 ;                                  /* 0xfffffa9000001947 */
                  

在上面清单的末尾,您会发现一系列重复的指令,大致如下:

LDG
LDG
IMAD
IMAD
STG

该重复序列代表展开的循环体。如果您使用

cuobjdump
工具研究
-G
代码,您会发现:1. 总体指令数量较少,2. 没有如上所述的重复序列。

© www.soinside.com 2019 - 2024. All rights reserved.