Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
如何获取CUDA内核的汇编代码?_C_Assembly_Cuda_Gpgpu_Nvidia - Fatal编程技术网

如何获取CUDA内核的汇编代码?

如何获取CUDA内核的汇编代码?,c,assembly,cuda,gpgpu,nvidia,C,Assembly,Cuda,Gpgpu,Nvidia,我用OpenCL和CUDA写了一些内核。在AMD profiler中运行OpenCL程序时,它允许我查看内核的汇编代码。我想将其与CUDA内核的汇编代码进行比较,以比较两种语言之间的编译器优化。我一直在玩英伟达剖析器,但是我仍然不知道如何获得内核的汇编代码。怎么做呢?你想读PTX吗?你不能再靠近集会了。维迪亚还没有发布其GPU的组装。“汇编”是PTX,它是由驱动程序中的字节码解释器执行的“伪汇编”。正如Turbosrow所提到的,CUDA最接近汇编的是PTX代码。我认为在这个答案中添加实际生成P

我用OpenCL和CUDA写了一些内核。在AMD profiler中运行OpenCL程序时,它允许我查看内核的汇编代码。我想将其与CUDA内核的汇编代码进行比较,以比较两种语言之间的编译器优化。我一直在玩英伟达剖析器,但是我仍然不知道如何获得内核的汇编代码。怎么做呢?

你想读PTX吗?你不能再靠近集会了。维迪亚还没有发布其GPU的组装。“汇编”是PTX,它是由驱动程序中的字节码解释器执行的“伪汇编”。

正如Turbosrow所提到的,CUDA最接近汇编的是PTX代码。我认为在这个答案中添加实际生成PTX代码的方法会更有用

这可以通过以下方式生成:

nvcc-ptx-o kernel.ptx kernel.cu

其中
kernel.cu
是源文件,
kernel.ptx
是目标ptx文件

此外,这里还有一个指向NVidia PTX文档的链接:


如果您有一些组装知识,那么大部分内容都相当简单。尽管有一些特殊的函数可以用来查找更多的细节。

我对GPGPU还不太熟悉,无法回答这个问题,但我怀疑这里没有有用的比较。AMD和Nvidia的部件差异很大,它们甚至可能不使用相同的汇编语言。我意识到会有显著的差异,但我想比较一下具体的优化。我只是真的需要查看组装,不管有什么不同,并且应该能够确定相对的相似性。$.02表示,即使在保密协议中签署了一条手臂和一条腿,你也不会得到任何官方信息。另请参见和@PseudoPsyche:即使您可以让CUDA发出一些汇编,但它与ATI汇编之间的差异可能非常大,您根本无法识别任何相似之处。@不,谢谢第二个链接!原来那就是我要找的!谢谢是的,PTX密码正是我想要的!我读过关于PTX的书,但没有意识到这正是我想要的。我认为还有另一个层次是实际汇编或其他什么。Err CUDA一直在使用一个名为cuobjdump的官方工具发货,该工具将分解汇编程序发出的实际二进制机器代码。任何对象文件、cubin、库或应用程序都可以用这种方式处理。此外,PTX不是由驱动程序中的“字节码解释器”执行的,没有这样的事情。PTX使用传统的汇编程序(称为ptxas,也在每个工具包中提供)组装成微码,并在GPU中“在金属上”运行。恐怕这个答案中的所有内容都是错误的。从一段时间前对我的问题的回答来看,我有一个不同的理解:JIT编译。据我所知,不同的GPU之间的机器代码差异如此之大,以至于试图学习它是没有意义的。看起来nVidia没有承诺任何机器代码级别的兼容性。Jit编译只是在运行时在PTX代码上运行汇编程序的驱动程序。这里没有Android Dalvik或Java虚拟机之类的东西。NVIDIA提供了一份文档,描述了最新架构的机器代码。诚然,最初的Telsa指令集与费米和开普勒略有不同,但后两个(代表大约4年的硬件设计)是相当进化的,即使硅本身发生了很大变化,“并且NVIDIA提供了一份描述机器代码的文档”-该死。我曾经特别要求机器代码规格,但我得到的答复是:“不行”。AMD已经发布了其主要架构的机器代码。“CUDA最接近汇编的东西是PTX代码”是错误的。可以使用直接检查组件。