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

简介: 是时候把我们的目光从CUDA样例程序移开,构建并运行我们自己的程序。在本节我们将给出完成相同功能的两个应用的代码``dist_v1``和``dist_v2``。每个应用都计算了从一个参考点到N个在直线上均匀分布的点之间的一组距离。

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

1.2 运行我们自己的串行程序

是时候把我们的目光从CUDA样例程序移开,构建并运行我们自己的程序。在本节我们将给出完成相同功能的两个应用的代码dist_v1dist_v2。每个应用都计算了从一个参考点到N个在直线上均匀分布的点之间的一组距离。这一任务精心设计,力求简单,但是对于工程师而言仍然具有明确的指导意义。读者也很容易考虑到如何将这里的实现推广到更加通用的场合。

值得注意的是,虽然dist_v1dist_v2实现的是同一个任务,但是它们通过不同的方法来完成。

dist_v1使用一个for循环,循环内先对循环变量进行归一化得到一个输入位置然后计算并存储该位与参考位置的距离。这里我们建立一个distance()函数计算一个参考位置和某个点间的距离,该函数调用了N次。

dist_v2以建立一个输入位置的数组作为开始,然后将这个数组指针传给distance-Array()函数,该函数在一次调用中计算并存储整个数组距离值。

dist_v1dist_v2将作为我们在第3章中讲解并行化的初始实验对象。这里给出它们的代码,每个程序的创建、编译以及运行的指南和详细解释参见附录C。这里给出另一个提示:你需要能够编译并运行dist_v1dist_v2这两个程序。如果你对此有任何问题,请参考附录C来找到解决这些问题的方法。

1.2.1 dist_v1应用

dist_v1应用只包含一个文件main.cpp,内容如代码清单1.1所示。对应的Linux下的Makefile文件参见代码清单1.2。


35ea7bdde8ba5cfa7cf7557e2b0ac7c72fcff57d


11cfd29205fa2e8167009f07eef9eca72e8610e9

1.2.2 dist_v2应用

dist_v2应用的代码包含了三个文件:main.cpp(参见代码清单1.3)、aux_functions.cpp(参见代码清单1.4)以及头文件aux_functions.h(参见代码清单1.5)。Linux下的Makefile文件参见代码清单1.6。


eae6053273341e65d76b102e7446edd15da22251


0cf5e425b652939e257184c848492c5995cf49f6

这里我们到达了本章的最后一个提示:在继续之前,读者需要运行dist_v1和dist_v2并且使用一个调试器证实计算的距离的值从0.5开始(归一化得到的值0与参考点0.5的距离),在接近数组中间的时候递减到0,继续到末尾时增长到0.5(对应于从参考点0.5到归一化值1.0之间的距离)。如果读者遇到了任何问题,请阅读附录C“C语言编程需知”中的相关内容。

相关文章
|
并行计算 C++ Windows
《CUDA高性能并行计算》----0.7 本书代码
本书应用程序的代码可以通过www.cudaforengineers.com获取。虽然书中采用了一些代码片断和“骨架”代码(skeleton code),但标记为“代码清单”的代码(包含行号)是真实可运行代码的一部分。
2016 0
|
Web App开发 并行计算 异构计算
《CUDA高性能并行计算》----2.4 推荐项目
1.去CUDA Zone注册并加入到CUDA开发者中(如果读者还没有这样做的话)。 2.观看 www.nvidia.com/object/nvision08_gpu_v_cpu.html的视频,体会关于并行和串行执行的有趣的对比。
1856 0
|
并行计算
《CUDA高性能并行计算》----1.4 推荐项目
项目1~5是关于运行其他CUDA样例程序的练习。
1403 0
|
并行计算
《CUDA高性能并行计算》----3.6 推荐项目
1.改变距离数组中的元素数目并进行实验。当你将数目N定义成128、1024、63、65的时候是否遇到了一些问题? 2.计算包含4096个距离的距离数组并尝试改变TPB。你可以在系统上运行的最大(和最小)线程块大小是多大?注意,这个问题的答案依赖于你的GPU设备的计算能力。
1379 0
|
并行计算 芯片 异构计算
《CUDA高性能并行计算》----第2章 CUDA基础知识 2.1 CUDA并行模式
在第1章中我们的讨论以计算从一个参考点到一组输入位置距离的函数distance-Array()结束。这个计算完全是串行的,距离数值是根据一个for循环中的计数i和输入数组的范围顺序计算的。但是,任何一个距离的计算相对于其他计算都是独立的。
1431 0
|
并行计算 C语言
《CUDA高性能并行计算》----0.9 历史沿革
本书是作者在CUDA疆域探险数年的经验总结。最初开展的是容积医学影像(volumetric medical imaging)、2D和3D成像(即透视和CT扫描)的配准以及计算机辅助设计(computer-aided design)和增材制造(additive manufacturing)的新方法研究。
1237 0
|
并行计算 Linux
《CUDA高性能并行计算》----0.6 本书体例
本书使用以下约定: 为了跟正常文字区分,代码清单使用等宽(monospace)字体排版。 我们经常把类UNIX系统,如Linux和OS X,统一称为Linux。 我们把完整的示例程序称为应用程序(简写为app)。
924 0
|
并行计算
《CUDA高性能并行计算》----导读
Praise 本书赞誉 FORTRAN(盛行于20世纪60年代)是最早允许我们在大型机上编程的语言。之后是BASIC(流行于20世纪80年代)赋予我们为第一批微型计算机编写程序的能力。现在轮到CUDA,让我们可以为超级微型计算机编写程序。
1363 0