《CUDA高性能并行计算》----3.2 并行化dist_v2

本 节 书 摘 来 自 华 章 出 版 社 《CUDA高性能并行计算》 一 书 中 的 第3章,第3.2节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 “华 章 计 算 机” 公 众 号 查 看。

3.2 并行化dist_v2

第一个并行化的距离应用dist_v1_cuda不具有充分的代表性,因为它并没有涉及大量输入数据。现在我们已经准备好了并行化第二个距离应用dist_v2,这是一个更加典型的例子,涉及对一个输入数组的操作。将一个数组数据传递到GPU的策略并不复杂:

1.在设备内存(GPU)上创建一个数组,类型和大小与主机内存(CPU)上的输入数组一致。

2.在设备内存上创建一个内存用来存储输出的数据。(你可以选择使用复用输入数组的办法存储输出,但是目前我们先将输入和输出分开考虑。)

3.将主机端的输入数组复制到设备内存上对应的数组上。

4.启动核函数进行计算并将输出值存储在设备内存上的输出数组中。

5.将设备内存中的输出数组复制回主机内存中的对应数组上。

6.释放设备上的数组内存。

上面列出的步骤很适合dist_v2的组织方式,其中包括了一个main.cpp文件(包含了main()函数的代码),一个单独的文件(名为aux_functions.cpp)来包含定义辅助功能的代码,一个头文件(名为aux_functions.h)来包含像distanceArray()函数一样的原型函数,使其可以在其他文件中被“看见”并调用(例如main.cpp文件)。

因为步骤4中涉及CUDA核函数调用,我们将aux_functions.cpp(及其对应的头文件)替换为kernel.cu(及其对应的头文件—kernel.h)。完整的代码在代码清单3.3、代码清单3.4以及代码清单3.5中显示,代码清单3.6是Makefile文件。

Dist_v2_cuda/main.cpp 的代码与dist_v2/main.cpp几乎一样。不同之处包括把scale()移到main.cpp中,并引用kernel.h来代替原来的aux_functions.h文件。最大的变化发生在kernel.cu文件中新定义的distanceArray()函数中。

这里需要强调几个要点:
1. distanceKernel()函数与dist_v1_cuda/kernel.cu中的版本有明显的不同。这里,形参包含了一个指针d_in,指向一个已经被构建好的输入数组。

2.对于distanceArray()新的定义执行了上面所列出的全部5个步骤。设备端的输入输出数组在第23~28行代码中定义;输入数据从主机端复制到设备端在第31行执行;从核函数调用并获取GPU并行化的执行结果在第43行;输出的距离值从设备端复制到主机端在第37行;设备端的内存释放在第40行和第41行。

3.函数distanceArray()调用核函数distance-Kernel()。这样的函数被称为封装(warpper)或者启动函数(launcher)。

读者可以用这些现成的代码编译并执行dist_v2_cuda。验证这些距离的值是否被正确计算,并且留意一下所有关键的CUDA代码都包含在kernel.cu文件中。对比distanceArray()函数在dist_v2/aux_functions.h和dist_v2_cuda/kernel.h中的原型。注意这些原型是完全相同的,但是函数的定义却被改变了。用软件开发的术语来说,我们改变了实现但是保持接口不变。这种方式为已有程序开发支持CUDA的版本提供了解决思路。

时间: 2024-08-04 16:24:45

《CUDA高性能并行计算》----3.2 并行化dist_v2的相关文章

《CUDA高性能并行计算》----第3章 从循环到网格 3.1 并行化 dist_v1

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第3章,第3.1节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----3.4 简化操作流程

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第3章,第3.4节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----1.3 本章小结

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第1章,第1.3节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----3.5 本章小结

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第3章,第3.5节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----1.2 运行我们自己的串行程序

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第1章,第1.2节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----第1章 起 步 1.1 运行CUDA样例程序

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第1章,第1.1节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著, 苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----0.5 本书的组织结构

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第0章,第0.5节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----3.3 标准操作流程

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第3章,第3.3节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算

《CUDA高性能并行计算》----第2章 CUDA基础知识 2.1 CUDA并行模式

本 节 书 摘 来 自 华 章 出 版 社 <CUDA高性能并行计算> 一 书 中 的 第2章,第2.1节, 作 者 CUDA for Engineers: An Introduction to High-Performance Parallel Computing[美] 杜安·斯托尔蒂(Duane Storti)梅特·尤尔托卢(Mete Yurtoglu) 著,苏统华 项文成 李松泽 姚宇鹏 孙博文 译 , 更 多 章 节 内 容 可 以 访 问 云 栖 社 区 "华 章 计 算