C语言并行计算之基础概念(转)

原稿地址:http://www.cnblogs.com/kuliuheng/p/4058858.html

 

 并行计算(Parallel
Computing)是赖又用多算资源解决计算问题之历程,是增强计算机体系计算速度和处理能力的相同栽有效手段。它的中心思维是因此多单计算机来并求解同一问题,即将于求解的题材解释变成几个组成部分,各组成部分均是因为一个独立的拍卖机来并行计算。并行计算系统既可以是专门计划的、含有多独计算机的超常级计算机,也可是因某种方式互连的若干台的独自计算机构成的集群。通过并行计算集群完成多少的拍卖,再以处理的结果回到给用户。  

  并行计算或如平行计算是对立于串行计算的话的。所谓并行计算可分为时间达之互相和空间达到之相互。
时间上的相互就是负流水线技术,而上空及的相则是据用几近只电脑并发的行计算。

  并行计算科学中根本研究之是空间及之互相问题。从程序和算法设计人员之角度来拘禁,并行计算又只是分为数据交互和职责并行。空间达到之互导致了点儿接近并行机的有,按照Flynn的说法分为:单指令流多数据流(SIMD)多指令流多数据流(MIMD)。我们常因此底差行机也称为单指令流单数据流(SISD)。

  MIMD类的机械而可分为以下常见的五类:并行向量处理机(PVP)、对如多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。

  时大面积的互相编程技术包括:MPI、OPENMP、OPENCL、OPENGL、CUDA。下面了解一下这些泛并行编程技术的底蕴概念:

(1)MPI

  MPI(Message Passing
Interface)是千篇一律种普遍利用的根据消息传递的并行编程技术。MPI消息传递接口是均等种植编程接口标准,而无是相同种具体的编程语言。简而言之,MPI标准定义了相同组有可移植性的编程接口。各个厂商还是团体仍这些专业兑现协调的MPI软件包,典型的落实包括开源代码的MPICH、LAM
MPI以及不上马放源代码的Intel
MPI。由于MPI提供了合并的编程接口,程序员只待统筹好并行算法,使用相应的MPI库就得实现冲消息传递的并行计算。MPI支持多操作系统,包括大部分之类UNIX和Windows系统。

(2)OPENMP

  OpenMP大凡出于OpenMP Architecture Review
Board牵头提出的,并曾于周边接受的,用于共享内存并行系统的多线程程序设计之一律效仿指导性的编译处理方案(Compiler
Directive)。OpenMP支持之编程语言包括C语言、C++和Fortran;而支持OpenMp的编译器包括Sun
Compiler,GNU Compiler和Intel
Compiler等。OpenMp提供了对并行算法的高层的架空描述,程序员通过以源代码中在专用的#pragma来指明自己的企图,由此编译器可以自动将次第开展并行化,并在必要的处在进入协互斥以及通信。当选择忽略这些#pragma,或者编译器不支持OpenMP时,程序同时可退化为平常的次第(一般也失误行),代码仍然可正常运转,只是不能够以基本上线程来加速程序执行。

 (3)OPENCL

  OpenCL(Open Computing
Language,开放运算语言)是首先个面向异构系统通用目的并行编程的开放式、免费标准,也是一个合的编程环境,便于软件开发人员也大性能计算服务器、桌面计算体系、手执设备编写高效轻饶的代码,而且普遍适用于多中心处理器(CPU)、图形处理器(GPU)、Cell类型架构和数字信号处理器(DSP)等其它并行处理器,在打、娱乐、科研、医疗等各种领域还出常见的发展前景。

  OpenCL是一个为异构平台编写程序的框架,此异构平台只是由CPU,GPU或外种类的微机组成。OpenCL由同样山头用于编写kernels
(在OpenCL设备上运行的函数)的言语(基于C99)和同样组用于定义并决定平台的API组成。OpenCL提供了基于任务分割和多少分割的并行计算机制。OpenCL类似于另外两个放之工业标准OpenGL和OpenAL,这半单专业分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的力量。OpenCL由非盈利性技术团队Khronos
Group掌管。

 (4)OPENGL

  OpenGL(Open Graphics
Library)是独概念了一个跨编程语言、跨平台的编程接口规范的正式的图纸程序接口。它用于三维图象(二维的克),是一个功能强大,调用方便的底层图形库。

(5)CUDA

  CUDA(Compute Unified Device
Architecture)是如出一辙种由显卡厂商NVIDIA推出的通用并行计算架构,该架使GPU能够解决复杂的乘除问题。
它含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
开发人员现在可运用C语言来也CUDA™架构编写程序,C语言是利用最广大的一致种植尖端编程语言。所编纂出底次第于是便可当支持CUDA™的计算机上盖超高性能运行。CUDA3.0曾经开始支持C++和FORTRAN。