在多核的硬件结构中,如果要充分发挥硬件的性能,必须采用多线程(或多进程)执行,以提高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.
相关推荐
随着多核处理器硬件的不断发展,多核处理器最追切需求是系统... 本文的主要内容如下: (1)针对多核处理器和多棱技术在国内外的研究现状分析多核并行编程所存在的关键问题,多核编程与单核编程之间的区别,进一步剖析
对多核编程和优化技术的现状进行全面的研究和分析,在论述如何将串行程序并行化的同时,分析现今主流的一些多核并行编程工具和模型。在此基础上,进一步讨论了在多核编程过程中影响程序性能的因素,并阐述了软硬件...
多核并行编程是现代计算机技术中的一个重要领域,特别是在Windows环境下,它能够充分利用多核处理器的计算能力,提高程序的运行效率。本章主要探讨了超线程技术和多核处理器的概念,以及如何使用OpenMP、PPL、TPL和...
【基于CPU-GPU异构平台的性能优化及多核并行编程模型的研究】 随着图形处理器(GPU)在计算能力和可编程性方面的显著提升,通用计算(GPGPU)已成为研究的焦点。GPGPU通常利用CPU-GPU的异构模式进行计算,这种模式...
综上所述,Linux应用程序多核并行化方法研究与实现不仅涉及了多核编程理论,还包括了实际开发中遇到的问题和解决方案,对当前和未来多核软件开发实践具有重要的指导意义。通过对串行程序的并行化改造,本研究不仅...
OpenMP 是一个基于C/C++的并行编程模型,提供了一个简单的方式来并行化计算任务。作者在 Demo 中使用 OpenMP 工具来并行化计算任务。 多线程编程 多线程编程是指在一个进程中创建多个线程,以提高计算速度。在该...
5. **TBB(Threading Building Blocks)**:Intel的TBB库为C++提供了高级并行编程接口,如任务并行、数据流编程和并行容器。本书将展示如何利用TBB实现高效的并行程序设计。 6. **性能分析与优化**:书中不仅讲述...
总的来说,这个多核并行实验旨在帮助学生掌握并行计算的基本原理和方法,提升他们在实际应用中的编程技能,以便在未来的工作或研究中充分利用多核处理器的优势。通过这样的实践,参与者将能够更好地理解和应用并行...
下面我们将深入探讨LabVIEW的多核并行编程技术: 1. **并行计算框架**:LabVIEW中的并行计算框架(Parallel Computing Toolkit,PCT)是实现多核并行处理的关键工具。它提供了并行循环、并行结构以及分布式内存并行...
在当今计算机硬件发展迅速的时代,多核处理器已经成为主流,因此掌握多线程和并行编程技术对于提升软件性能至关重要。这本书旨在帮助开发者从传统的顺序编程模式转向能够充分利用多核优势的并行编程,从而实现程序...
并行编程模型是一种计算机程序的设计方法,它利用多核处理器的并行计算能力,将程序任务划分为多个子任务,并分配给不同的处理器核心处理,以实现计算效率的提高。 多核处理器与并行编程模型的工作原理多核处理器的...
此外,文章还引用了相关的参考文献,为读者提供了深入研究多核并行编程模型的专业指导。文献标识码为A,表明它具有较高的学术价值和研究意义。多核处理器的并行编程是计算机工程与设计领域的重要课题,对于理解和...
使用场景及目标:本文提供了详细的技术指南,旨在帮助使用者更好地理解和掌握LabVIEW下的多核并行编程技巧,适用于科学研究、工程计算、数据采集与分析等领域,尤其是在高性能计算环境中。 其他说明:文章引用了具体...
【大场景点云文件多核并行批量压缩方法研究】主要关注的是如何高效处理大量点云数据的压缩问题。点云文件是由激光雷达(LiDAR)技术生成的三维空间点集,通常包含数百万乃至数十亿个点,用于地理信息系统、虚拟现实...
TBB是一种基于C++模板的并行编程库,其核心设计理念是简化多线程编程的复杂性,并实现线程安全的并行控制和数据对象。TBB将传统的串行程序中的可并行部分进行重构,利用多核处理器的并行计算能力,从而实现性能提升...