您是否建议阅读内核的 PTX 代码以进一步优化内核?
一个例子:我读到,可以从 PTX 代码中找出自动循环展开是否有效。如果不是这种情况,则必须在内核代码中手动展开循环。
- PTX 代码还有其他用例吗?
- 你查看过你的 PTX 代码吗?
- 在哪里可以找到如何读取 CUDA 为我的内核生成的 PTX 代码?
关于 PTX,首先需要指出的是,它只是一个中间的GPU 上运行的代码的表示形式——一种虚拟机汇编语言。 PTX 通过以下方式汇编为目标机器代码ptxas
在编译时,或由驱动程序在运行时。因此,当您查看 PTX 时,您查看的是编译器发出的内容,而不是 GPU 实际运行的内容。还可以编写自己的 PTX 代码,无论是从头开始(这是 CUDA 中支持的唯一 JIT 编译模型),还是作为 CUDA C 代码中内联汇编器部分的一部分(后者自 CUDA 4.0 起正式支持,但是“非官方”的支持时间比这长得多)。 CUDA 始终随工具包附带 PTX 语言的完整指南,并且有完整的文档记录。这豹猫项目 http://code.google.com/p/gpuocelot/使用此文档来实现他们自己的 PTX 交叉编译器,该编译器允许 CUDA 代码在其他硬件上本机运行,最初是 x86 处理器,但最近AMD GPUs.
如果您想查看 GPU 实际运行的内容(而不是编译器发出的内容),NVIDIA 现在提供了一个名为的二进制反汇编工具cudaobjdump
它可以显示为 Fermi GPU 编译的代码中的实际机器代码段。有一个较旧的非官方工具称为decuda
适用于 G80 和 G90 GPU。
话虽如此,从 PTX 输出中可以学到很多东西,特别是编译器如何应用优化以及它发出哪些指令来实现某些 C 结构。每个版本的 NVIDIA CUDA 工具包都附带指南nvcc http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/ and PTX 语言的文档 http://docs.nvidia.com/cuda/parallel-thread-execution/。两个文档中都包含大量信息,可帮助您了解如何将 CUDA C/C++ 内核代码编译为 PTX,并了解 PTX 指令的用途。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)