浅谈并行编程语言 Unified Parallel C

简介: 随着多核技术的发展,为了提高硬件的利用率和满足超级计算日益增长的需求,并行编程语言应运而生,UPC 就是其中之一。越来越多的程序开发人员面临到并行编程的问题,因此学习一门并行编程语言必要性变得愈发迫切。UPC 并行编程语言在国外已经得到重用,但是在国内介绍该语言的材料还比较匮乏。因此,本文通过重点介绍 UPC 并行编程语言对 C 语言所进行的扩展,使读者对 UPC 并行编程语言具有初步的认识,有利于读者进一步对 UPC 并行编程语言的学习。

并行编程和 Unified Parallel C 语言概述

并行编程介绍

并行编程是通过同步执行计算机指令的方式来取得比串行编程更快速度的一种编程方法。并行编程是相对于传统的串行编程而提出的概念。在串行编程中,一个程序的指令在单一的 CPU 上按照先后顺序依次执行,而在并行编程则将一个程序分成独立的若干部分在一个或多个 CPU 上进行同步执行以取得更高的运算效率和性能。

根据底层的内存结构,并行编程可以分为以下三种程序设计类型:

  • 共享内存模型:多个线程或进程同时运行。它们共享同一内存资源,每个线程或进程都可以访问该内存的任何地方。例如 openMP 就是采用共享内存模型。
  • 分布式内存模型:多个独立处理结点同时工作,每个处理结点都有一个本地的私有内存空间。执行程序的进程可以直接访问其私有内存空间。 若一个进程需要访问另一个处理结点处的私有空间,则此进程需要以发送信息给该进程来进行访问。MPI 就是采用分布式内存模型。
  • 分布式共享内存模型:整个内存空间被分为共有空间和私有空间。每个线程可以访问所有的共有空间,并且每个线程都有自己独立的私有空间。Unified Parallel C 就是采用分割全局地址空间模型。

Unified Parallel C 语言概述

Unified Parallel C (UPC) 是基于分布式共享内存程序设计模型,应用于超级计算机上进行高效能计算的并行编程语言。它提取了 AC, Split C, Parallel C Preprocessor 这三种并行语言的优点,对 C 语言(ISO C99 标准)进行扩展,增加了一些特性和概念使之既保留了原来 C 语言的简洁高效的优点,同时又可以支持并行编程。可以说 , UPC 并行编程语言是 C 语言的超集,任何语法正确的 C 语言在 UPC 中都是正确的。

为了支持并行编程,UPC 对 C 语言作了以下的扩充:

  • 显式并行执行模型
  • 共享内存空间
  • 同步原语与存储一致性模型
  • 内存管理原语