汎用エデ ィタ上で使用可能な対話型プログラム 並列化支援ツールに関する研究
石原 誠
電気通信大学
年
月
プログラム並列化支援ツールに関する 研究
石原 誠
電気通信大学 大学院情報システム学研究科 博士 工学
の学位申請論文
年
月
汎用エデ ィタ上で使用可能な対話型 プログラム並列化支援ツールに関する
研究
博士論文審査委員会
主査 本多 弘樹 助教授
委員 弓場 敏嗣 教授
委員 曽和 将容 教授
委員 出澤 正徳 教授
委員 吉永 努 助教授
石原 誠
!" ##
$
!
"
#
$
%
&
& &
'!(
! (
& $
!
! $
'!( )*+ , !
! ( -
& '!(
汎用エディタ上で使用可能な対話型プログラム並列化支 援ツールに関する研究
石原 誠 概要
気象予測や風洞実験などのために並列計算機が必要不可欠となってきた.そこで それら並列計算機上で効率よくプログラムを動かすために逐次プログラムを並列化 した並列プログラムが必要になる.
並列プログラムを作成する手法を大別すると自動並列化コンパイラを用いる手法 と人手による手法に分類される.自動並列化コンパイラは自動並列化手法を用いて 逐次プログラムを並列化するため,手間のかからないプログラム並列化が可能であ る.しかし,自動並列化手法だけでは並列化できないプログラム部分が存在するた めにプログラムの性能低下につながることがある.一方で人手によるプログラム並 列化は自動並列化コンパイラでは並列化できなかったプログラム部分を並列化でき る可能性があるが,手間がかかりミスを含みやすいといった問題点がある.そこで,
自動並列化コンパイラによる自動並列化手法と人手によるプログラム並列化を組み 合わせる環境としてプログラム並列化支援ツールがあり,様々に研究開発され,注 目を集めている.しかし,それらツールの多くでは煩雑な作業を要求され,限られ た環境での並列化を余儀なくされたり,ツール自体が高価であったりするため,利 用に際し敷居が高いといった問題点が指摘されている.
そこで,本研究ではこの問題点を解決するための並列化支援ツールの枠組みを提 案し ,近年注目を集めている並列化& である! ( を対象とした並列化支援 ツール '!( を開発した.提案する枠組みは次の通りである.
.:汎用エデ ィタ上での並列化支援を行なえるようにする.こうすることにより,
プログラマは普段使用しているエディタ上でプログラムをしながら対話的に並列化 支援を受けられるといった利点を得る.
/:ツールとプログラマ(ユーザ)の役割を次のように決めている.ユーザの役割 はプログラム編集,支援ツールへの並列化支援要求,支援ツールからの結果表示に 対する並列化判断,プログラムリストラクチャリングの指示,支援ツールに対して
提示,ユーザのプログラムリストラクチャリングの指示に対するリストラクチャリ ングの実行とする.
この役割分担により二つの利点が期待できる.まず一つは並列化プログラムの可 読性の高さの維持である.自動並列化コンパイラが出力するコンパイル結果は可読 性が低いといった点が指摘されているが,プログラムの編集をユーザが行なうこと によりプログラムの可読性を維持できると考えられる.可読性の高いプログラムは そのプログラムの理解力を高め,プログラムのしやすさに影響している.特にイン クリメンタルな並列化を可能としている! ( ではこの利点は大きい.もう一つ の利点は実行時オーバヘッドが目立つような無駄な並列化の防止である.自動並列 化コンパイラでは並列化できるところは何でも並列化してしまうため,オーバヘッ ドが顕著になるようなプログラム部分に対しても並列化を行なってしまう.一方で 本研究の枠組みでは,ユーザがプログラムの並列化に関して最終的な判断を任され ているために,オーバヘッドが顕著になるような並列化を未然に防ぐことが期待で きる.
0:テキストベースの対話型並列化を行なうこととする.具体的には,ユーザから のプログラムリストラクチャリングの指示とプログラム並列化に関する重要なプロ グラム特性の提供をツール独自のデ ィレクティブで行なうこととしている.こうす ることにより,ツールからはプログラム並列化に関するメッセージを,ユーザから はツールディレクティブを提供することでテキストによる対話型並列化を可能とし ている.
1:可搬性と拡張性と低コスト導入を可能とする.すなわち,どのハード ウエアや
!2を選択しても使えるようにフリーのコモディティソフトウエアで誰もが後付でき るようなフレームワークを持った並列化支援ツールを提供することとしている.実 装では,汎用エデ ィタとして)*+ ,を,プログラム解析機能としてフリーソ フトウエアである!! ( コンパイラをベースにシステム構築を行なった.
結果として,いつでも,どこでも,だれもが使用できる簡便な対話型プログラム 作成支援ツールを構築し,提唱した枠組みの実現可能性を示した.本研究成果は,並 列化支援ツールの今後のあり方を示すものとして意義がある.
目 次
目 次
はじめに
.. 本研究の背景 .
./ 本研究の目的と方法 0
.0 本研究の成果 1
.1 本論文の構成 1
並列プログラム作成環境および本研究の位置づけ
/. 並列計算機アーキテクチャ 3
// 並列化アプリケーションプログラムインタフェース 4
/0 プログラム並列化コンパイラ 5
/1 並列プログラム作成支援ツール 6
/3 既存のプログラム並列化システムの問題点と本研究で作成するツール
の位置づけ .7
提案する枠組みと作成したツール
0. 提案する枠組み .3
0.. エデ ィタ組み込み型支援機能 .3
0./ ツールとユーザの役割分担 .8
0.0 ユーザとのテキストによる双方向対話 .4
0.1 ツールの可搬性と拡張性と低価格導入 .6
0/ '!( の支援機能 .6
00 '!( を用いた場合の典型的な並列化のシナリオ //
実装
1. 実装環境 /1
1/ ! ! ( コンパイラ /3
10 )*+ /8
11 支援ライブラリ /4
13 )*+ , /4
18 ,上の '!( 環境 /5
18. '!( 起動関数 /5
18/ 支援機能実行関数 /5
180 メッセージ解析関数 /5
181 ! ( デ ィレクティブ挿入関数 /6
14 支援機能 0.
14. ループのスカラ変数に関する並列性解析機能 0.
14/ ループの配列変数に関する並列性解析機能 0/
140 ! ( デ ィレクティブ作成機能 00
141 実行時間解析機能 08
143 プログラムリストラクチャリング機能 05
148 制限事項 17
を用いたワークフローおよび実行例
3. '!( を用いたワークフロー 1.
3/ '!( の実行例 11
動作検証および評価
8. 2 ,- !( (における動作検証 87
8/ における動作検証 85
80 における動作検証 47
81 における動作検証 4/
83 提案する枠組みがもたらす効果の検証と考察 41
おわりに
4. 研究成果とその意義 51
4/ 今後の課題 58
データの流れ解析
ループの配列変数に関する並列性解析機能
動作検証に使用したプログラム一部
図 目 次
図 目 次
. 共有メモリ型並列計算機モデル 3
/ 分散メモリ並列計算機モデル 8
0 分散共有メモリ型並列計算機モデル 8
1 '!( でのユーザが知っている内部特性の挿入例 .5
3 '!( でのユーザが指示するプログラムリストラクチャリング例 .5
8 提案した枠組みおよび支援機能の概略図 /.
4 '!( を用いた場合のプログラム並列化のシナリオ /0
5 ! ! ( コンパイラの基本機能 /8
6 '!( 実装時の概観 07
.7 スカラ変数が理由で並列化できない例 0/
.. ! ( デ ィレクティブ作成例 03
./ 実行時間解析の流れ 04
.0 ループ インターチェンジ 05
.1 ループアンローリング 06
.3 現時点における '!( の実行制約条件 17
.8 '!( の実行時画面例 10
.4 '!( の実行の一例9,起動時: 11
.5 '!( の実行の一例9 '!( 起動指示: 13
.6 '!( の実行の一例9 '!( 起動時: 18
/7 '!( の実行の一例9実行時間計測結果の表示の指示: 14
/. '!( の実行の一例9実行時間計測結果の提示: 15
// '!( の実行の一例9依存発見: 16
/0 '!( の実行の一例9適切な! ( デ ィレクティブの提示: 37
/1 '!( の実行の一例9挿入の確認: 3.
/3 '!( の実行の一例9! ( デ ィレクティブ挿入: 3.
/8 '!( の実行の一例9リストラクチャの指示: 3/
/4 '!( の実行の一例9リストラクチャされたコード の提示: 30
/5 '!( の実行の一例9リストラクチャされたコード の挿入と元の
文のコメントアウト: 31
/6 '!( の実行の一例9配列の間接参照の発見: 33
07 '!( の実行の一例9ユーザのディレクティブの挿入による知識
提供: 38
0. '!( の実行の一例9並列性の抽出: 34
0/ -プログラムの変換・逆変換例 44
00 実装環境9表3:で実行したテストプログラム 45
01 到達定義のデータフロー方程式 68
03 到達定義の反復アルゴ リズム 64
08 プログラミングモデル9未正規化: .77
04 正規化されたプログラミングモデル .70
05 ユニモジュラ行列作成のアルゴ リズム .71
06 配列のデータ依存関係を解析するためのプログラミングモデル .75
表 目 次
表 目 次
. 各並列化支援ツールのユーザインタフェース比較 .3
/ 各並列化支援ツールの役割分担比較 .4
0 各並列化支援ツールのユーザにおける知識提供方法の比較 .6
1 各並列化支援ツールの配布形式の比較 .6
3 実装環境 /1
8 各並列化支援ツールのインタフェースの比較 /6
4 検証プログラム 35
5 2 ,- !( ( 0/7 における検証結果 80
6 2 ,- !( ( 007 における検証結果 83
.7 2 ,- !( ( 00/ における検証結果 84
.. における検証結果 86
./ における検証結果 4.
.0 における検証結果 40
.1 各並列化支援機能が提供している機能比較 41
.3 実装環境9表3:におけるテストプログラムの実行時間計測結果 46
.8 ( 2 コンパイラののヒントデ ィレクティブの仕様 5.
.4 - &;のヒントデ ィレクティブの仕様 5/
.5 本方式で必要となりうるヒントデ ィレクティブの仕様 50
.6 に必要な正規化されたパラメータ ..7
はじめに
本研究の背景
気象予測,自動車の衝突解析,航空機の風洞実験などは高性能計算機で実行する ことが必須であり,複数台のプロセッサをバスやネットワークで接続した並列計算 機が利用されている.また,個人ユースのパーソナルコンピュータでも並列処理が 可能となっている.それら並列計算機上でのプログラムの実行のために逐次プログ ラムに付加するための並列化アプ リケーションプログラムインタフェース(& )
<.=</=<0=が研究開発され,様々な並列計算機向けに提供されている.
並列計算機上でのプログラムの並列実行のためには,並列プログラムを作成しな ければならない.人手による並列化では,並列化& を使用して直接並列プログラ ムを作成することや,逐次プログラムに並列化& を付加してプログラムを並列化 することが必要である.計算時間の短い並列プログラムを作成することができるか 否かはプログラマがプログラムの並列化に関しての知識を熟知し,並列化& をよ く理解してうまく使いこなし,適切にその& を並列化対象部分へ適用できるか否 かで決まる.しかし,並列化に関してミスが含まれる可能性があり,かつ並列化に 関しての手間が掛かる.
人手によるプログラム並列化で指摘されるこれら問題点を克服するために,人手 による並列化に替わる逐次プログラムの自動並列化方法が研究開発されている.そ れら成果物のひとつは自動並列化コンパイラ<1=<3=であり,自動的に逐次プログラム から並列化可能なプログラム部分を抽出し,その部分に対して並列化& を付加す ることを実現している.
このような自動並列化コンパイラは人手に代わり並列化を行なうために,短時間 で並列計算機向けのプログラムを作成することができる.ところが,実際には並列 化できるプログラム部分であったとしても,自動並列化コンパイラで用いられてい る手法だけでは並列性の抽出ができない場合がある.
これを解消するためには,自動並列化コンパイラを使用しているユーザ(プログ ラマ)が何らかの形でプログラム特性に関する知識を自動並列化コンパイラへ伝え て再度並列化を試みるか,そのプログラム部分に関してはユーザが手作業で並列化 を行わなければならない.
そこで,自動並列化コンパイラとユーザの知識を組み合わせるためのシステムと して,並列プログラム作成支援ツール<8=<4=が研究開発され,実用化されている.そ の中には,自動並列化コンパイラから出力された情報をユーザに提示してユーザの
はじめに /
並列化判断などを促し,ユーザの知識を使用した自動並列化を行うもの<8=<4=,自動 並列化コンパイラが出力した情報を0次元映像化しユーザに提示するもの<5=,プロ グラムの実行時情報を解析してその結果をユーザに提示するもの<6=,ユーザの命令 によりプログラムの変換を行うもの<8=などが存在する.
このように並列化支援ツールを使うことで,人手のみによる並列化の際に問題と なっていた手間やミスを含みやすい並列化を自動並列化手法で補い,一方では自動 並列化コンパイラだけでは不可能だったプログラム部分の並列化を人間の並列化に 関する知識を用いて並列化することができるようになる.
現在のプログラム並列化支援ツールは)+を用いているものがほとんどである.
例えば "<8=や 2<.7 =+>2&(' <4=は)+環境を使用し,ユー ザに様々な並列化のための情報を提供している.これらは,ツールが要求している 限定的な!2や実行環境で実行しなければならない.このためユーザは自らの持っ ている環境で並列化支援ツールを使用することは難しいことがある.また,たとえ その並列化支援ツールの環境が自らの環境と合致していたとしても,操作が煩わし く,プログラム並列化を行う人々にとって敷居の高い状態となっている.さらに,こ れらのツールの中には,並列化の目的ソースコード に変更が生じたときには別にエ デ ィタを用意し,ソースコード を編集をして再度並列化支援ツールでファイルの読 み込みからはじめなければならないものがある.これでは,並列化に際して手間が かかり,プログラム並列化作業が複雑なものとなってしまう可能性がある.例えば,
"においては,ユーザの知識をプログラムの並列性解析に用いているが,こ れらの情報はデータベース化されてプログラムとは別ファイルで格納されているた め,ソースコードが変更されればそれに合わせて一からプログラムの特性を入力し ていかなければならない.
また,現在のプログラム並列化支援ツールでは,機能が限られているものがある.
例えば 2や "などは,並列性解析機能とプログラムリストラクチャリン グ機能を持っているだけである.通常,プログラムの並列化部分を決めるためには,
実行時間を計測し,その結果からプログラム部分を並列化するか否かを判断する必 要がある.しかしこれらのツールには実行時間計測機能が備わっていないため,これ らツールは機能的に不十分な点があると考えられる.それに加えて,多くの現在知 られているツールは機能拡張性がない.例えば "は!2などの環境ごとにバ イナリファイルが用意されていてそれを配布する形をとっている.こうすることによ り内部の仕様を知られることはないが機能拡張性に関して乏しい仕様となっている.
また,ツールの価格もユーザにとっては問題になる場合がある.例えば "は とても高価で年間数十万円のライセンス料を払い続けなければならず,ユーザの経
済的負担は大きい.
一方では最近,パーソナルコンピュータの低価格および高性能化が著しく,並列計 算機を使用することが容易になってきている.その中でも共有メモリ型並列計算機 の一種である2( 92 ( :型やマルチコア- +のハード ウ エアの低価格化が目立つ.そのため,それら2( 型並列計算機向けプログラム並列 化& として! ( <0 =が注目を集め,安価な2( 型ハード ウエア等と! ( の普及に伴い,安価で誰でも使える! ( プログラム作成支援環境が必要となっ てきている.
以上のように,並列化支援ツールの分野において,様々な問題点を解決する技術 的な革新が渇望<..=されている.
本研究の目的と方法
本研究では,上記で述べた問題点を解決するための並列化支援ツールの枠組みに ついて大きく分けて次に示す1つを提案している.
.:どのような環境上でも簡単に並列化支援ツールが使えるようにするために,プ ログラム並列化支援機能を汎用エデ ィタ上で使用できることとし ,ユーザ9プログ ラマ:はエデ ィタ上でプログラム編集と同時にこれら支援機能と対話的な並列化を できることとする.
/:ツールとユーザの役割分担を次のように決めている.ユーザの役割はプログ ラム編集,ツールへの並列化支援要求,ツールからの結果表示に対する並列化判断,
プログラムリストラクチャリングの指示,ツールに対してのプログラム並列化に必 要なプログラム特性の提供を行なうこととする.一方でツールの役割はユーザから の支援要求に対するプログラム解析を行なった結果の提示,ユーザのプログラムリ ストラクチャリングの指示に対するリストラクチャリングの実行とする.
この役割分担により二つの利点が期待できる.まず一つは並列化プログラムの可 読性の高さの維持である.可読性の高いプログラムはそのプログラムの理解力を高 め,プログラムのしやすさに影響している.もう一つの利点は実行時オーバヘッド が目立つような無駄な並列化の防止である.ユーザがプログラムの並列化に関して 最終的な判断を任されているために,オーバヘッドが顕著になるような並列化を未 然に防ぐことが期待できる.
0:テキストベースの対話型並列化を行なうこととする.具体的には,ユーザから のプログラムリストラクチャリングの指示とプログラム並列化に関する重要なプロ グラム特性の提供をツール独自のデ ィレクティブで行なうこととしている.こうす
はじめに 1
ることにより,ツールからはプログラム並列化に関するメッセージを,ユーザから はツールディレクティブを提供することでテキストによる対話型並列化を可能とし ている.
1:このツールが安価に手に入れられ,かつ様々なプラットフォームで稼動可能 とするためにフリーソフトウエアで構成することとを可能とし,このツールに他の 開発者が後付けで機能拡張をしやすいようなフレームワークを提供することとして いる.
本研究では,上記枠組みでのツールの実現可能性を実証する目的で次の1つの並 列化支援機能を有する対話型! ( プログラム作成支援ツールを開発した.
?並列性解析機能はプログラムの各部分の並列化可否情報を提示する.
?! ( デ ィレ クティブ 作成機能は並列化可能部分に対して適切な! ( デ ィレクティブを提示する.
?実行時間解析機能はプログラム中のどの部分が実行時間を多く消費しているか を提示する.
@?プログラムリストラクチャリング機能はプログラムの最適化のためにプログラ ム変換を行なう.
本研究の成果
実行時間解析,並列性解析,! ( ディレクティブ作成,プログラムリストラ クチャリングの機能を)*+,上で簡便に実行する事ができることを示した.本 研究で提案した枠組みで作成されたプログラム並列化支援ツールが動作することを 実証でき,本研究で提案した枠組みが実現可能であることを示すことができた.本 研究成果は,並列化支援ツールの今後のあり方を示すものとして意義がある.
本論文の構成
本論文では,/章で本論文の研究の基礎となる並列計算機アーキテクチャやその 上で稼動する& および逐次プログラムを並列化するシステムについて述べ,本研 究の位置付けを述べる.0章では本研究で提案した枠組みについて述べ,1章でその 枠組みを実証するために作成したツールの実装方法を述べる.3章では,実際に本 研究で開発したツールを用いた場合のワークフローおよび 実行例を述べ,8章では 本ツールを用いてプログラム並列化を行なった結果などを議論し,最後に4章でま とめと今後の課題を述べる.
並列プログラム作成環境および本研究の位置づけ
本章では,現在使用されている並列計算機のアーキテクチャを述べ,現在使用また は研究されている並列プログラム作成環境について,プログラム並列化アプリケー ションインタフェース,プログラム並列化コンパイラ,並列プログラム作成支援ツー ルに分けて述べ,本研究で開発するツールの位置づけをする.
並列計算機アーキテクチャ
並列計算機は主記憶領域とプロセッサの配置から下記の0つのアーキテクチャが 存在する<./=.
共有メモリ型並列計算機
共有メモリ型並列計算機では,複数のプロセッサがバスやスイッチを経由して主 記憶に接続される形態をとる9図.:.このアーキテクチャが有するシステムのこと を2( 92 ( :と呼ぶ.このシステムでは,ひとつのバスで 複数個のプロセッサからの読み書きを処理しなければならないので,必然的に使用 できるプロセッサの数は限られてくる.
この方式の並列計算機では主に! ( <0=や <.0=などが並列化& とし て用いられ,並列化支援ツールでは+>2& (' <4=等が使用されている.
%27
ਥ⸥ᙘ ࡃࠬ ࡀ࠶࠻ࡢࠢ
%27 %27 %27
図 .? 共有メモリ型並列計算機モデル
分散メモリ型並列計算機
プロセッサと主記憶から構成されるシステムが複数個互いに接続された形態であ る.しかも,他のプロセッサに上の主記憶の読み書きは必ず相手のプロセッサに介
並列プログラム作成環境および本研究の位置づけ 8
在してもらう必要がある.この形態では,大規模なシステムを構築が可能であると いう特徴がある.近年,安価にスイッチングハブが入手できるようになりこのよう な形態が容易に構築できるようになっている9図/:.
この方式の並列計算機では( </ =A B<.=等が並列化& として使用され,並列 化支援ツールとしては "<8=等が使用されている.
ࡃࠬ ࡀ࠶࠻ࡢࠢ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
図 /? 分散メモリ並列計算機モデル
分散共有メモリ型並列計算機
分散メモリ型並列計算機と同様の形態であるが,プロセッサ間にまたがっている 主記憶を共通のメモリアドレスで管理する形態である.このために大きく分けて二 つの実現方法がある.ひとつはハード ウエアで実現をしているハード ウエアC2(, もうひとつはソフトウエアで実現をしているソフトウエアC2(である9図0:.
この方式の支援ツールとしては2$-&<.1=があげられる.
ࡔࡕ㗔ၞ
ࡃࠬ ࡀ࠶࠻ࡢࠢ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
%27 ਥ⸥ᙘ
図 0? 分散共有メモリ型並列計算機モデル
並列化アプリケーションプログラムインタフェース
通常,人手によって逐次プログラムを並列プログラムに変換する際には,並列化 アプリケーションプログラムインタフェース9& :を用いて行なう.その& とし ては現在,A B,( , @(および! ( などが使用されていることが多い.
A B9A B:<.=は,高性能コンピューティング用に開発され たプログラミング言語である.B言語に最小限の指示文を付加することによ り,分散メモリ型並列計算機で高性能な実行を目指している その特徴は,データ マッピング,つまりデータの各プロセッサへの分配方法を指示文(ディレクティブ ) で指示することにより,データの局所性を高めようとしているところである.A B では,このようにデータの分割をユーザが明示的に指示し,それ以外の仕事をコン パイラ任せにしている.これにより,ユーザは通信の指示や2 (C92
( C2:化を考えずにプログラムの並列化を行なうことができる.
一方で,( 9( :</ =は複数個のプロセス間の通信を明示 することにより並列処理を実現するタイプの-とB用の& の仕様であり,
主に分散メモリ型並列計算機上で使用されている.通信は一対一通信や一対多,多 対多9集団通信:の関数が用意されていて必要に応じてプログラマが各プログラム部 分に挿入することとしている.この& の仕様に則した代表的なソフトウエアは
( -A<.3 =であり,そのソースコードは無償で配布されている.また,( -Aは移 植しやすさを重視したつくりになっているために盛んに移植が行なわれた結果,小 規模な -クラスタから各並列計算機ベンダのスーパーコンピュータまで幅広いプ ラットフォームで( が実行可能となっている.
また, @(9 @(:<.8=は( と同様に,複数個のプロセス間 の通信を明示することにより並列処理を実現させるソフトウエアとして使用されて いる.( との決定的な違いは多機種のプロセス間で通信を行ないながら並列処理 を実行することができるところである.
! ( は共有メモリ型並列計算機の並列プログラミング用に開発された& で ある.! ( ではコンパイラディレクティブ9指示文' :を挿入することに より,ベース言語9B4767--DD:を拡張して並列化を可能としている.各 ソフトウエアベンダーや並列計算機ベンダーは,この& の仕様<.4=<.5=をもとに
! ( コンパイラを作成し提供している.! ( コンパイラとしては,商用版 では- <.6=,フリーソフトウエアとしては! ! ( - </7=
などが存在する.
並列プログラム作成環境および本研究の位置づけ 5
プログラム並列化コンパイラ
( や! ( を用いて逐次プログラムを並列化するためには,人手によって 行なう方法があるが,それは手間がかかりかつミスを含みやすいなど 様々な問題を 含んでいる.それらを解決するための方式のひとつとして,逐次ソースコード の中 から並列性を抽出し,その情報をもとに自動的に並列化を行なうプログラム並列化 コンパイラが存在する.
2+B</.=は,コンパイラの研究開発を容易に行なうことができるように開発され たインフラストラクチャである.これを使用して作成されたコンパイラでは,逐次 プログラムの中から主にループ単位で並列化部分を見つけ出し,プログラムの並列 化を行なう.また,プログラムのリストラクチャリング( 再構築)等を行ないプロ グラムのパフォーマンスを高めようと試みている.
-!*2<//=も2+B同様にコンパイラを開発するための共通インフラストラクチャ として開発されたものであり,高水準9A>:と低水準9E>:の中間言語をそれぞれ 持つ.-!*2開発者グループではこれを使用して,ループよりも大きい単位で 並列化を行なう粗粒度並列処理が実行可能なプログラムを自動的に作成するコンパ イラ--</0=を開発した.
また& -<1 =では,マルチグレ イン9様々な粒度:に分割したプログラム部分の並 列性解析等を行なって,既存の並列化コンパイラで行なっていたループ 単位の 並列化での並列化効果よりも,大きな効果が得られる並列化を行なうことを可能に している.
一方で, )9 ):<3=は,ループごとの並列化を行なう ことでプログラムの並列化を行なう自動並列化コンパイラであり,プログラム並列 化の結果を診断メッセージとしてユーザに提示している.この診断メッセージの中 には並列化ができなかったプログラム部分に対しての理由も提示されており,ユー ザはこのメッセージを基にプログラムの改変を行なうことができる.
並列化コンパイラが,人手を介さず自動的に高い実行性能を持ったプログラムを 作成することができれば,プログラマの負担を軽減することなど メリットは多い.し かし,上記に述べた並列化コンパイラだけではプログラムのパフォーマンスを最高 にする保証ができない.それは</1=に述べられているように,プログラマの知識を 実験的に導入してプログラムを並列化した場合の方が,自動並列化コンパイラのみ で並列化した場合よりも実行時間が短縮できるケースが存在するからである.よっ て,現在でも自動並列化コンパイラの開発は行なわれ,様々な方式が試みられてい る段階である.
並列プログラム作成支援ツール
自動並列化コンパイラが並列化したプログラムにはまだ並列化する余地の残され ているプログラム部分があるにもかかわらず並列化できないと判断される場合が多 い.例えば,配列の番地参照に配列を使用している場合,番地参照に使用されてい る配列が重複順列でないとわからない限り,自動並列化コンパイラは並列化するこ とができない.それらのプログラム部分に対してのアプローチとしてプログラム並 列化支援ツールが提供されている.
これまでの並列プログラム作成支援ツールにはプログラムの並列化可否判断を提 供するだけでなく,様々な情報を提供することで人手によるプログラム並列化を支 援することを行なうものがある.
たとえば@</3=では,並列プログラムのデバッグ情報を提示し,*@
では<5=プログラムの構造を0次元の立体画像で表示する.また, &$
F -</8=は ( プログラムの実行時トレース情報を表示し ,@
&<6 =はプログラムの実行時解析を行ないキャッシュミスの情報や コールグラフをユーザに提示する機能を持っている.
2 エデ ィタ</4=は,プログラム編集環境とプログラムリストラクチャリ ングおよび ,データの読み書きの順番が決められているか否かを調べるデータ依存 解析機能が一体となった,B用並列プログラム作成支援ツールである.この ツールは依存解析の結果と,プログラムの対応関係をプログラマにわかりやすく示 すために,依存解析の結果をエデ ィタの下部に表示し,結果の指し示すプログラム 部分のフォントを変更する.
以前-& ツールとして知られていた "<8=は,プログラム解析とプログラ ムリストラクチャリングを行なう並列プログラム作成支援ツールであり,関数のコー ルグラフやデータ依存関係を図で表示する.
! </5 =は,,エディタ上でパフォーマンス評価機能等を利用可能にした 並列プログラム作成支援ツールである.
+>2&(' <4=は,! ( プログラミングを支援するツール群である.
+>2& (はプログラム実行時のパフォーマンス評価の結果を表示し,
では コンパイラ</6=を実行して作成したプログラム解析結果を表示する.プ ログラマはそれらの結果をもとに, を用いて手動でプログラムの並列化を 行なうことができる.
また,-& !<07 =は-& ツールを拡張し! ( 用にデ ィレクティブ作成機能 などを追加した,インタラクティブな並列プログラム作成支援ツールであり,依存
並列プログラム作成環境および本研究の位置づけ .7
解析機能などからの情報表示を)+を用いて行なう.
C&<0.=は,! 81コンパイラ<0/ =が出力した情報を基に,コー ルグラフやデータ依存関係のグラフ等を作成してユーザに提示するツールである.
そして, 2<.7 =は,依存解析機能やプログラムリストラクチャリング機能のつ いた の並列化ツールである.このツールでは! ( や( ,そ の他の並列化& に対応している.また, 2は複数のインタフェース9シェル,
,,;,およびG:を持っている.このツールはユーザによって指示 されたプログラム解析結果やプログラム最適化のためのプログラム変換結果を提示 することができる.
既存のプログラム並列化システムの問題点と本研究で作成する ツールの位置づけ
ここでは,既存のプログラム並列化システムの問題点を挙げ,本研究で提案する 支援ツールの枠組みではそれにど う対処するかを述べる.
プログラム並列化システム上でのプログラム編集とシステムの操作性およびプログ ラムの管理のしやすさ
既存のプログラム並列化システムでは,プログラムの編集をそのシステム内では 許さない場合が多い.例えば "や 2などでは,プログラムは編集される ごとに一からプログラムを読み込み並列化しなおさなければならない.このような 方法ではインクリメンタルな並列化を可能としている! ( にとって,その利 点を生かした並列化を行なうことが難しくなってくる.そこで,本研究で提案する ツールの枠組みでは,ソースコード をエディタ上で編集しながら同時にそのソース コード への並列化を行なうことができることとしている.こうすることで,プログ ラマは,本ツールを使ってプログラム編集とプログラム並列化を同時に行なうこと が可能となることとしている.
また,既存のプログラム並列化システムの中には,そのシステムを使用するため のマニュアルが用意されているものがある.たとえば, "には数十枚に及ぶ マニュアルがあり,それらをすべて覚えなければ "の機能を使いこなすこと はできない.現在,並列計算機のコモディティ化が進み,安価に2( 型 -や - クラスタを手に入れることが可能であることから,誰でも容易にプログラム並列化 システムを使えなければならないと考えられる.そこで,本提案のツールの枠組み
ではできるだけ並列化に関するシステムの動作を簡素化し,ユーザが簡単な操作で 並列化できるようにすることとしている.
さらに,既存のプログラム並列化システムでは の並列化を行なう ことが多い.その中でも元のソースコード を並列化して別のコード を出力するケー スが多い.しかし,それでは管理しなければならないコード は二つになり,管理が 複雑になりやすい.特に インクリメンタルな並列化を容易にしている! ( で は,コンパイラでデ ィレクティブが解析できない場合は逐次プログラムとして扱わ れれるため,管理するファイルをひとつにすることが可能となる.そこで,本研究 で提案するツールの枠組みでは,! ( でのファイルの管理のしやすさを踏襲す るために,並列化をソースコード 上に直接行なうこととしている.こうすることで 本研究で提案するツールの枠組みでは並列化対象のソースコード のみを管理すれば よいことになるためプログラムの管理のしやすさが容易になることとしている.
可読性の高いプログラムの維持と無益な並列化の防止
既存のプログラム並列化システム,例えば自動並列化コンパイラでは,並列化後 のソースコード の可読性を無視する場合が多い.これはユーザにとって並列化後の プログラムは読まなくて良いものという前提に立って並列化しているからである.し かし,今後のプログラム並列化,特にインクリメンタルな並列化を可能としている
! ( では,プログラムの可読性を維持したままのプログラム並列化は特に重要 である.したがって本研究で提案するツールの枠組みではプログラムの編集はユー ザによって行なわれることとしている.こうすることで可読性の高いプログラムを 維持しながら並列化を行なうことを可能としている.
また,既存のプログラム並列化システム,例えば自動並列化コンパイラでは,プ ログラムの並列化の際に,オーバヘッド を増長させてしまうだけの無益な並列化を 行なうことが多い.プログラム並列化支援システムでも,自動的に並列化をさせて しまうと自動並列化コンパイラ同様の無益な並列化を行ないかねない.そこで本研 究で提案するツールの枠組みでは,プログラム並列化に関する最終的な判断をユー ザの役割としている.こうすることで,プログラム中でオーバヘッドが増すだけの 無益な並列化を防止することとしている.
並列プログラム作成環境および本研究の位置づけ ./
プログラム並列化に関するヒント の提供とプログラムリスト ラクチャリングに関す る指示
既存のプログラム並列化システム,例えば "では,プログラム並列化のヒ ントになるようなプログラム特性,その中でもプログラム内で使用されている変数 の取る値を> H"でユーザから取得することが可能である.ま た,2<00=や (<01=の並列化機能がついているコンパイラではプログラムの並列 化に関するヒントを与える方法を独自のディレクティブで提供している.そこで,本 研究で提案するツールの枠組みでもこのディレクティブによる並列化に関するヒン トの提供をする方法を使用し,それを用いた並列性解析を行なうことを可能として いる.こうすることで今までは静的に解析できなかったプログラム部分を並列化可 能と判断できるようにすることとしている.
また,既存のプログラム並列化システム,例えば ", , 2では,
ユーザの指示に従って)+上でプログラム最適化や並列化のためのプログラムリス トラクチャリング9変換:を行なっている.本研究でもプログラムリストラクチャリ ングはプログラムのパフォーマンス向上には欠かせないと判断した.そこで,本研 究で提案するツールの枠組みではユーザがリストラクチャしたいプログラム部分に リストラクチャを指示するためのデ ィレクティブを挿入し,本研究で提案するツー ルがそれを解釈してソースコード 上にリストラクチャされたコード を自動的に挿入 することとしている.
システムの可搬性,拡張性,多機能化,価格
既存のプログラム並列化システムでは,そのシステムの可搬性を無視した実装を 行なっていることが少なくない.例えば;$システムを利用する並列化シス テムでは,機種によっては動かないケースも多い.また,特殊なライブラリが無い と動作しないツールもいくつか存在する.しかも,バイナリファイルとしてしか配 布されていないものも存在し ,そのバイナリファイルに合わせて!2やその他の環 境を整えなければならない場合も存在する.最近までは並列計算機が特殊な計算機 であったため,その計算機上でプログラム並列化支援システムが稼動すれば良かっ た.しかし ,現在は並列計算機はEで動作する -クラスタから専用!2で稼 動する高性能並列計算機まで多種多様な構成となっている.したがってそれに合わ せツールも可搬性が高いものが必要になってきている.そこで,本研究で提案する ツールの枠組みでは可搬性を考慮して汎用性の高いプログラムエディタをインター フェースとして,特殊なライブラリを使用しない構成としている.こうすることで
本ツールは安価な2( 型 -から高価な並列計算機上で稼動する可能性の高いツー ルとなることとしている.
また,既存のプログラム並列化システムの中には,バイナリファイルで配布され ているものも少なくない.これは,そのシステムの拡張性を無視した配布方法であ ると考えられる.プログラム並列化支援,特に並列性解析やプログラムリストラク チャリングの方法は数多く存在し,それらをすべて実装することは困難である.そ ういった場合には,元のシステム開発者以外の誰かが未実装の並列性解析やプログ ラムリストラクチャリング機能を付け加えることは有意義である.したがって,シ ステムの拡張性から考えると,バイナリでの並列化システムの配布は好ましくない と考えられる.そこで,本研究で開発するツールの枠組みではシステムの拡張性を 考えて,プログラムをソースコード で配布し,後から我々ではない他人がツールに 機能を追加できるようにしている.こうすることで,本研究で提案するツールはシ ステムの拡張性が高くなることとしている.
さらに,既存のプログラム並列化システムの中には,機能が限定されて提供され ている場合が多い.たとえば@ & では性能評価の結果だ けしか提供されない.その他のツールでも, & F -では プログラムの振る舞いだけが提示され,プログラムとの対応が取りづらいことがあ る.理想的なプログラム並列化の流れとしては,実行時間計測による並列化対象部 分の選択,対象部分の並列化,対象部分の最適化,対象部分のパフォーマンス向上 率の測定といったことを繰り返すことであると考えられる.そこで本研究で提案す るツールの枠組みでは実行時間解析機能で実行時間を解析し,並列性解析機能でプ ログラムの並列化可否判断を行ない,プログラムリストラクチャリング機能でプロ グラムの最適化を行なうこととしている.こうすることで理想的なプログラム並列 化を可能とすることとしている.
加えて,既存のプログラム並列化システムの中には,製品として売られているも のも多い.例えば "は年間数十万円ものライセンス料金を支払わなければな らない.現在,並列計算機を構成するためのハード ウエアなどが安価に手に入る時 代となっているため,並列化システムも安価に手に入れることができるようになっ てなければならないと考えられる.そこで,本研究で提案するツールは安価に手に 入れることができるようにフリーソフトウエアとして配布することとしている.こ うすることで誰もが安価な並列計算機用のプログラムから高価な並列計算機上で動 くプログラムを容易に作成することができるようになることとしている.
並列プログラム作成環境および本研究の位置づけ .1
対応
現在,複数個の- +を同時に動かすことのできる2( 型の -が低価格化して きており,それに対応したプログラム並列化& として! ( の存在が大きく なってきている.既存の並列化システムでは,! ( に対応していないツールも 存在する.また,! ( に対応しているツールであっても一般公開されていない ツールが多くあり,事実上! ( 用のプログラム並列化支援システムは少ない.
そこで本研究で提案するツールは! ( プログラム作成を支援するツールとして 公開し,安価な2( 型 -を持つユーザや高性能並列計算機を持っているユーザに 使用してもらうこととしている.
提案する枠組みと作成したツール
この章では,本研究で提案する枠組みを述べ,それを実証するために開発した対 話型! ( プログラム並列化支援ツール
I '!( ? J
のプログラム並列化支援機能を述べる9図8:.
提案する枠組み
エディタ組み込み型支援機能
'!( では,並列化支援機能を広く利用されているエディタに組み込むこと とする.こうすることで,ユーザはプログラムを編集中にエディタ上から '!(
の支援機能を使用し, '!( に対して対話的な作業を行なうことを可能として いる.
ツールの比較 本稿で提案している枠組みと,他のツールとの比較をする.比較対 象は-& !<07=と+>2&(' <4=である.ユーザインタフェースに関する
表 .? 各並列化支援ツールのユーザインタフェース比較
提案する枠組み
ユーザインタフェース 汎用エディタ 専用ブラウザ複数ウインド ウ 専用ブラウザと専用エデ ィタ
比較表を表.に示す.提案する枠組みでは,ツールを汎用エデ ィタに組み込んでい るのに対して,-& !は専用ブラウザによるプログラムの閲覧および専用)+によ る様々な情報の操作を行なうことになる.このような方式であると)+操作に慣れ るまでに時間がかかりプログラム編集も別のエディタを立ち上げて行なわなければ ならない.+>2&(' では実行時間解析をブラウザ表示し,プログラム の並列化および最適化を専用エデ ィタで行なっている.これでは専用エディタの操 作に慣れるまでに時間が掛かるといった難点がある.したがって,本稿で提案する 枠組みのほうが操作に慣れるまでに時間が掛からないことが期待できる.
提案する枠組みと作成したツール .8
ツールとユーザの役割分担
'!( ではユーザとの役割を以下のように分担することとする.
'!(
ユーザからの要求に応じてプログラムの解析を行ない,その解析結果を ユーザに提示する.
ユーザからの指示に応じてプログラムのリストラクチャリングを行ない,
その変換結果を編集しているソースコード 上に反映させ,変更前のプロ グラム部分をコメント文として残す.
ユーザ
'!( 上でプログラムを編集および並列化する.
'!( にプログラム並列化支援を要求する.
'!( から得られた情報を基に並列化判断を行なう.
対象プログラムに関する内部特性を知っている場合, '!( へその 特性をデ ィレクティブを用いて伝える.
対象プログラムに関してプログラムリストラクチャリングを行ないたい 場合, '!( へデ ィレクティブを用いて指示する.
このように役割分担することにより,以下の2つの理由がある.
適切な並列化選択の促進
自動的な並列化は,オーバヘッド を増加させる無用な並列化を行なう可能性が ある.ユーザがプログラム並列化の最終的な判断を行なうことで,このような 無用な並列化を防ぐことが期待できる.
読み易いプログラムの促進
自動的なプログラムの変更は,ユーザにとって読みづらいプログラムの作成を 行なう可能性がある.ユーザがプログラムの編集及び並列化をソースコード 上で行なうことによって,読みづらいプログラムの生成を防ぐ 可能性がある.
インクリメンタルな並列化を可能としている! ( にとってプログラムの 可読性を維持することは非常に重要である.
表 /? 各並列化支援ツールの役割分担比較
提案する枠組み
役割分担 ユーザがプログラム編集 プログラム変更を考慮されていない 自動並列化後にプログラム編集
ツールの比較 表/にツールごとのプログラム編集に対する方針を比較している.
-& !では,プログラムの編集を考慮していない設計となっており,編集は別にエ ディタを立ち上げなければならない.一方+>2& (' では自動並列化後 にプログラムの最適化や並列化を行なうことを許されている.したがってこの方式 だと読みづらいソースコード にプログラム変更をしていかなければならないと予想 される.本稿で提案する枠組みではユーザによるプログラムを編集しながらの並列 化を可能としているために可読性の高いソースコード の維持を促進できると期待で きる.
ユーザとのテキスト による双方向対話
'!( は,ユーザに情報を提示するだけではなく,プログラムの特性に関す るユーザの知識を受け取ることを可能とし,その情報を利用した支援を行なうこと を可能とする.
ユーザはプログラムに関する知識を '!( に伝えるために,ツール用のディ レクティブを利用してその知識をプログラム中に記述することとする.
たとえば図1のように配列の間接参照があった場合,ユーザが配列&が重複順列 かど うか知らない場合9図19::では並列性解析機能は並列化判断がつけられないた めに並列化不可能とユーザに提示する9図19::.一方で,ユーザが配列&が重複順 列でないと知っている場合にはその内部特性をディレクティブとしてプログラムの 該当部分へ挿入し9図19::並列性解析に掛ける.すると並列性解析機能はこのルー プで他に並列性を阻害する要因がなければ並列化可能と判断し,ユーザに提示する
9図19::.
また,ユーザはプログラムの最適化や並列化のためのプログラムリストラクチャ リング( 変換)をツール用のデ ィレクティブを利用してリストラクチャリング対象 の部分に記述することとする.
たとえば,ユーザがループをアンロールしたい場合にはユーザは図3の左の図のよ うにディレクティブを挿入し '!( へ変換を指示する. '!( はそのユー
提案する枠組みと作成したツール .5
#pragma ipat parmutation(A) for( i = 0 ; i < 100 ; i++){
...
X[A[i]] = Y[i]+...;
...
}
߽ߒ࡙ࠩ߇㈩#߇㊀ⶄ㗅
ߢߥߣ⍮ߞߡߚ႐ว:
for( i = 0 ; i < 100 ; i++){
...
X[A[i]] = Y[i]+...;
...
}
߽ߒ࡙ࠩ߇㈩#߇㊀ⶄ㗅
ߢࠆ߆ߤ߁߆⍮ࠄߥ႐ว:
This loop isn't parallelizable.
X[A[i]]: Parallelization inhibition factor.
(Is "A" a repeated permutation?)
This loop is parallelizable.
⸃ᨆ⚿ᨐ
⸃ᨆ⚿ᨐ
ਗᕈ
(a) ⸃ᨆᯏ⢻ (b)
(d) (c)
図 1? '!( でのユーザが知っている内部特性の挿入例
ザの指示に従ってループボディをアンローリングし該当するプログラム部分へ挿入 する9図3右:.
...
for( i = 0 ; i < 100 ; i++)
#pragma ipat unroll(4) for( j = 0 ; j < 100 ; j++ ) {
C[i][j]=A[i][j]+B[i][j];
} ...
ࡊࡠࠣࡓ
ࠬ࠻ࠢ࠴ࡖࡦࠣ
ᯏ⢻
for( i = 0 ; i < 100 ; i++) for( j = 0 ; j < 100 ; j+=4 ) {
C[i][j]=A[i][j]+B[i][j];
C[i][j+1]=A[i][j+1]+B[i][j+1];
C[i][j+2]=A[i][j+2]+B[i][j+2];
C[i][j+3]=A[i][j+3]+B[i][j+3];
} /*
#pragma ipat unroll(4) for( j = 0 ; j < 100 ; j++ ) {
C[i][j]=A[i][j]+B[i][j];
}*/
図 3? '!( でのユーザが指示するプログラムリストラクチャリング例
プログラム中にディレクティブを記述して情報を伝えることは,必要な情報をプ ログラム中に書き込むという! ( の思想に基づいたものである.
ツールの比較 表0に各並列化支援ツールでのユーザのプログラム特性提供方法の比 較を示す.-& !では人間の知識を入力する)+が提供されている.一方で+>2&
(' では人間の知識を直接ツールに伝えることができない.その代わり にこのツールでは,手動で並列化や最適化を行なうための)+を設けている.提案
表 0? 各並列化支援ツールのユーザにおける知識提供方法の比較
提案する枠組み
情報提供方法 ディレクティブを用いる による 最適化および並列化ウインド ウを用いる
する枠組みではデ ィレクティブを用いて提供しているので他の/つに比べて簡単に 知識の提供ができる.
ツールの可搬性と拡張性と低価格導入
'!( では,エデ ィタに組み込む支援機能を特殊なライブラリや実行アプリ ケーションを用いずに実装可能とし,可搬性の高い並列プログラム作成支援ツール を実現する.
また, '!( では新たな解析方法等を容易に追加できる枠組みを持つことと し,拡張性のある並列プログラム作成支援ツールを実現する.
さらに, '!( では,できるだけ多くのユーザに使用してもらうためにフリー ソフトウエアとして '!( を配布することとする.
表 1? 各並列化支援ツールの配布形式の比較
提案する枠組み
配布形式 フリーでソースコード を公開 バイナリファイルで配布 配布方法不明
ツールの比較 表1に各並列化支援ツールの配布形式について比較している.-& ! はその基となっている "<8=がバイナリファイルで配布されている.一方+>2&
(' ではその配布方法は不明である.提案する枠組みでは,ソースコー ド で配布し,拡張性や可搬性を保ち,フリーソフトウエアでツールを構成すること
としているため低コスト導入も可能である.
の支援機能
'!( では下記の1つの支援機能を持つこととする.
提案する枠組みと作成したツール /7
並列性解析機能
ユーザに指定されたプログラム部分の並列性解析を行ない,その解析結果を提示 する.
ディレクティブ作成機能
並列性解析機能が並列化可能と判断したプログラム部分に対する適切な! ( デ ィレクティブを提示する.
実行時間解析機能
指定されたプログラムの実行時間計測に必要なコード を挿入し,実行時間を計測 する.計測後には収集した実行時間情報を解析し,プログラム部分ごとの実行時間 を提示する
プログラムリスト ラクチャリング機能
ユーザの指示に従ってプログラムの並列化および最適化に必要なプログラム変換 を行なう.
㩷 㩷
䉸䊷䉴䊒䊨䉫䊤䊛
䊡䊷䉱
ਗᕈ⸃ᨆ
䊒䊨䉫䊤䊛
䊥䉴䊃䊤䉪䉼䊞䊥䊮䉫 ታⴕᤨ㑆⸃ᨆ 㪦㫇㪼㫅㪤㪧
䊂䉞䊧䉪䊁䉞䊑ᚑ
䊒䊨䉫䊤䊛✬㓸
㩿㪦㫇㪼㫅㪤㪧䊂䉞䊧䉪䊁䉞䊑ᝌ㪀
ᡰេⷐ᳞
㩷㫀㪧㪸㫋㪆㪦㪤㪧䈏ᜬ䈧ᡰេᯏ⢻
䊒䊨䉫䊤䊛✬㓸ⅣႺ
䈠䈱ઁᯏ⢻
ᖱႎឭ␜
図 8? 提案した枠組みおよび支援機能の概略図
提案する枠組みと作成したツール //
を用いた場合の典型的な並列化のシナリオ
'!( を用いたプログラムの並列化は,次に述べるステップをくり返すこと で行なわれる9図4:.この方法は+>2& (' <4=などと類似している.
2 .? 並列化ターゲットの撰択:
まず,ユーザは各ブロックの実行時間を知るために実行時間解析を呼び出す.
実行時間解析が呼び出されたとき,この関数は各ブロック9関数,ループ,ユー ザによって選択されたブロック:に実行時間を計測するための関数を挿入する.
その後対象ファイルをコンパイルして実行する.計測結果はパフォーマンス計 測関数から出力される.最後にこれらの計測結果を解析してユーザに提示する ユーザはこの実行時間解析結果を基にソースコード 中から最も実効時間を消 費している逐次プログラム部分を選択し並列化ターゲットとする.
2 /? 並列性解析:
もし,ユーザは並列化ターゲットの並列化にかかわる重要なプログラム特性を 知っている場合はあらかじめその特性をディレクティブの形でソースコード 中 に挿入する.そして,ユーザは, '!( に対してターゲット部分の並列性 解析を指示する. '!( はユーザの命令を受けて並列性解析を実行する.
もし並列性があれば, '!( は! ( ディレクティブ作成機能が そのループに対して適当な! ( ディレクティブを作成してユーザに 提示する.
もしループ内に問題があり並列化できない場合は,並列性解析機能がそ の並列化を阻害している要因をユーザに提示する.
もし ,ユーザはその並列化阻害要因を解消する可能性のあるプログラム 特性を知らなければ,その部分に対する並列性解析を中止する.
一方で,ユーザはその並列化阻害要因を解消する可能性のあるプログラ ム特性を知っているならば ,ユーザは図1のようにソースコード 中のそ の対象部分へデ ィレクティブを挿入する.そして再度その対象部分の並 列性解析を行なう.
2 0? プログラム並列化?
もし,ターゲット部分が並列化可能であるとされた場合には,ユーザの判断に より '!( で作成された! ( デ ィレクティブを挿入する.