RWCP10年史 >トピックス > 1999年度 > 「OpenMPコンパイラと自動並列化ソフトウェアを開発」
10年史:トピックス
1999年度

1999年11月8日

「OpenMPコンパイラと自動並列化ソフトウェアを開発」

 

--- 並列プログラミング言語OpenMPコンパイラと既存プログラムを
OpenMPプログラムに変換する自動並列化ツールを開発し、
並列処理プログラミングを容易に ---

 

概要:

 新情報処理開発機構(RWCP)では、単一CPUの性能限界を超えて高速情報処理を実現する並列処理技術の開発を一つの柱として研究を行っている。並列処理のプログラミングは単一CPU計算機のプログラミングに比較して、プログラミングが難しいことが難点であったが、このたび、新情報処理開発機構のつくば研究センタとマルチプロセッサコンピューティング日立研究室においては、並列処理を容易に行うソフトウェアとして、Omni Open MPとWPPを開発した。

 Omni Open MPは、Linuxにも対応し、種々のSMP計算機で使用でき、比較的容易に使用できる並列プログラム言語であるOpenMPのコンパイラである。商品として、現在一般に入手可能なOpenMPコンパイラは米国製のもののみ。

 更に、従来からの並列計算機使用上の問題点を解決するために、通常の計算機用に書かれたFortranプログラムを解析し、自動的に並列プログラム(OpenMP)に変換するソフトウェアWPP(Whole Program Parallelizer)を開発した。プログラム全体を知的に解析することにより、効率的なプログラミングを可能とすることに成功した。

 これらのソフトウェアにより、従来難点とされてきた並列計算機のプログラミングが普通の計算機と同様にできることとなり、並列計算機の利用者負担の著しい削減が期待され、ひいては並列計算機市場の拡大が期待される。

 これらのソフトウェアは今年11月に米国ポートランドで開催されるスーパーコンピューティング国際会議(SC99)の研究展示において実際に稼働させ、その有効性が示される。なお、この研究展示では、当ソフトウェアの他に同機構の研究成果が展示される。

 

Omni OpenMPコンパイラの開発:

 OpenMPとは、最近普及してきた共有メモリ型マルチプロセッサ向けの並列プログラミング標準化インタフェースで、CやFortranなどの既存の言語の逐次プログラムに指示行を加えることにより、段階的に並列化できるのが特徴である。

 OpenMPコンパイラは、国内メーカでも開発中であるが、現在、市販されているのは米国製のもののみ。今回開発したOmni OpenMPコンパイラは、CとFortranをサポートしており(C++は、今年度末予定)、POSIXスレッドライブラリをサポートしている種々の並列計算機に対応している。特に、最近注目されているLinuxを利用したSMPでも利用できる。web上にて登録することにより、研究目的等の条件のもとに、無償でソースプログラムをダウンロードできる。

 

WPPの開発:

 WPPは、既存のFortranのソースプログラムを全体にわたって解析を行い、並列化可能な部分を検出、OpenMP並列プログラムに変換するソフトウエア。これまでのスーパーコンピュータのコンパイラなどでは、局所的なループレベルでの並列化は可能だったが、このツールではプログラム全体にわたって解析することにより、より有効な大きい処理単位でも並列化が可能になっているのが特徴。さらに、並列化されたプログラムをOpenMPプログラムとして出力することにより、OpenMPコンパイラの利用可能な様々な並列計算機で容易に実行できるようになる。

 

