Unified Parallel C(UPC)は、大規模な
並列計算機における
高性能計算のために開発された
プログラミング言語であり、
C言語を拡張したものです。この言語は、共有大域アドレス空間(
対称型マルチプロセッシング、
NUMA)を持つシステムと、クラスターのような分散メモリを持つシステムの両方に対応しています。
UPCのプログラミングモデルでは、プログラマーには共有された単一の区分化アドレス空間が提供されます。これにより、変数はどのプロセッサからでも直接読み書きできますが、物理的にはそれぞれの変数が特定のプロセッサに関連付けられています。このアプローチは、プログラマーがメモリの物理的な配置を意識せずに並列処理を記述できるようにすることを目的としています。
UPCはSPMD(Single Program Multiple Data)モデルを採用しており、プログラムの実行開始時に並列性が固定されるという特徴があります。通常、各プロセッサに1つのスレッドが割り当てられます。このモデルは、並列処理を効率的に管理しやすく、プログラムの構造を明確にするのに役立ちます。
並列性を表現するために、UPCはC99を拡張しており、具体的には以下の要素が追加されています。
明示的な並列実行モデル: プログラムの並列部分を明示的に指定できます。これにより、プログラマーは並列処理の粒度と同期を細かく制御できます。
共有アドレス空間: すべてのスレッドが同じメモリ空間を共有し、データのやり取りが容易になります。これにより、分散メモリシステムにおける複雑なデータ転送を抽象化できます。
同期の基本動作とメモリ整合モデル: スレッド間の同期を制御するためのプリミティブと、メモリ操作の順序を保証するためのルールが提供されます。これにより、並列処理におけるデータの整合性を保つことができます。
メモリ管理の基本動作: 共有メモリの管理を支援する機能が含まれており、メモリの割り当てと解放を容易に行うことができます。
UPCは、先行する3つの言語(AC、Split-C、Parallel C Preprocessor)で得られた知見を基に進化しました。これらの言語は並列処理の様々なアプローチを試みましたが、UPCはこれらの言語の上位言語ではなく、それぞれの利点を統合して設計されました。UPCは、共有メモリプログラミングの利点と、メッセージパッシングプログラミングによるデータレイアウトと性能制御の利点を両方とも活用できるように設計されています。
UPCに関連する技術や言語として、以下のようなものがあります。
Co-array Fortran: 並列処理のためのFortranの拡張。
Chapel: 並列処理に特化した新しい
プログラミング言語。
X10 (プログラミング言語): 並列処理をサポートするJavaベースの言語。
High Performance Fortran: 並列処理のためのFortranの拡張。
OpenMP: 共有メモリ並列処理のためのAPI。
区分化大域アドレス空間: UPCの基盤となるメモリモデル。
並列計算: 計算処理を並列化して高速化する分野。
ソフトウェアトランザクショナルメモリ: 並列処理におけるデータの競合を避けるための技術。
UPCに関するより詳細な情報や技術資料は以下のリンクから入手できます。
upc-lang.org
UPC at GWU
Programming in the Partitioned Global Address Space Model (ビル・カールソン、タレク・エルガザウィ、ロベルト・ヌームリヒ、カシー・イェーリック 共著、PDFファイル)
ParC
これらのリンクから、UPCのより詳しい情報やプログラミングに関する知識を得ることができます。UPCは、高性能な
並列計算を効率的に行うための強力なツールであり、大規模な科学計算やデータ分析などの分野で活用されています。