多核并行编程方法

本文概述了多核并行编程的四种方法:基于RawThreadAPI、共享内存编程模型(OpenMP)、高层次模板库(JavaThreads、ThreadingBuildingBlocks)及分布式编程。详细分析了每种方法的特点、优势及局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

在多核的硬件结构中,如果要充分发挥硬件的性能,必须采用多线程(或多进程)执行,以提高CPU的利用率。多核系统的编程模型和多个CPU的SMP系统的编程模型是一致的,都属于共享存储的编程模型;同时,多核环境中也可以使用的分布式编程模型。
目前,多核并行编程方法可以分为以下四类:基于Raw Thread API的方法、基于共享内存编程模型的方法、基于高层次模板库的方法、基于分布式编程的方法。
(1)基于Raw Thread API的方法:这种方法主要使用系统底层API来进行多线程编程。Windows Threads和POSIX threads都属于使用系统底层API[2,3],是最低层次的并行编程API,不同点是Windows threads应用于Windows平台,有Win32这样一个完整的库支持,相对较为成熟,而POSIX threads主要用于UNIX/Linux平台,但编程难度相当大。这些系统底层Raw Thread API是非常强大的并行程序设计工具,它将巨大的潜能交到了程序员手中。但是,这种编程方法会遭遇上一节所提到的问题。
(2)基于共享内存编程模型的方法:共享内存编程模型中最有代表性的是OpenMP,它可以帮助程序快速创建线程,解决多核编程中面临的问题。OpenMP形成于1997年,用于编写可移植的多线程应用程序,起初只是一个Fortran标准,后来又发展到C/C++,目前在Intel C++ Compiler和Microsoft VS2005以及更高版本等编译器上都得到了广泛支持。虽然,OpenMP简单易用,但是它限制了程序员对并行的控制,限定了所提供信息的数量,例如OpenMP没有动态线程调度机制、伸缩性的内存分配器、内嵌式并行程序、并发的数据结构等。当“少许并行”就足够时,使用OpenMP会比较方便。[4-6]
(3)基于高层次模板库的方法:这类方法具有面向对象的特征,基于模板技术构建了丰富的线程控制和并行计算的模板库。Java Threads是所有能显示支持并行的程序设计语言中使用最广泛的。在它的核心,提供了与POSIX Threads相同的概念特性,并且支持并发数据结构。Threading Building Blocks是由Intel针对多核平台开发的一组开源的C++的模板库,基于GPLv2开源证书,支持可伸缩的并行编程。它不需要特别的语言或者编译器的支持,因此可以广泛地被用于任何处理器、任何操作系统以及任何编译器。
使用这种方法进行多线程编程,程序员不需要将过多的精力放到同步、负载平衡、缓存优化等等的问题上,而能够轻松地实现自动调度的并行程序,使得CPU的多个核心处于高效运转之中。但是,这需要程序员熟练掌握这种开发工具。[7,8]
(4)基于分布式编程的方法:多核环境中可以使用分布式的消息传递编程模型,Intel的编译器就支持在多核环境中使用MPI编程。但是,在多核环境中使用消息传递编程会带来性能上的损失,并且不是所有的共享数据类型都适用消息传递模型来解决,例如,查找算法在多核中就不适用。[1,9]


[1]      周伟明. 多核计算与程序设计. 武汉:华中科技大学出版社,2009年3月.

[2]      Calvin Lin, Lawrence Snyder. 并行程序设计原理[M]. 北京:机械工业出版社, 2008年2月.

[3]      Jim B,Robert W. Win32多线程程序设计. 侯捷译. 武汉:华中科技大学出版社,2002年.

[4]      OpenMP官网. http://openmp.org/wp/.

[5]      Jin H,Frumkin M,Yan J.The OpenMP implementation of NAS parallel benchmarks and its performance.NAS Technical Report NAS-99-011, October 1999.

[6]      陈永健,OpenMP编译与优化技术研究,北京:清华大学,2004年.

[7]      胡斌,袁道华. TBB多核编程及其混合编程模型研究. 计算机技术与发展,2009年,第2期.

[8]      Intel公司.Intel Threading Building Blocks reference manual. 2007.

       http://threadingbuildingblocks.org/.

[9]      Michael J Q. 并行程序设计C、MPI与OpenMP. 北京:清华大学出版社,2005.

转载于:https://www.cnblogs.com/lvdongjie/p/4478152.html

一. 并发并行的区别? ........................................................................................................................... 1 1.1 串行 .................................................................................................................................................. 1 1.2 并发 .................................................................................................................................................. 1 1.3 并行 .................................................................................................................................................. 1 1.4 多核编程的难点 ............................................................................................................................... 2 二. 多核体系架构 ...................................................................................................................................... 3 2.1 多核处理器定义 ............................................................................................................................... 3 2.2 多核发展趋势 .................................................................................................................................. 3 2.3 一个多核处理器架构例子 ............................................................................................................... 5 2.4 LINUX 线程核绑定 .............................................................................................................................. 6 2.4.1 核亲和性绑定 ........................................................................................................................... 6 2.4.2 资源控制 cgroup ...................................................................................................................... 8 三. 内存模型 .............................................................................................................................................. 8 3.1 操作原子性 ...................................................................................................................................... 9 3.1.1 原子性的3种保证机制 ........................................................................................................... 9 3.1.2 硬件原子操作 ........................................................................................................................... 9 3.1.3 总线锁-原子操作原语 ............................................................................................................ 12 3.2 缓存一致性 .................................................................................................................................... 16 3.2.1 定义 ........................................................................................................................................ 16 3.2.2 CC协议 .................................................................................................................................... 17 3.2.3 伪共享 .................................................................................................................................... 21 3.3 顺序一致性 .................................................................................................................................... 24 3.3.1 定义 ........................................................................................................................................ 24 3.3.2 几种顺序约束 ......................................................................................................................... 25 3.3.3 乱序执行和内存屏障 ............................................................................................................. 28 四. 并发级别 ............................................................................................................................................ 31 4.1 WAIT-FREEDOM 无等待并发 .............................................................................................................. 32 4.2 LOCK-FREEDOM 无锁并发 ................................................................................................................... 32 4.3 OBSTRUCTION-FREEDOM 无阻塞并发 .................................................................................................. 33 4.4 BLOCKING ALGOITHMS 阻塞并发 .......................................................................................................... 33 五. 锁 ....................................................................................................................................................... 34 5.1 信号量 ............................................................................................................................................ 34 5.2 自旋锁 ............................................................................................................................................ 35 5.3 读写锁 ............................................................................................................................................ 35 5.4 顺序锁 ............................................................................................................................................ 37 5.5 RCU .................................................................................................................................................. 38 六. 无锁编程 ............................................................................................................................................ 38 6.1 定义 ................................................................................................................................................ 39 七. 并发数据结构、开源库 ..................................................................................................................... 41 7.1 一些开源的并发库 ......................................................................................................................... 41 7.2 一次无锁哈希表跟基于锁的哈希表性能对比测试 ..................................................................... 41 7.2.1 测试平台 ................................................................................................................................ 41 7.2.2 测试过程 ................................................................................................................................ 42 7.2.3 哈希算法 ................................................................................................................................ 43 7.2.4 测试结果 ................................................................................................................................ 44 八. 多核工程实践 .................................................................................................................................... 44 8.1 网络设备 :INTEL DPDK .................................................................................................................. 44 8.2 网络游戏 ........................................................................................................................................ 44 8.3 手机开发 ........................................................................................................................................ 45 九. 参考 ................................................................................................................................................... 45
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值