WPPとOmni OpenMPによる容易な並列処理プログラミング環境の提供:

 これら2つのソフトウエアを組み合わせることにより、既存の、または新しく開発した並列化されていないプログラムをWPPで自動並列化し、Omni OpenMPコンパイラでLinux SMP等の並列計算機でコンパイル・実行できる環境を構築することができる。また、途中のOpenMPプログラムを修正することによって、人手による修正も可能。並列処理は高性能化に有効な手段だが、これまで、並列プログラムを作成するのが難しく、並列処理の有効利用を妨げてきた。WPPとOmni OpenMPコンパイラは、このような問題点を解決し、並列処理をより見近なものとすることが期待される。

 新情報処理開発機構では、1999年11月に米国ポートランドで開催されるスーパーコンピューティング国際会議(SC'99)の研究展示において、WPPとOmniコンパイラによる自動並列化のデモを行う。

 新情報処理開発機構では、プログラミングの比較的容易なOpenMPを並列処理の中核的な記述言語として位置付けており、PCやWSの計算機クラスタや並列スーパーコンピュータ向けのOpenMPコンパイラの研究も行っている。

 

本件連絡先:

★ Omni OpenMPコンパイラ

研究技術組合 新情報処理開発機構 つくば研究センタ
並列分散システムパフォーマンス研究室  佐藤 三久

★ WPP (Whole Program Parallelizer)

研究技術組合 新情報処理開発機構 
マルチプロセッサコンピューティング日立研究室 菊池純男

 

用語と解説:

● 並列コンピュータ

単一のCPUでは、性能限界がある。これをうち破る手段として有効なのは複数のCPUを使用して並列コンピュータ構成し、CPUを協調させて一つの問題を解く並列処理がある。
並列コンピュータはその形態により、各プロセッサが固有のメモリをもち、メモリを共有しない分散メモリ型のコンピュータと、メモリを共有している共有メモリプロセッサに大別される。超並列コンピュータや、並列処理では一般的な形態になってきたワークステーションやPCをネットワーク結合した計算機クラスタは、分散メモリ型並列コンピュータである。最近では、共有メモリ型計算機をネットワークで結合したクラスタもある。

● 共有メモリ型マルチプロセッサシステムとは

ハードウエアにより、複数のCPUがメインメモリを共有するマルチプロセッサシステムは、その方式により、メインメモリを共通のバスでアクセスするUMA(Uniform Memory Access)、各CPUに結合されたメモリをネットワークを用いて共有するNUMA(Non-Uniform Memory Access)などがある。最近では、Intel社のCPUも複数共有メモリに対応しており、最新のプロセッサではPentium III Xeonが4CPUまで対応、サーバーなどの用途に使われている。SMP(symmetric multiprocessor または shared memory processor)と呼ばれることがある。

 

● OpenMPとは

OpenMPとは、共有メモリ型マルチプロセッサ向けの並列プログラミング標準化インタフェースで、CやFortranなどの既存の言語を使用した逐次プログラムに指示行を加えることにより、段階的に並列化できるのが特徴。米国のコンパイラ関係のISVを中心として、フォーラムが設立され、米国のコンピューターメーカが参加し、標準化活動をしている。これまで、97年にFortran、98年にC/C++のOpenMP API(Application Program Interface)が発表されている。OpenMPを用いることにより既存のコードをなるべく変えずに、並列プログラムを簡単に作成できるため、並列化のコストを下げることができる。詳しくは、http://www.openmp.org/を参照のこと。

 

●並列化プログラミングインタフェースの動向

分散メモリ型並列コンピュータシステムでは、メッセージ通信ライブラリで並列プログラミングするのが一般的。標準的に使われているメッセージ通信ライブラリにはMPIやPVM等がある。共有メモリシステムでは、これまで、POSIXスレッドライブラリなどのライブラリを使って並列プログラミングを行っていた。スレッドライブラリでは低レベルの機能しかサポートされないため、これまでの既存のプログラムを簡単に並列化するために、OpenMPが提案された。分散メモリ向けの高レベルなインタフェースとしては、HPF(High performance Fortran)がある。これからの並列システムの形態として一般的にに成りつつある共有メモリプロセッサをネットワークで結合したSMPクラスタに対しては、共有メモリ部分をOpenMP、分散メモリ部分をMPIで書くことが一般的に成りつつあるが、プログラムが複雑になるなど問題も多い。

 

● 自動並列化とOpenMP

これまで、十数年にわたって既存のプログラムを並列化する研究が行われている。従来、スーパーコンピュータのコンパイラなどでは、ベクトル処理のためにループレベルの並列化をおこなっていたが、共有メモリプロセッサに向けての並列化のためには大きい処理単位での並列化が必要となる。直接、並列プロセッサの命令にコンパイルするシステムが多かったが、OpenMPの標準化が行われてから、自動並列化の結果をOpenMPプログラムで出力するコンパイラの研究が米国の大学などでも行われている。

 

● WPPの詳細

WPP(Whole Program Parallelizer)は並列計算機を意識しないで書かれたFortranプログラムから、OpenMPプログラムを自動生成する。手続き間解析(サブルーチンや関数等の手続きを全部まとめて解析すること)によって、call文等の手続き呼出しを含むループを並列計算機向きのループに自動変換できる。これによって、より多くのループ、より実行時間のかかるループが複数のプロセッサで分担されて実行され、プログラムの実行時間が短縮される。自動生成されたOpenMPプログラムはOmni OpenMPコンパイラ等でコンパイルされ、様々な計算機上で実行される。現在、入力プログラムとしてFortran77にのみ対応している。Fortran90/C/C++の言語への対応は今後行なっていく予定である。また、WPPの並列化解析情報を表示するツールを開発した。これによって、ユーザはWPPによる各種解析情報やループの並列化状況を見ることができる。

 

● Omni OpenMP コンパイラの詳細

開発したOmni OpenMPコンパイラは、CとFortranのOpenMPプログラムをコンパイルできる。(Fortranはfortran77対応、一部機能は未実装) 今年度末までにC++に対応する予定。コンパイラは、スレッドライブラリを利用した実行時ルーチン呼出を含むCプログラムを出力し、これをそれぞれの計算機で稼働するCコンパイラでコンパイルする。POSIXスレッドライブラリのほか、Solarisスレッドライブラリでも実行できる。コンパイラの1部はJavaで記述されているため、Javaプログラムの実行環境が必要となっている。現在、対応が確認されているプラットフォームは、Linux 2.2.10 (SMP)、SGI Origin 2000, Sun Solarisなど。
利用には、新情報処理開発機構の規定により、web上でユーザ登録することが必要。登録することによって、無償でソースプログラムをダウンロード、インストールすることによって、登録時の条件下で利用できる。 OpenMPの情報、Omni OpenMPの情報も提供している。

 

背景説明:

●並列化が何故いいのか:

マイクロプロセッサはこの5年ぐらいの間で急速な進歩を遂げて、プロセッサの性能の大きな指標であるクロック速度もこの1、2年で1GHzに達しようとしています(現在、多くのパソコンで使われているインテルのプロセッサは600MHz)。 しかし、この先、プロセッサの製造技術も量子的限界などの原理的な問題をはじめ、限界を迎えるといわれています。1つのプロセッサの性能向上が限界に達したとき、その解決方法は処理を多数のプロセッサで行う、すなわち、並列処理しかありません。
現在においても、並列処理は処理を高速化する有効な方法です。つまり、一人の人(プロセッサ)ではなく、複数の人(プロセッサ)で協力して仕事を処理しようというわけです。並列プログラムさえあれば、ならべた分だけ、これまでのコンピュータ(パソコン)を並べて、高速ができます。
並列化は、高速化が最も重要な目的であるスーパーコンピュータだけではありません。つくば研で研究開発が行われているように、パソコン(PC)を数多くならべることにより、スーパーコンピュータ並の性能を得ることができます。パソコンは大量生産により非常に安価ですので、コストパフォーマンスのよいシステムを簡単に構築できます。

 

●現状の問題点、解決策:

現状の大きな問題点は、並列プログラムを作成するのが困難な点です。並列処理をするためには、既存の1つのプロセッサのためのプログラムを複数のプロセッサで実行できるように書き換えなくてはなりません。現在多くのプログラムが仕事間のデータのやりとりを人間がいちいち制御するメッセージ通信プログラムという方法でやっていますが、とても難しく、だれでもできるというものではありません。

このためには、今回発表するWPPのように自動的に並列化するソフトウエアや、OpenMPのようになるべく簡便にプログラムできるソフトウエアが期待されています。新情報処理開発機構では、これのほかに、並列プログラムの部品を用意してこれを組合せ利用できるようするオブジェクト指向技術による並列プログラムの研究も行われています。 だだし、問題によっては原理的に、仕事が並列に行えないプログラムや、簡単に並列化できないプログラム、並列にやってもデータのやりとりが頻繁に発生し高速化ができないプログラムもあることも事実です。そのために、プロセッサ間の通信を高速化し、なるべく並列処理ができるようにするネットワークも開発しています。

 

●内外における研究開発現状:

並列処理の歴史は計算機のはじまりと同時といわれるように古いものです。しかし、研究開発としていろいろな並列計算機が開発されましたが、現在では同じメモリをハードウエアで共有する共有メモリ型とネットワークで結合する分散メモリ型に定着しています。並列アーキテクチャ、ハードウエア技術では、スーパーコンピュータは日本は進んでいますが、ワークステーションやサーバー、パソコンなどの並列システムは、基礎となるマイクロプロセッサの開発が少ないため、日本では進んでないという現状です。そのなかで、つくば研で開発したPCクラスタなどはハードウエアの要素は一般的なものを使っていますが、並列処理システムとしてはユニークなものといえます。
ソフトウエアにおいては、標準が米国主導のグローバルスタンダードできまるという現状です。今回のOpenMPコンパイラは、グローバルスタンダードのソフトウエアを先駆けて開発し、日本における並列処理の発展に貢献しようというものです。

 

●市場の将来性:

基本的には、中期的な将来において、計算機を高速化する手段は「並列化」しかありません! いまや、科学技術計算をおもな目的とするスーパーコンピュータでは、並列でないシステムはありません。したがって、他の高速化が必要とされるような分野での、並列処理技術の潜在的将来性は確実なものです。
いま、パソコンでも2つのプロセッサを持つようなシステムはほとんど通常のパソコンとあまり違わない価格で手にいれることができます。これが、4つのプロセッサになるのも時間の問題です。多くの場合は、異なるプログラムを違うプロセッサで実行するのが簡単な使い方ですが、非常に時間のかかる仕事、たとえば、デジカメなどの写真の画像処理など、は複数のプロセッサを同時に使う並列ソフトウエアは既に発売され、使われています。近い将来、パソコンでも並列処理の高速化によって、更に高度なソフトウエアが開発されるでしょう。
そのためにも、並列プログラムを簡単にすることと、更に作った並列プログラムが色々な並列計算機で流通することが必要です。そのためにも、OpenMPのような並列プログラミングのスタンダードが必要で、これにより、並列処理プログラムが増え、並列処理によって処理を高速化できるソフトウエアが増えていくものと期待されます。



Real World Computing Project (1992-2001)  RWCPメモリアル