开发PTX而不是CUDA进行优化。它有意义吗?

时间:2014-03-04 13:29:22

标签: optimization cuda parallel-processing ptx

我正在开发cuda代码。但是宣布了PTX或SPIR后端的新设备语言。我可以遇到他们正在开发的一些应用程序。至少我认为我们可以说ptx语言足以在产品层面上发展。

众所周知,PTX不是真正的设备代码。它只是NVidia的中间语言。但我的问题是,如果我开发PTX而不是CUDA?如果我使用ptx,我可以开发自然优化的代码吗?它有意义吗?

另一方面为什么/ PTX语言的动机是什么?

提前致谢

2 个答案:

答案 0 :(得分:2)

是的,在PTX中实现CUDA代码是有意义的,就像在汇编代替C ++实现常规CPU代码一样有意义。

例如,在CUDA C中,没有有效的方法来捕获进位标志并将其包含在新的计算中。因此,很难实现使用比本机支持的更多位的高效数学运算(在所有当前GPU上为32位)。使用PTX,您可以有效地实施此类操作。

我在CUDA C和PTX中都实现了一个项目,并且在PTX中实现了显着的加速。当然,如果您的PTX代码优于普通CUDA C编译器创建的代码,您将只看到加速。

我建议先创建一个CUDA C版本以供参考。然后创建参考的副本并开始用PTX替换它的部分,由分析结果确定,同时确保结果与参考的结果相匹配。

就PTX的动机而言,它提供了一种抽象,使NVIDIA可以在不同的GPU之间更改本机机器语言,而不会破坏向后兼容性。

答案 1 :(得分:2)

在PTX中开发的主要优点是它可以让您访问某些未在CUDA C中直接公开的功能。例如,加载指令上的某些缓存修饰符,一些打包的SIMD操作和谓词。

那就是说,我不建议任何人在PTX中编码。在CUDA Library团队中,我们有时会通过内联汇编将PTX例程包装在C函数中,然后使用它。但是用C / C ++ / Fortan编程比编写PTX容易。

此外,运行时会将您的PTX重新编译为内部硬件特定的汇编语言。在此过程中,它可能会重新排序指令,分配寄存器和更改计划。因此,您在PTX中的所有细心排序通常都是不必要的,通常与最终的汇编代码几乎没有关系。 NVIDIA现在可以在反汇编程序中运行,它可以让您查看实际的内部组件 - 如果您想要使用它,可以自行比较。