《OpenACC并行编程实战》—— 1.2 并行编程语言

简介: 在并行计算发展史上出现过多种并行编程语言,至今仍在使用的只剩几种, 它们各有特色。

本节书摘来自华章出版社《OpenACC并行编程实战》一 书中的第1章,第1.2节,作者何沧平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 并行编程语言

在并行计算发展史上出现过多种并行编程语言,至今仍在使用的只剩几种,
它们各有特色。

(1)Pthreads

20世纪70年代,贝尔实验室发明了UNIX,并于20世纪80年代向美国各大高校分发V7版的源码以做研究。加利福尼亚大学伯克利分校在V7的基础上开发了BSD UNIX。后来很多商业厂家意识到UNIX的价值也纷纷以贝尔实验室的System V或BSD为基础来开发自己的UNIX,较著名的有Sun OS、AIX、VMS。随着操作系统的增多,应用程序的适配性工作越来越繁重。为了提高UNIX环境下应用程序的可迁移性,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)设计了POSIX标准。然而,POSIX并不局限于UNIX,许多其他的操作系统也支持POSIX标准。POSIX.1已经被国际标准化组织所接受,POSIX已发展成为一个非常庞大的标准族,一直处在发展之中。
POSIX线程(POSIX threads,Pthreads),是线程的POSIX标准。该标准定义了创建和操纵线程的一整套接口。在类UNIX操作系统(UNIX、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Pthreads用来开发与操作系统紧密相关的应用程序,管理粒度很细,例如线程的创建与销毁、线程锁、线程属性、线程优先级、线程间通信等琐碎操作均需要程序员安排。对科学与工程类计算程序来说,程序员的精力应集中在业务模型和代码算法上,不应浪费在底层代码细节上。
虽然Pthreads不适合编写高性能计算程序,但它多线程并发的设计理念启发了其他并行语言。

(2)OpenMP

OpenMP是由一些大型IT厂商和一些学术机构组成的非盈利组织,官网是www.openmp.org。永久成员包括AMD、CAPS-Entreprise、Convey Computer、Cray、Fujitsu、HP、IBM、Intel、NEC、NVIDIA、Oracle Corporation、Red Hat、ST Microelectronics、Texas Instruments;正式成员是对OpenMP标准感兴趣,但不生产销售相关产品的组织,例如ANL、ASC/LLNL、BSC、cOMPunity、EPCC、LANL、NASA、ORNL、RWTH Aachen University、SNL-Sandia National Lab、Texas Advanced Computing Center、University of Houston。
计算热点都是在循环上,OpenMP的并行化思路是将循环的迭代步分摊到多个线程上,每个线程只承担一部分计算任务,循环运行的墙上时间(从开始到结束的自然流逝时间)自然也就减少了。分割方法是在循环上面添加一些预处理标记(图1.18),编译器识别到这些标记以后,将关联的循环翻译成并行代码,然后再与剩余的串行代码合并起来编译、链接成可执行程序。

<img src="https://yqfile.alicdn.com/f8fe331811903d5ff604245a30fe84de1de14712.png" width="" height="">


使用OpenMP编译并行程序时,程序员需要先保证串行代码正确,找出热点循环,然后在循环上添加OpenMP预处理标记。打开编译器的openmp选项可以编译成并行版本,否则编译器将忽略预处理器标记,仍然编译成串行版本。既不破坏原有代码,开发速度又快,省时省力。

(3)CUDA

CUDA(Compute Unified Device Architecture)是英伟达公司设计的GPU并行编程语言,一经推出就引发了GPU通用计算研究热潮。CUDA是闭源的,只能运行在英伟达的产品上。CUDA C/C++是对C/C++语言的扩展,添加了一些数据类型、库函数,并定义一种新的函数调用形式。CUDA起初支持C和少量C++特性,后来逐渐提高对C++的支持度。从CUDA 3.0开始与PGI合作支持Fortran。CUDA语言还可以细分为CUDA C/C++、CUDA Fortran,本书成稿时的CUDA C/C++最新版本是7.5,8.0版本即将发布。CUDA Fortran没有版本号,只是随着PGI编译器的升级而增加新特性。1.3节会介绍CUDA C/C++的编程模型和一些示例代码,此处不展开介绍。

(4)OpenCL

OpenCL(Open Computing Language,开放计算语言)是一个面向异构系统并行编程的免费标准,支持多种多样的设备,包括但不限于CPU、GPU、数字信号处理器(DSP)。OpenCL的优势是一套代码多处运行,只要为新的设备重新编译代码就可以运行,移植方便。
OpenCL由苹果公司首先提出,随后Khronos Group成立相关工作组,以苹果草案为基础,联合业界各大企业共同完成了标准制定工作,工作组的成员来自各行各业,且都是各自领域的领导者。

(5)OpenACC

这里不多说,后面会全面、详细讲解。

相关文章
《OpenACC并行程序设计:性能优化实践指南》一 第1章 从串行编程到并行编程
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1176 0
|
并行计算
《OpenACC并行程序设计:性能优化实践指南》一 3.11 小结
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.11节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1083 0
|
测试技术 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 导读
这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的、高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上。具体而言,书中演示了使用PGI、Cray和PathScale等供应商提供的编译器编译示例代码,并在Intel x86处理器、Cavium 96核64位ARMv8处理器芯片集和NVIDIA GPU上运行。
2196 0
|
异构计算
《OpenACC并行程序设计:性能优化实践指南》一 2.5 在多核系统中并行运行
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.5节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1224 0
|
并行计算 测试技术 API
《OpenACC并行程序设计:性能优化实践指南》一 3.4 通过代码插装准备性能测量
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.4节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1246 0
《OpenACC并行程序设计:性能优化实践指南》一 1.7 让生活更简单
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,第1.7节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1073 0
《OpenACC并行程序设计:性能优化实践指南》一 2.6 小结
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.6节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1199 0
|
并行计算 C++ 异构计算
《OpenACC并行编程实战》—— 导读
2010年以来,中国超级计算机建设突飞猛进,欣欣向荣。一个原因是国力强盛,大力投资高新科技;另一个原因是整体科技水平提高,需求旺盛。天气预报、石油物探、工程仿真、基因测序等传统应用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求。
2655 0
《OpenACC并行编程实战》—— 2.2 OpenACC 2.5规范
本节列出OpenACC的主要构件、导语,读完本书后可以在此处快速查阅语法,不必到正文中寻找零星的介绍。初次阅读请跳过。
1537 0

热门文章

最新文章