用語と解説:
● 並列コンピュータ
単一の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のような並列プログラミングのスタンダードが必要で、これにより、並列処理プログラムが増え、並列処理によって処理を高速化できるソフトウエアが増えていくものと期待されます。
|