1.2_代码

1.2 代码

开发人员希望CUDA代码能说明问题而不仅仅是玩具,有实用性而无须具备冷门主题上的技术储备以及有高性能且不能掩盖实现从初始移植到做出最终版本之间的尝试过程。为此,本书介绍了3种类型的代码示例,旨在分别迎合上述需求:验证型(microbenchmark)、演示型(microdemo)和探究型(optimization journey)。

1.2.1 验证型代码

验证型代码旨在说明一个非常具体的CUDA问题对性能的影响,例如,非合并的内存事务如何降低设备的内存带宽或执行内核转换(kernel think)会需要WDDM驱动程序多长时间才能完成。它们被设计成可以独立编译的程序并跟许多CUDA程序员自己实现的验证代码很相似。从某种意义上说,我编写了这一组验证型代码,是为了节省大家的时间。

1.2.2 演示型代码

演示型代码是小型应用程序,旨在揭示具体硬件或软件的行为问题。跟验证型代码一样,它们都很小、自成一体,但以强调功能性为

主而不是强调性能。例如,纹理操作一章包括的演示型代码分别用以说明如何从1D设备内存得到纹理、如何进行浮点型到整型的转换、多种纹理寻址模式是如何工作的以及纹理的线性插值是如何被9位的权重所影响的。

跟验证型代码一样,这些演示型代码是考虑到开发者可能会编写它们或者需要它们。本书提供之后,大家就不必再去编写了。

1.2.3 探究型代码

基于CUDA的许多论文仅呈现所用方法的实验结果。也许会附带解释一句:文中方法是在调查多种方法并进行权衡后才采用的。作者往往受到篇幅和截止日期的限制,无法给出他们工作的更多细节。

基于CUDA进行数据并行编程比较核心的主题,本书给出探究型代码。逐步加大所考察问题的复杂性,不断优化程序性能。这是Mark Harris在《基于CUDA优化并行归约》[1]一文中的处理思路。本书精选的几个案例均采用探究式分析,包括归约、并行前缀和(即“扫描”)和N-体问题。

1.2_代码 - The CUDA Handbook | OpenTech