Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何理解CUDA/GPU中的SASS分析结果_Assembly_Cuda_Gpu_Ptx - Fatal编程技术网

Assembly 如何理解CUDA/GPU中的SASS分析结果

Assembly 如何理解CUDA/GPU中的SASS分析结果,assembly,cuda,gpu,ptx,Assembly,Cuda,Gpu,Ptx,我使用cuobjdump(CUDA二进制实用程序之一)生成SASS代码,示例结果如下所示。这些代码试图从全局内存加载 /*0028*/ IMAD R6.CC, R3, R5, c[0x0][0x20]; /*0030*/ IMAD.HI.X R7, R3, R5, c[0x0][0x24]; /*0040*/ LD.E R2, [R6]; //load 在哪里可以获得解释每个指令含义的完整SASS代码手册。在“cuda二进制实用程序”中,它仅提供指令含义的一般解释。e、 它没有解释“R1.

我使用cuobjdump(CUDA二进制实用程序之一)生成SASS代码,示例结果如下所示。这些代码试图从全局内存加载

/*0028*/ IMAD R6.CC, R3, R5, c[0x0][0x20]; 
/*0030*/ IMAD.HI.X R7, R3, R5, c[0x0][0x24]; 
/*0040*/ LD.E R2, [R6]; //load
  • 在哪里可以获得解释每个指令含义的完整SASS代码手册。在“cuda二进制实用程序”中,它仅提供指令含义的一般解释。e、 它没有解释“R1.cc”、“IMAD.HI.X”和LD.e的含义

  • 第二次指导的意义是什么。我猜第一条指令是计算每个线程应该加载的内存地址,而第三条指令是将全局内存加载到寄存器中。我不知道第二次指导的意义

  • 我猜cuda会将一些参数信息(如网格大小、块大小和数组基址)保存到常量内存中。 在这种情况下,c[0x0][0x20]是数组的基址。我的问题是如何获得这些信息

  • 在哪里可以获得解释每个指令含义的完整SASS代码手册
  • 据我所知,没有这样的东西,SASS大部分是未记录的(只有一个),因为它在不同的体系结构中有所不同。然而,PTX是一个非常复杂的概念,许多SASS指令都有一个近似的PTX等价物,您可以从中推断其含义。您可能还希望转储带有源信息的SASS,以便更好地了解正在发生的事情

    但是有了这两个文档,您可以或多或少地将SASS翻译回PTX并猜测说明的含义:

    /*0028*/ IMAD R6.CC, R3, R5, c[0x0][0x20];
    
    :将R3与R5相乘,与气缸组0中的常数求和,偏移量0x20,与进位一起存储在R6中

    /*0030*/ IMAD.HI.X R7, R3, R5, c[0x0][0x24];
    
    :将R3与R5相乘,提取上半部分,将上半部分与列组0中的常数求和,偏移量0x24,将其与进位一起存储在R7中。

    :将寄存器对R7:R6指向的内容加载到R2中

    作为:

    整个计算将R3与R5相乘,将64位乘积与c[0][24]:c[0][20]中的64位常量相加,并使用得到的64位地址检索R2

  • 我猜cuda会将一些参数信息(如网格大小、块大小和数组基址)保存到常量内存中。[…]我的问题是如何获得这些信息
  • 内置(
    threadIdx
    blockIdx
    blockDim
    gridDim
    等)驻留的位置未指定,可能因体系结构而异。实际上,其中一些在专用寄存器中,另一些在共享内存中。但这是一个实现细节


    注:编辑以集成@njuffa的注释。

    标记用于名为Sass的CSS预处理器。小更正:将寄存器对R7:R6指向的内容加载到R2中。
    .X
    指定了带进位的扩展操作,我记得,这个后缀最初用于摩托罗拉的68K生产线。整个计算将R3与R5相乘,将64位乘积与c[0][24]:c[0][20]中的64位常量相加,并使用得到的64位地址检索R2。
    /*0040*/ LD.E R2, [R6]; //load