2011-11-10 51 views
6

你是否推荐阅读你的内核的PTX代码,以便进一步优化你的内核?我应该看看PTX来优化我的内核吗?如果是这样,怎么样?

举一个例子:我读过,可以从PTX代码中找到自动循环展开的原理。如果情况并非如此,则必须在内核代码中手动展开循环。

  • PTX代码还有其他用例吗?
  • 你看看你的PTX代码吗?
  • 从哪里可以找到如何读取CUDA为我的内核生成的PTX代码?
+2

您可以反汇编二进制代码。海事组织你应该看看,以避免陷入“我认为它会优化这种类型的陷阱,并能够看到你实际上在做什么,当你优化内核。 – harold

回答

13

的第一点,使约PTX的是,它仅是一个中间在GPU上运行的代码的表示 - 虚拟机汇编语言。 PTX通过编译时由ptxas组装到目标机器代码上,或者在运行时由驱动程序组装。所以当你在看PTX时,你正在看编译器发出的是什么,而不是GPU实际运行的内容。也可以从头开始编写自己的PTX代码(这是CUDA支持的唯一JIT编译模型),或者作为CUDA C代码中的内联汇编程序部分的一部分(后者自CUDA 4.0以来正式支持,但“非官方“支持的时间要比这长得多)。 CUDA一直附带该工具包的PTX语言完整指南,并且完整记录。 ocelot project已经使用这个文档来实现他们自己的PTX交叉编译器,它允许CUDA代码在其他硬件上初始运行,最初是x86处理器,但最近是AMD GPU

如果你想看看GPU实际运行的是什么(而不是编译器发出的),NVIDIA现在提供了一个名为cudaobjdump的二进制反汇编工具,它可以显示为Fermi GPU编译的代码中的实际机器代码段。有一款名为decuda的非官方工具,适用于G80和G90 GPU。

话虽如此,从PTX输出中学到了很多东西,特别是编译器如何应用优化以及它发布什么指令来实现某些C构造。 NVIDIA CUDA工具包的每个版本都附带a guide to nvccdocumentation for the PTX language。这两份文件中都包含大量信息,以便学习如何将CUDA C/C++内核代码编译为PTX,并了解PTX指令的功能。

相关问题