我应该调查PTX来优化我的内核吗?如果是这样,怎么样?

Fra*_*ter 7 performance cuda gpgpu loop-unrolling ptx

您是否建议阅读内核的PTX代码以进一步优化内核?

一个例子:我读过,如果自动循环展开有效,可以从PTX代码中找到.如果不是这种情况,则必须在内核代码中手动展开循环.

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

tal*_*ies 14

关于PTX的第一点是它只是GPU上运行的代码的中间表示 - 一种虚拟机汇编语言.PTX ptxas在编译时或在运行时由驱动程序组装到目标机器代码.因此,当您查看PTX时,您正在查看编译器发出的内容,而不是GPU实际运行的内容.也可以编写自己的PTX代码,无论是从头开始(这是CUDA唯一支持的JIT编译模型),或在CUDA C语言内联汇编部分的一部分(官方支持后者,因为CUDA 4.0,而是"非正式"支持的时间比这长得多".CUDA随附了工具包的PTX语言的完整指南,并且已完整记录.该豹猫项目已经使用这种文件来实现自己的PTX交叉编译器,它允许CUDA代码在其他硬件上本机运行,最初的x86处理器,但最近AMD的GPU.

如果你想看到什么是GPU运行actualy(相对于编译器发射的),NVIDIA现在提供称为二进制反汇编工具,cudaobjdump它可以显示编译费米的GPU代码中的实际机器代码段.有一种较老的,非正式的工具叫做decudaG80和G90 GPU.

话虽如此,从PTX输出中可以学到很多东西,特别是编译器如何应用优化以及它实现某些C结构的指令.每个版本的NVIDIA CUDA工具包都附带了PTX语言的指南nvcc文档.两个文档中都包含大量信息,以便学习如何将CUDA C/C++内核代码编译到PTX,以及了解PTX指令的作用.