25
マルチスレッド・プロセッサにおける ループ り越し依 ため 19 2 13 一   50404

マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

卒業論文

マルチスレッド・プロセッサにおけるループ繰り越し依存のための送受信命令の挿入

平成19年 2月 13日提出

指導教員

坂井修一  教授

五島正裕 助教授

電子情報工学科

50404 山田恭弘

Page 2: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

概要

近年,並列性の高いデータ処理の需要が高まり,その内容が高度化・複雑化している. これまで,

プロセッサは ILP(Instruction-level Parallelism)を抽出し並列実行することでその性能を向上させて

きたが,近年, ILPを利用した実行性能の向上は限界に近づいている.そのため, ILP以外の様々な並

列性を利用したアーキテクチャが数多く提案されている.データ並列性の高いデータ処理において

は,解決手段の一例として,ループを並列実行し性能を向上させるアーキテクチャが考えられてい

る. しかし,ループを並列実行する際,各イタレーション間に発生する繰り越し依存が問題となる.

繰り越し依存を効率よく送受信するためには,最適な位置に送受信命令を挿入するのが良い.

受信命令を加えることで,送受信が本当に必要なレジスタのみに絞ったレジスタの値のみを送受

信できるようになるので,レジスタ通信が少なく抑えられる.また,ループの制御フローグラフを作

成し,それ以降そのレジスタの値が更新されない地点の集合を求めることで送信命令を挿入する最

適な位置の集合を求め,送信命令を挿入することができる.この時,制御フローの基本ブロックをそ

のレジスタについて「以降定義されるかもしれない集合」と「以降定義されることがない集合」と

にわけ,その境界に必要ならば基本ブロックを追加しそこに送信命令を挿入することで,安全かつ

最も早いタイミングで送信命令を実行することが可能になる.

1

Page 3: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

目次

第 1章 はじめに 3

1.1 背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

第 2章 並列性の抽出と実行 5

2.1 並列性の抽出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Loop-level Parallelismの利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 対象とするアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4 繰り越し依存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

第 3章 送受信命令の挿入 8

3.1 送受信命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 送受信専用命令の利点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.3 送受信が必要なレジスタの特定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.3.1 並列動作させるループの決定 . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.3.2 送受信命令が必要なレジスタの条件 . . . . . . . . . . . . . . . . . . . . . . 9

3.4 送受信命令の挿入位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.4.1 受信命令の挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.4.2 送信命令の挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

第 4章 評価 18

4.1 予備評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1.1 繰り越し依存とループ外定義 . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1.2 送信するタイミングが早くなるレジスタ . . . . . . . . . . . . . . . . . . . 19

第 5章 関連研究 20

5.1 ループを並列実行するクラスタ型アーキテクチャ . . . . . . . . . . . . . . . . . . 20

5.2 Multiscalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.3 SKY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

第 6章 まとめと今後の課題 22

6.1 まとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.2 今後の課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2

Page 4: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第1章 はじめに

1.1 背景

近年のコンピュータや情報機器には,汎用 CPUとは別に,応用に特化したプロセッサが搭載さ

れることが多くなっている.そのようなプロセッサとしては,パーソナル・コンピュータ,ワーク

ステーションなどに搭載されるGPU (Graphics Processing Unit)[7],ゲーム・コンソールのプロセッ

サ [8],STB (Set-Top Box),VDR (Video Disc Recorder),HDR (Hard DiscRecorder)などのビデオ・

デコーダ,テレビ,プリンタなどの画像処理エンジン [10],ビデオ・カメラなどの動画圧縮エンジ

ン [9],携帯音楽プレーヤなどのオーディオ・デコーダ,その他,さまざまなマルチメディア処理を

行うための汎用的なメディア・プロセッサなどがある.最近では,3Dゲームにおける物理シミュ

レーションを行うための物理エンジンが注目されている.また,運転をサポートするため,画像認

識のためのプロセッサが自動車に搭載される例もある [6].

これらのプロセッサは,コンピュータや情報機器に対する,機能,性能の高度化の要求に応える

ために設けられたものである.あるものは,もともと汎用の CPUでまかなわれていた機能が,要

求される性能の高度化に応えるために専用化されたものであり,またあるものは,もともと専用の

演算器であったものが,要求される機能の高度化に応えるためにプロセッサとなったものがある.

そのため,これらのプロセッサは,それぞれ大きく異なる形態を持つ.

しかし,これらのプロセッサは形態こそそれぞれ大きく異なるが,データ並列性の高い処理を

ターゲットとする点で共通である.データ並列性は,大量のデータに同様の処理を施すことによっ

て生じるものであるため,以下のような性質がある:

• 処理量が多く,汎用 CPUでは対処が難しい.

• 処理が比較的単純であるため,汎用 CPUのような複雑な制御機構は不要である.

このことは,汎用 CPUとは別に用意する必要がある所以でもある.

これらのプロセッサを統一的に指す一般的な用語はまだ存在しないが,本稿では並列処理エンジ

ン(Parallel Processing Engine)と呼ぶことにする.並列処理エンジンには,さまざまなアーキテク

チャがある.この分野自体が黎明期であり,決定打となるものはまだ現れていない状態にある.

並列処理エンジンに向いたアーキテクチャとしては, LLP(Loop-level parallelism,ループレベル並

列性)を利用したマルチスレッド・プロセッサが考えられる.ループの各イタレーションをスレッド

として切り出し,各実行ユニットに割り当てるようなプロセッサである.

本研究がターゲットとするアーキテクチャも, LLPを利用して並列実行をする並列処理エンジン

アーキテクチャである. クラスタ型アーキテクチャで複数の実行ユニットを持ち,実行ユニット毎

に個別のレジスタを持つ構成で,それぞれのクラスタにループの各イタレーションを割り当て実行

する.

ループを並列実行する際に現れる問題として,繰り越し依存の問題がある. 繰り越し依存が存在

する時,並列実行を行う各ユニット間でのレジスタ同期が不可欠となる. 本研究が対象とするアー

キテクチャでは,レジスタの同期のためにリング状のバスを持たせて通信する.

3

Page 5: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

レジスタの同期を取るタイミングの決定方法についてはハードウェア的なものからソフトウェア

的なものまで考えられるが,本研究ではソフトウェア的な方法として,レジスタの送受信命令を挿

入する手法に関して述べる.データ並列性の高い処理を目的としたマルチスレッド・プロセッサに

おける,最適なレジスタの値の送受信手法を提案する.

1.2 構成

以下,第 2章ではプログラムの並列性の中から, LLPとその利用について述べる.続く第 3章で,

ループを並列実行する際の繰り越し依存で必要となる送受信命令の挿入とその手法について,提案

手法を含めて述べる.その後,第 4章では予備的な評価を行う.第 5章では関連する研究について述

べる.そして最後に第 6章でまとめ,今後の課題について述べる.

4

Page 6: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第2章 並列性の抽出と実行

2.1 並列性の抽出

これまでプロセッサはさまざまな並列性を抽出し,並列実行をすることでその性能を向上させて

きた.並列性は着目点により,さまざまな種類に分けられる.主なものとしては ILP(Instruction-level

Parallelism,命令レベル並列性)や LLP, TLP(Thread-level parallelism,スレッドレベル並列性)等が

ある.

これまでのアーキテクチャは,主にプログラムの ILPを抽出することで同時実行命令数を増やし,

性能を向上させてきた.例えばスーパスカラプロセッサは依存関係のない複数の命令を並び替えるこ

とで ILPを抽出し,複数の命令を並列に同時実行することでその性能を向上させている (out-of-order

実行).

しかし現在, ILPの抽出による性能の向上は限界に近づいている.命令発行幅の増加はハードウェ

ア量と複雑さを飛躍的に増大させ,同時にクロック数の伸びを鈍化させる要因にもなる. そのため,

これ以上命令発行幅を増加させても ILPの抽出による並列処理性能の向上はそれほど大きくない

と考えられる.

そのため,近年では LLPや TLPを抽出して並列実行をするアーキテクチャが数多く提案されて

いる.代表的なものとしてはMultiscalar[5]や SKY[2] 等が挙げられる.

2.2 Loop-level Parallelismの利用

LLPは名前の通りループに存在する並列性である.

LLPの利用は,ループの各イタレーションを何らかの形で並列実行することによって行われる.

ビット幅が大きい演算器を用いて複数の同じ処理を同時に行うアーキテクチャや,複数の実行ユニッ

トに各イタレーションを割り当てて並列動作させるアーキテクチャなどがある.

例えば SIMD(Single Instruction / Multiple Data stream)演算器の代表である, Intelの CPUが持つ

SSE[4]の場合であれば, 4つのイタレーションで行われる同じ演算を 1つの SIMD命令に置き換え,

4つのイタレーションを同時に実行する.また, CMP(Chip Multi Processor)で LLPを利用する場合,

基本的にはループの各イタレーションをスレッドとして切り出し,各実行コアに割り振る. これに

より,ループの各イタレーションが並列に実行できることになる.

LLPの検出は動的に行うこともできるが,静的な解析が比較的容易である.高級言語では一般に,

for文や do-while文などでループ処理を行う部位が明確に示されているからである.そのため,例え

ば GCCのようなコンパイラではこの情報を取り出して最適化処理を行っている.

LLPを利用した並列処理機構としては,例として SIMDプロセッサや SIMD演算器などが挙げら

れる.

SIMD 並列性のあるデータを高速に並列処理するために使われる手法の 1つに, SIMDがある.

5

Page 7: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

SIMDは主に SIMD型プロセッサと SIMD演算器に分けられる.前者はプロセッサの命令セット

そのものが SIMD化されたプロセッサで,ベクトル命令によって複数の演算器が同様の処理を実行

する.例えば 128個のコアを並列実行させる, NECの IMAPCAR[6]のようなプロセッサが挙げられ

る. 後者はスーパースカラプロセッサなどに演算器としての SIMD演算器が追加されたもので,専

用命令を利用して SIMD演算を行う.後者の例としては, Intelの SSE[4]等が挙げられる.

SIMDの特徴としては, 1つの命令で複数のデータ処理を同時に行えることがある. このため,並

列度を高めてもフェッチ幅や発行幅を圧迫することがないという利点があり,処理内容が単純なルー

プの高速化に用いられてきた.

for(i=0;i<64; i++){a[i]=i+1;b[i]=i*2;if(b[i] > 80)break;

}

for(i=0;i<64; i++){a[i]=i+1;b[i]=i*2;

}

図 2.1:簡単なループ (左)と条件分岐で抜け出す可能性のあるループ (右)

$B2$8: ; Preds $B2$1movdqa xmm3, XMMWORD PTR _2il0floatpacket$1 ;8.11movdqa xmm2, XMMWORD PTR _2il0floatpacket$2 ;9.11movdqa xmm1, XMMWORD PTR _2il0floatpacket$3 ;8.11movdqa xmm0, XMMWORD PTR _2il0floatpacket$4 ;9.11add esp, 4 ;3.7xor eax, eax ;stmxcsr DWORD PTR [esp] ;3.7or DWORD PTR [esp], 32768 ;3.7ldmxcsr DWORD PTR [esp] ;3.7

; LOE eax ebx esi edi xmm0 xmm1 xmm2 xmm3$B2$2: ; Preds $B2$8 $B2$2

movdqa XMMWORD PTR [esp+eax*4+16], xmm1 ;8.4movdqa XMMWORD PTR [esp+eax*4+272], xmm0 ;9.4paddd xmm1, xmm3 ;8.11paddd xmm0, xmm2 ;9.11add eax, 4 ;7.2cmp eax, 64 ;7.2jb $B2$2 ; Prob 98% ;7.2

; LOE eax ebx esi edi xmm0 xmm1 xmm2 xmm3$B2$3: ; Preds $B2$2

mov eax, -64 ;11.6; LOE eax ebx esi edi

$B2$4: ; Preds $B2$4 $B2$3mov edx, DWORD PTR [esp+eax*4+272] ;12.3imul edx, DWORD PTR [esp+eax*4+528] ;12.3mov DWORD PTR [esp+eax*4+272], edx ;12.3add eax, 1 ;11.17jne $B2$4 ; Prob 98% ;11.2

$B2$11: ; Preds $B2$1pop ecx ;3.7stmxcsr DWORD PTR [esp+512] ;3.7xor eax, eax ;7.6or DWORD PTR [esp+512], 32768 ;3.7ldmxcsr DWORD PTR [esp+512] ;3.7

; LOE eax ebx esi edi$B2$2: ; Preds $B2$11 $B2$3

lea ecx, DWORD PTR [eax+1] ;8.10mov DWORD PTR [esp+eax*4], ecx ;8.3lea edx, DWORD PTR [eax+eax] ;9.10cmp edx, 80 ;10.3mov DWORD PTR [esp+eax*4+256], edx ;9.3jg $B2$5 ; Prob 1% ;10.3

; LOE ecx ebx esi edi$B2$3: ; Preds $B2$2

mov eax, ecx ;8.10cmp ecx, 64 ;7.2jl $B2$2 ; Prob 98% ;7.2

図 2.2:図 2.1をコンパイルした結果のアセンブラプログラム

しかし, SIMDは複雑なループに対応できないという弱点がある.図 2.2の左側のアセンブリプロ

グラムは図 2.1のような簡単なループについて SSEを持つ x86アーキテクチャ向けにコンパイル

したアセンブリの一部であり,図 2.2の右側のアセンブリプログラムは,同一プログラムのそのルー

プの内部に条件分岐による脱出を加え同様にコンパイルしたアセンブリの一部である.条件分岐が

加えられていない場合,ループの内部処理が SSE命令によって行われるようになっており,並列度

が 4まで高められている. 一方,条件分岐が加えられている場合,処理に使われる命令が SSE演算

器を使わないものとなっている.そのため,ループの内部処理の並列度は 1のままである.このよう

に,わずかに複雑化したループでさえ SIMDでは並列化が難しい.

近年需要が増加しているマルチメディア処理などでは,ループ内の処理も複雑化し, SIMDでの対

6

Page 8: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

応が難しくなってきている. LLPを抽出して利用し並列度を上げるためには, SIMDではない新た

なアーキテクチャが必要である.

2.3 対象とするアーキテクチャ

本研究が対象とするのは,上述したような問題にも対応しながら LLPを利用して並列実行できる

ような,新たなアーキテクチャである.

想定しているアーキテクチャは,実行ユニット間にレジスタ通信機構を備えたクラスタ型アーキ

テクチャである. 命令フェッチ機構とデコード/リネームは共通化し,命令キューとレジスタは個別

に各クラスタに備える.また,一方向のレジスタ通信機構を備え,レジスタの値の送受信が可能とな

る.各クラスタについてはスーパスカラプロセッサと同程度の演算器を備える.そして,小さな 0次

キャッシュを各クラスタに持たせることで,分岐命令にも柔軟に対応する.

このようなアーキテクチャが本研究の対象である.

2.4 繰り越し依存

LLPを利用して並列化する際の問題として,繰り越し依存がある.

繰り越し依存とは,ループの各イタレーションにまたがって定義・使用される変数である. 各イ

タレーションごとに同じ変数に対し何らかの演算を行う場合,あるイタレーションで演算を行った

結果を次のイタレーションで使用することになる.このような変数の集合が繰り越し依存である.

一般に繰り越し依存が多いループは,並列度を上げにくい.これは,前のイタレーションで繰り越

し依存に関する演算が全て終了するまで,その次のイタレーションは繰り越し依存を使用する命令

が実行できないからである.

繰り越し依存の受け渡しはメモリを介する手法も提案されているが,実行ユニット間にデータパ

スを持たせる物が主流である. 繰り越し依存の値が確定した時点で,その情報を次の実行ユニット

に送信する方式である.ただし,繰り越し依存の値確定の検出や送受信手法については,数多くの手

法が提案されている.

本研究ではデータ並列性の高い処理に着目しているため,繰り越し依存が問題になるようなルー

プは少ないと考えられる. データ並列性が高い場合,それぞれのデータに対する処理内容が独立的

であるためである.

しかし,繰り越し依存の解決はプログラムの意味を保つ上で重要である. 正しい演算結果を得る

ためには,繰り越し依存が正しく送受信されなければならない.

次の章では,繰り越し依存の送受信手法として送受信命令の挿入に関して提案する.

7

Page 9: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第3章 送受信命令の挿入

3.1 送受信命令

本研究では,送受信について専用命令の追加の手法を提案する.

現在, TLPを利用して並列処理性能を上げるアーキテクチャが数多く提案されているが,各イタ

レーションをスレッドと見た場合, LLPもある種の TLPであると捉えられる. そして, TLPを利用

するアーキテクチャでのレジスタ間通信手法は,本研究の対象となるアーキテクチャとも共通する

部分があると考えられる.

TLPを利用して並列度を向上させるアーキテクチャの場合,レジスタ間通信のタイミングをハー

ドウェア的に定めるような手法がいくつもある.また, SKYのように送信に関してのみ専用命令を

追加している手法もある.

本研究では,送受信共に専用命令を追加する.

以下,次の順で送受信命令の挿入について述べていく.はじめに,送受信命令が必要となるレジス

タの確定方法について述べる. 次に専用命令を追加する利点について述べる. そしてこの章の最後

で,専用命令を挿入する位置に関して提案手法を含むいくつかの手法について述べる.

3.2 送受信専用命令の利点

送受信命令を専用命令として加える利点としては,以下のような点が挙げられる.

送信するタイミング 送信命令を加えない場合,プロセッサは動的に繰り越し依存の値の確定を検

出しなければならない. しかしループが複数のパスに別れる時,例えばそのレジスタの値を定義す

る命令が存在しないような最悪のパスの場合では,そのイタレーションを処理し終えるまで値を確

定することは不可能である.繰り越し依存の値が確定するタイミングがコンパイラで解析可能であ

るため,送信命令を加えることで,より早く繰り越し依存の値を確定し,次の実行ユニットにデータ

を送ることが可能となる.

受信するレジスタの確定 ループには,ループ外で定義されループ中では書き換えられない変数が

存在する. 各イタレーションで定義される前に使用されるレジスタがある場合,そのレジスタはこ

ういった変数か繰り越し依存のどちらかである.

受信するレジスタの確定方法として,次の 2通りが考えられる.

1. 区別の必要がないように,ループ外で定義されるレジスタについても送信命令を加える.

2. 受信命令を加え,繰り越し依存を受信すべきレジスタを指定して区別する.

前者は SKYで実装されている手法であり,後者は本研究が扱う手法である.

8

Page 10: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

本研究が目的とする, LLPを利用したデータ並列性の高い処理の並列化の場合,後者の手法が優

れていると考えられる. これは,ループ外で定義された変数は並列実行を開始する際に全ての実行

ユニットで共有することが可能であるため,並列実行したい全てのイタレーションについて共通す

るループ外定義を通信する必要がないからである.

また,データ並列性の高い処理の場合,繰り越し依存の数は多くないため,受信命令の数も多くな

らない. 一方,ループの外部で定義される変数は繰り越し依存となる変数に比べて多い. そのため,

ループの外部で定義される変数を送信する手法では,命令数もレジスタ間通信量も増大すると考え

られる.両者とも少ない方が性能向上に寄与すると考えられる.

このことから,本研究では受信命令も追加する手法を取ることにする.

3.3 送受信が必要なレジスタの特定

送受信が必要となるレジスタは,以下の手順で特定することとする.

3.3.1 並列動作させるループの決定

まず,並列動作を行うループを決定する.

コンパイラにはループを推定する段階があり,その情報を利用することでループの特定は容易で

ある.しかし,どのループを並列動作させるかについては何らかの基準をもって示す必要がある.

ループの種類 ループには,大きく分けて 2種類の構成がある.可約流れグラフと,既約流れグラフ

である. 可約流れグラフとはループの入り口と出口が 1つの構成でできたループであり,既約流れ

グラフとは複数の出入り口を持つ構成のループである (図 3.1).

本研究では可約流れグラフのみを対象とする.

並列動作させるループの決定 本研究では,インナーループに対応して並列動作できるような送受

信命令の挿入を行う.可約流れグラフでさえあればどのループを対象としても良い.

ここで重要なのは,対象とするアーキテクチャの構成である. 対象となるアーキテクチャにより,

どういったループを対象とすべきかは違うためである.例えば,本研究の対象とするようなアーキテ

クチャであれば,繰り越し依存が少ないループや反復回数の多いループとなる.繰り越し依存の数や

ループに含まれる命令数やループの予想される反復回数など,多重ループの場合にどのループを並

列化するかという指標はいくつか考えられる.本研究では,この指標に関する評価は行っていない.

並列動作の開始/終了命令 本研究では,並列動作の開始及び終了についても専用命令を加えている.

3.3.2 送受信命令が必要なレジスタの条件

送受信命令を加える必要があるレジスタとは,あるイタレーションで定義され次のイタレーショ

ンで使われる可能性のあるレジスタである.

1つの基本ブロックからなるループであれば,その条件は「ループ内で定義されるレジスタであ

り,なおかつ最初にそのレジスタを使用する命令の前にその値を定義する命令がないもの」となる

(図 3.2).この条件が満たされる時,最初にそのレジスタを使用する命令の前に受信命令が,最後にそ

9

Page 11: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

(a) (b)

図 3.1:可約グラフ (a)と既約グラフ (b)

のレジスタの値を定義する命令の後に送信命令が必要となる. それぞれ図 3.2の snd r1命令と rcv

r1命令にあたる.

rcv r1

r1 =

= r1

snd r1

最初の使用最後の定義最初の使用の前に最初の定義が存在しない図 3.2: send / receive命令を必要とする 1つの基本ブロックで構成されたループ

上記の条件を基本とし,複数パスの存在するループについて送信命令を加える条件を同様に調べ

ていくと,各レジスタについて次の条件が成り立つ.

送受信命令が必要となるのは,次の 2つの条件を満たす時である.

1. そのレジスタの値を定義するパスが存在する.

2. そのレジスタの値を初めて使用する命令の前に値を定義する命令がないパスが存在する.

これは,イタレーション内で使用されるあるレジスタを定義する命令が前のイタレーションに存

在する場合があることを意味している.

10

Page 12: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

= r1

r1 =

iteration 1

iteration 2

snd r1

rcv r1

図 3.3:送受信命令を必要とするループ

図3.3は送受信命令が必要になる例である. iteration1がレジスタ r1を定義するパスを通り, iteration2

がレジスタ r1を使用するパスを通った場合,レジスタ r1の送受信命令があれば iteration2が正しく

実行できる.よって,上記の条件を満たすループについては送受信命令が必要である.

逆に言うと,送受信命令が必要ないのは上記の条件 1, 2のどちらかについて,満たすパスが 1つ

もないことであるが,パスが 1つもないことを示すためには,取りうる全てのパスを調べる必要が

ある. これはコンパイル時に CFGを作って辿ると良い. 全てのパスを調べ,送受信命令が必要かど

うかの判断をする.

3.4 送受信命令の挿入位置

送信命令は,そのレジスタの値が最後に定義されるより後に挿入する必要がある. 送信命令より

も後にそのレジスタの値を定義する命令があった場合,送信命令が誤った値を送る可能性があるた

めである. そのような事態が起こらないような集合を求めることが,送信命令を挿入できる位置を

定めることである. また,受信命令はそのレジスタの値を使用する命令よりも前に挿入する必要が

ある.

3.4.1 受信命令の挿入

受信命令の挿入に関しては,ループの各イタレーションの先頭に入れればよい. これは「受信命

令は早すぎても問題とならないから」である.

上述した通り,受信命令の挿入すべき場所は「初めてそのレジスタを使用する命令よりも前」と

なる必要がある.ループの基本ブロックの一番最初に受信命令を入れることでこの条件は満たされ

る. これは対象とするループが可約グラフであり,ループの入り口となる基本ブロックが一つに限

定されているためである.

11

Page 13: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

ただし,この受信命令の動作が後続の命令の動作を邪魔してはならない.そのため,例えば「送信

命令によって値が送られてくるまで演算器を占拠して待つ」ような実装はパフォーマンスに悪影響

を与える. レジスタに「送信を待つかどうか」というフラグを付け,そのフラグの操作命令にする

などすれば演算器単体の持つ IPC性能をほとんど損なうことなく受信命令を扱うことができる.

また,プロセッサのフェッチ幅が基本的に IPCに比べて高いこと及び本研究が目的としている対

象がデータ並列性の高い処理の並列実行であることから,受信専用命令によるプログラム量の増加

は無視できると考えられる.

3.4.2 送信命令の挿入

送信命令の挿入については,受信命令に比べその位置の決定が難しい.これは,位置の決定手法に

よってパフォーマンスに与える影響が大きいと考えられるからである. 以下,送信命令を挿入する

場所を決定する手法についてその詳細を述べる.

まず最も簡単な手法について述べた後,より性能を高めるために必要な手法の前段階として制御

フローグラフを利用して基本ブロックを識別する方法について述べる.その後,制御フローグラフに

基づいた送信命令挿入法について既存の手法を紹介した後,本研究が提案する手法について述べる.

ループ終端への送信命令の挿入

まず,最も安全な策となるのがループの終端となる部分へ送信命令を挿入する方法である. 次の

イタレーションに移る直前ならば,必ず送信すべきレジスタの値は全て確定している.そのため,プ

ログラムの意味を損なうことはない.

この手法の延長線上として,最終基本ブロック内を下流から順に調べ,最も下流にあるそのレジ

スタを定義する命令の直後に送信命令を挿入する手法もある.その基本ブロックにレジスタの値を

定義する命令がなければ,基本ブロックの先頭に送信命令が挿入される.

この手法の利点としては解析が非常に容易であること,基本ブロック 1つから成るようなループ

であれば最適な位置への挿入が可能であることなどが挙げられる.

一方,基本ブロックが複雑に別れる場合など,最終基本ブロックまでのループ中に存在する命令

数が非常に多い場合には,送信命令の出現するタイミングが遅くなる可能性が高い.これは,ループ

の遥か上流で定義されたレジスタの値であっても最後の基本ブロックまで送信することができない

からである.

送信タイミングが遅いということは,並列度の向上が鈍くなることを意味する.図 3.4は他の手法

を利用して送信命令を最適な位置に挿入できた場合の並列実行の様子の一例であり,図 3.5はこの

手法を用いて最後の基本ブロックに送信命令を挿入した場合の並列実行の様子の一例である.

図 3.5の場合,最初の基本ブロックはほぼ並列に実行できているが,次の基本ブロックが逐次実行

に近いとまでは言わないものの,並列度が低い並び方になっている. これでは実行ユニットの数に

比べ,並列度はほとんど上がらないことになる.

この手法では上記のように,最後にレジスタが定義される位置によっては並列度がかなり低くな

る場合があることが想定される.

12

Page 14: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

snd r1

snd r1

snd r1

snd r1

PE 1 PE 2 PE 3 PE 4 PE 5

図 3.4:送信命令を最適な位置に挿入できたループの並列実行

snd r1

snd r1

PE 1 PE 2 PE 3 PE 4 PE 5

図 3.5:送信命令を最後の基本ブロックに挿入したループの並列実行

送信命令を挿入できる基本ブロックを探す手法

この手法及び以降で述べる手法には,一つ共通の手法がある. まずは以降で述べる手法に共通す

る手法について説明する.

基本ブロックの識別 送信命令を入れるための前段階としてはじめに,制御フローグラフを作成し

て基本ブロックをいくつかの集合に分けるということを行う.

まず,ループ内の制御フローグラフを作成する.この段階は,送受信命令を入れるべきレジスタの

判別と平行して行うことが可能である.その基本ブロックでどのレジスタが定義されるかという情

報も記録すると効率がよい.

次に,制御フローグラフをループの入り口から全てのパスを順に辿り,送受信すべきレジスタが定

義される基本ブロックを探索する.あるパスで送受信すべきレジスタが定義される基本ブロックが見

つかった場合,その基本ブロックを仮の「必ず最後に定義される基本ブロック」と見なしMRD(Most

Recently Defined)フラグを付ける.これまでに辿ってきた基本ブロックを「最後に定義される基本

13

Page 15: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

ブロックの前に出現する基本ブロック」とし, BLD(Before Last Definition)フラグを付ける. この 2

つのフラグは後述する通り排他であり,状態としてはフラグなしを合わせた 3つに別れる.

その後,パス毎にこの作業をループの出口にたどり着くまで繰り返す.この時,一度MRDフラグ

が付けられた基本ブロックについても,下流で別の「最後に定義される基本ブロック」に至るパス

が存在した場合には MRDフラグをはずし BLD フラグを付ける. MRDフラグと BLD フラグは両

立させない.これは, MRDフラグが立った時点で「必ず最後に定義される基本ブロック」とは言え

なくなるからである.図 3.6の右上の基本ブロックがその例である.一旦はMRDフラグを付けられ

るが,その 2つ下の基本ブロックを通るパスを辿った際に BLD フラグに変更される.

MRD MRD

MRD

BLD

BLD

BLD BLD

BLD

r1 = r1 =

r1 =

図 3.6:制御フローグラフを元にしたフラグ付け

内部にループが存在した場合, その飛び先のフラグを見る. フラグがなければそのまま続行し,

MRDまたはBLD,どちらか一方のフラグが付いていればそれまでに辿った基本ブロック全てをBLD

とする.これにより,内部ループがある場合にも対処できる.

全てのパスを付け終えた時,基本ブロックは次の 3つの集合に分けられている.便宜上,フラグを

付けていない基本ブロックを NFB(No-Flags Basic block)と以下では呼ぶことにする.

MRD その基本ブロックの最後の定義が,ループの出口まで到達する定義となる基本ブロックの

集合

BLD その基本ブロック以降でレジスタの値が定義される可能性がある,送信命令を入れてはなら

ない基本ブロックの集合

NFB その基本ブロックを含め,ループの出口まで定義が行われない基本ブロックの集合

この時,送信命令を挿入できない集合は集合 BLD であり,送信命令を挿入しても良い集合は MRD

と NFBの和集合となる.この情報を元に,送信命令を挿入する位置を決定する.

14

Page 16: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

送信命令の挿入場所決定手法

手法 1:下流から辿る手法 まずはじめに,安全性が高い手法として制御フローグラフを下流から辿

ることで送信命令を挿入する手法について述べる. この手法では,制御フローグラフを最も下流と

なるループの出口から辿る.

ループの出口となる最も下流の基本ブロックにMRD及び BLD フラグが付いていないかを確認

し,付いていなければその基本ブロックの直前に通る可能性のある基本ブロック全てについてフラ

グを調べる.もし, 1つでも BLDフラグの付いた基本ブロックが直前に存在するなら,上流の基本ブ

ロックへは遡らずその基本ブロックの先頭に送信命令を挿入する. 1つも BLDフラグの付いた基本

ブロックが 1つ上流に存在しないのであれば,それらの基本ブロックは全て送信命令を入れること

が可能であると判断し,上流に進む.

もしMRDフラグが付いていれば,その基本ブロックで最後にレジスタの値を定義する命令の直

後に送信命令を挿入する. どちらのフラグも付いていなければ,その基本ブロックの 1つ上流にあ

る全ての基本ブロックについてフラグを確認する. BLDフラグの付いた基本ブロックが 1つもない

のであれば,また上流へと進む.もし 1つでもあるならば,進むことなくその基本ブロックの先頭に

送信命令を挿入する. この作業を繰り返し,これ以上上流へ辿れなくなった時点で送信命令を全て

挿入し終えたと判断する.

この手法では,下流から辿るという手間はあるものの,一度制御フローグラフを作ってあれば作

業自体は比較的容易である. また,同じレジスタの値を複数回送信してしまうことがほとんどない

方法であるため,安全性が高い方法でもある.

一方, 1つ上流に BLD フラグの付いた基本ブロックが 1つでもあればそれ以上遡らないため,他

に BLD フラグの付いていない基本ブロックが存在した場合,最低でもその基本ブロックに含まれ

る命令数程度は送信するタイミングが最善の場合より遅れることとなる.

手法 2:上流から辿る手法 続いて,上流から辿ることで最適な位置に送信命令を挿入することを優

先した手法について述べる. この手法では,ループの入り口となる最も上流の基本ブロックから下

流へと辿っていく.

まず,最も上流の基本ブロックのフラグを確認する.もしMRDフラグが付いていればその基本ブ

ロックで最後にレジスタの値を定義する命令を探し,その直後に送信命令を挿入する. BLDフラグ

が付いていれば, 1つ下流にあるそれぞれの基本ブロックへと進む.

1つ下流の基本ブロックに進んだら,その基本ブロックのフラグを確認する.何もフラグが付いて

いなければ,以降そのイタレーション内ではレジスタの値が新たに定義されることがなくなったと

判断できるので,その基本ブロックの先頭に送信命令を挿入する. MRDフラグが付いていればその

基本ブロックで最後にレジスタの値を定義する命令を探し,直後に送信命令を挿入する. BLDフラ

グが付いていれば,また 1つ下流にある全ての基本ブロックに進む.これにより,送信するレジスタ

の値が決定した直後となる全ての地点に送信命令が挿入できる.

この手法では,全ての送信命令が,送信する値の決定直後に挿入されるため,送信に遅れが出ない.

そのため,パフォーマンス的には最も向上する手法の 1つであると考えられる.

一方,この手法では,送信命令を複数回辿るパスが存在する可能性がある.複数回送信されるレジ

スタの値は,ループの出口まで到達する定義が決定した後にあるため値が変わることはないが,複

数回送信されても影響がないようなアーキテクチャにしか使えない. そのため,アーキテクチャ側

に危険防止策を付け加える必要がある.

15

Page 17: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

手法 3:間に基本ブロックを入れる手法 上述した 2つの手法それぞれの弱点を克服した手法とし

て,新たな基本ブロックを加えそこに送信命令を入れる手法を提案する.

図 3.7のような制御フローグラフのループがあるとする.このような場合,手法 1を適用して送信

命令を挿入すると送信命令の挿入位置が最後の基本ブロックになり,レジスタ r1の値を定義する命

令のある中段右の基本ブロックを辿った場合には送信が遅れることとなる. 一方,手法 2を適用し

て送信命令を挿入した場合,中段右の基本ブロックと最後の基本ブロックの両方に送信命令が挿入

される. この時,中段右の基本ブロックを辿った場合には送信命令が 2回実行されてしまうことに

なる.

= r1

snd r1snd r1

snd r1

BLD

MRD

図 3.7:手法 1や手法 2で問題が生じるループへの基本ブロック挿入手法

その解決策としては,最初の基本ブロックから最後の基本ブロックへ直接進むパスについて,間

に基本ブロックを挿入することが考えられる.間に挿入した基本ブロックに送信命令を挿入するこ

とで,最適な位置への送信命令の挿入は手法 2と同様なまま,複数回同じレジスタの送信命令を実

行してしまう危険性を完全に排除することができる.

手法自体は,基本的に手法 2と似ている.上流から辿り, 1つ下流の基本ブロックに BLDフラグが

ついていればそのまま進む. MRDフラグが付いていればその基本ブロックで最後にレジスタの値

を定義する命令を探し,直後に送信命令を挿入する.ここまでは同様であるが,どちらのフラグも付

いていなかった場合に次のようなことを行う.

まず,どちらのフラグも付いていない基本ブロックが 1つ下流に見つかったら,その基本ブロック

の 1つ上流にある基本ブロック全てについてフラグを確認する. もし全てが BLD フラグ付きであ

れば,その基本ブロックに送信命令をそのまま挿入する.これは,それより上流で同じレジスタの送

信命令を実行されることがないからである.

もし上流が 1つでもフラグなし,あるいは MRDフラグ付きであれば,その基本ブロックに送信

命令を挿入した場合そのレジスタの送信命令が複数回実行される可能性がある. そのため,元々の

BLD フラグ付き基本ブロックとその 1つ下流のフラグなし基本ブロックの間に新たな基本ブロッ

16

Page 18: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

クを作り,そこに送信命令を挿入する.これにより,送信命令を最適な位置に挿入しながら複数回送

信する危険性がない.

この手法は,次のような意味を持つ. まず,あるレジスタの値について,ループの内部の命令はそ

の命令より後で,そのレジスタの値が新たに定義される可能性のある命令とその命令より後で,その

レジスタの値が新たに定義される可能性のない命令の 2種類に分類できる.基本ブロックごとに見

ると, BLDフラグの付いた基本ブロックは前者に属する集合であり,フラグの付いていない基本ブ

ロックは後者に属する集合である. そして, MRDフラグの付いた基本ブロックは,その基本ブロッ

クの中で最後にそのレジスタの値を定義する命令を境界として,前者と後者に別れる. 基本ブロッ

クを挿入する手法は,この 2つの集合の境界上に送信命令を挿入することに等しい.そのため,送信

命令が挿入される位置は最適であり,かつ一度しか送信されないこととなる.

上述のように,この手法は送信命令を最適な位置に挿入することができ,複数回同じレジスタの

値を送信してしまう危険性もない. 一方,基本ブロックの数が増えるのでコンパイラでの作業は複

雑になる.

17

Page 19: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第4章 評価

4.1 予備評価

今回は受信命令挿入による効果と制御フローグラフに基づいた送信命令挿入によって早く送信で

きるレジスタ数の 2つについて,以下の条件で予備評価を行った.

• ループは最内周のループを対象とする.

• 内部で関数呼び出しを含む場合には,そのループを並列化しない.

4.1.1 繰り越し依存とループ外定義

3章で述べたように,ループには内部で定義される前に使用される変数として繰り越し依存とルー

プ外定義がある. 前者は必ず送信命令を加える必要がある一方,後者はその構成によって送信する

手法と送信しない手法があることを述べた.そこで,もしループ外定義も送信した場合,どの程度送

信数が増えるかを SPEC2000について調べた結果が図 4.1である.図にある比率とは,繰り越し依存

となる変数の数とループ外で定義される変数の数の和を繰り越し依存となる変数の数で割ったもの

であり,ループ外定義も送信する場合に通信量が何倍になるかを示す数である. 3.623.004.002.60-2.292.602.542.783.103.013.42比率 2415398345349505341061493987249583535ループ外定義の数 92319911521780415664321553446290221繰り越し変数の数 564979010800203413145412434161123ループの数 300.twolf256.bzip2255.vortex254.gap253.perlbmk252.eon197.parser186.crafty181.mcf176.gcc175.vpr164.gzipSPEC2000INT2.45-3.04----比率 162251941190000ループ外定義の数 112020160000繰り越し変数の数 533907770000ループの数 179.art178.galgel177.mesa173.applu172.mgrid171.swim168.wupwiseSPEC2000FP

----3.13-3.41 005412196719563248 00003370103 00978521648650 301.apsi200.sixtrack191.fma3d189.lucas188.ammp187.facerec183.equake図 4.1:ループ数及び内部の繰り越し依存数と外部定義数

結果としては, SPEC2000INTで約 2.9倍, SPEC2000FPでは約 6.4倍の送信命令の追加が必要な

ことがわかる. これは,レジスタ通信が飛躍的に増大することを意味している. このことから,前述

したように受信命令によって受信すべきレジスタを指定する手法がループ外定義も全て転送する手

法より優位にあることが裏付けられる.

18

Page 20: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

4.1.2 送信するタイミングが早くなるレジスタ

3章の手法 2に基づき,送信命令が終端となる基本ブロックより前に挿入できる場合がどの程度

存在するか,送信命令を入れる全繰り越し依存の中での割合を調べた.

同じループ内に他の繰り越し依存がある場合,その繰り越し依存によって並列度が上がらなくな

る可能性があり,この割合がそのまま性能の向上する割合となるわけではない.しかし,一定数は並

列度を上げられるループも存在するはずであるから,この割合が高ければそういったループが存在

する確率も高いと考えられる.結果は図 4.2のようになった.送信命令が早く実行できるレジスタの割合

00.050.10.150.20.250.30.350.40.45

164.gzip 175.vpr 176.gcc 181.mcf 186.crafty197.parser 252.eon 254.gap255.vortex 256.bzip2 300.twolf 177.mesa 179.art183.equake 188.ammp図 4.2:送信命令が早く実行できるレジスタの割合

SPEC2000のプログラムでは,約 2割の繰り越し依存が,終端となる基本ブロックより前に入れら

れることになる. ただし,ループの各イタレーションを並列動作させる際にクリティカルパスとな

るのは繰り越し依存の中の 1つであり,この数値が並列度の向上と直接繋がる数値ではない.

19

Page 21: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第5章 関連研究

5.1 ループを並列実行するクラスタ型アーキテクチャ

ループを並列実行するクラスタ型アーキテクチャ[1]は,本研究が対象とするアーキテクチャの元

になったアーキテクチャで,同様にデータ並列性の高い処理を目的とし, LLPを利用して並列性能

を高めたアーキテクチャである. クラスタ型アーキテクチャを採用していることと,既存のバイナ

リを利用し,ループを動的に検出して並列実行を行うことに特徴がある.

このループを並列実行するクラスタ型アーキテクチャも本研究が対象とするアーキテクチャと同

様に,ループの各イタレーションを切り出し,各クラスタに割り当てて並列実行している. フェッチ

した命令をコピーして各クラスタにディスパッチすることで並列動作を行い,繰り越し依存につい

ては実行時の情報を元にレジスタ通信を行っている.

ループを並列実行するクラスタ型アーキテクチャは,対象となるループが分岐しないことを前提

としている. これにより実行時の情報から繰り越し依存を特定し,レジスタ通信することが可能で

ある. 分岐が一切存在しなければ,実行時でもレジスタの同期に必要な情報を集めることが可能だ

からである.

一方,分岐のあるループに対しては並列実行ができないため,ループ内で分岐が現れると並列実

行を中止する. このため,並列実行ができるループが限られる. 近年,複雑性が高まりつつあるデー

タ並列性の高い処理に対しては,分岐にも対応する必要がある.

5.2 Multiscalar

Multiscalarは,プログラムを Taskと呼ぶスレッドに分割して並列実行するアーキテクチャであ

る. TLPを利用して並列動作し性能を向上させるアーキテクチャの中では初期に提案されたもので

あり,以降提案された TLPを利用して並列処理性能を高めるアーキテクチャの基礎にあるアーキテ

クチャである.

Multiscalarでは, 制御フローグラフに基づいて Taskへの分割点を決めている. 対象となるのは

ループやサブルーチンコールなどである.

レジスタの通信については,コンパイル時に create maskとして Task内で定義される値が列挙さ

れ,その情報がプログラムに埋め込まれる.レジスタを送信する場合には,そのレジスタを定義する

命令に forward bitを立ててそのことを示す.また,ある Taskの create maskは,その次にあたる Task

では accum maskとなり,受信命令と同様の役割を果たしている.

5.3 SKY

SKYは,一般的なプログラムを制御等価に基づいてスレッド分割し, TLPを利用した並列動作に

よる性能向上を目指したアーキテクチャである.

20

Page 22: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

SKYでは,コンパイラによってプログラムのスレッド分割を行っている.この分割は制御等価に

基づき,分割するスレッドの命令数・レジスタやメモリの依存距離などから分割による利得を計算

し,利得が最大になるような形で行う.分割する点には fork命令を,その分割したスレッドの終端に

は finish命令を挿入する.

また, SKYでは実行ユニット間のレジスタ同期を sendという送信命令によって行う.この送信命

令は,スレッド毎に活きているレジスタを全て送信する形で挿入される. そのスレッドで新たに定

義するレジスタはスレッド終端に到達する定義が決定した直後の基本ブロック先頭に,そのスレッ

ド内では定義されることのないレジスタは転送レジスタとしてスレッドの先頭に,送信命令を挿入

する.

SKYでは同じレジスタの値が再び送信されても対応できる仕組みを取っている.そのため,送信

命令の挿入手法は 3.4.2で述べた手法 2と同様である.

SKYが対象とするプログラムはより一般的な非数値計算応用である.本研究が対象とするような

ループを並列実行するアーキテクチャでは,ループ外で定義されループ内で使用されるのみのレジ

スタの値を並列実行開始時点で全ての実行ユニットに渡すことが可能である.しかし, SKYが対象

とするような制御等価に基づく分割では,そのような値の共通したレジスタを持つことはそれほど

多くない.転送レジスタの送信命令は真に送信すべきレジスタの送信命令に比べて数が少ないとい

う結果 [3] も出ている. そのため, SKYでは活きているレジスタを全て送信するという形を取って

いると考えられる.

21

Page 23: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

第6章 まとめと今後の課題

6.1 まとめ

近年, 並列性の高いデータ処理に対する需要が高まり, その内容が高度化・複雑化している.

従来の ILPを抽出しての並列実行によるプロセッサの高性能化は限界が近づいており,  LLPや

TLPを利用した新たなアーキテクチャが必要とされている. データ並列性の高い処理に対しては

ループの各イタレーションをスレッドとして切り出し, 複数の実行ユニットで並列実行するよう

なアーキテクチャなどが提案されている.

ループを並列実行する際には, 繰り越し依存が問題となる.繰り越し依存は, 繰り越し依存と

なるレジスタの値を実行ユニット間で適切に同期する必要がある.その方法として送受信それぞれ

に専用命令を加える方法があり, 送受信それぞれの専用命令を加える方法は加えない手法に比べ

て様々な優れている点を持つ. 特に本研究のように受信命令を加える場合は, ループ内で定義さ

れることのないレジスタの値も転送する場合に比べ通信量を少なくすることが可能である.

送信命令を適切に挿入するためには, 並列動作させるループについて, 制御フローグラフを

作って解析する必要がある.全てのパスを辿ることで送受信命令を必要とするレジスタの特定は可

能である.そして, 制御フローグラフの基本ブロックそれぞれにフラグを付けることで, その基

本ブロック以降で送受信すべきレジスタの値が新たに定義される可能性の有無を判別することもで

きる. 基本ブロックに付けたフラグの情報を元にすることで, 正しいレジスタの値を送信できる

位置に送信命令を挿入することが可能となる.

フラグを元にして挿入する手法はいくつかあるが, 本研究で提案したように, 以降の基本ブ

ロックでレジスタの値が定義される可能性のある基本ブロックとその可能性がない基本ブロックと

の間に送信命令を挿入するための基本ブロックを入れ送信命令を挿入することで, 値が確定した

直後に, 複数回送信する危険性もなくレジスタの値を送信することが可能である. この手法を採

用することで, 安全かつ可能な限り早いタイミングで送信命令を実行できるようになるが, コ

ンパイラによる作業に関しては多く複雑なものになる.

6.2 今後の課題

今回, 基本ブロックを追加して送信命令を挿入する手法及び送受信命令を追加したプログラムを

実際に走らせるようなシミュレータが未完成に終わってしまった.まずそれらの完成を目指したい.

また, 今回は最内周ループに絞って送受信命令の挿入を行ったが, 実際にはより外側の大きな

ループを並列化する方が並列実行時にさらに性能が上がるような場合も考えられる.並列動作させ

るループを選択する評価手法についても研究を進めたい.

そして最終的に, 本来の目標である, データ並列性の高い処理を対象としたアーキテクチャの

研究に活かしたい.

22

Page 24: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

謝辞

本研究を進めるにあたり,多くの方々にお世話になりました.

坂井修一教授には,ご多忙にもかかわらず,卒論相談会等において研究内容に関する助言をいた

だきました.大変感謝しております.

五島正裕助教授には,研究テーマの決定から本研究の進行,論文の添削まであらゆる面において

ご指導いただき,また,至らないばかりの私に対して何度も粘り強く叱咤・激励していただきました.

本当にありがとうございました.

事務補佐員の八木原晴水さん,月村美和さん,内田杏さんには研究を行う上での事務などでお世

話になりました.

入江英嗣氏,ルォン・ディン・フォン氏には,相談会等において,研究に関する助言をいただきま

した.

清水一人氏,栗田弘之氏には相談会を通じて大きな刺激をいただきました.

渡辺憲一氏,亘理靖展氏には研究内容や方針の助言,論文の添削など様々な方面で大変お世話に

なりました.

一林宏憲氏には研究内容のみならず様々な面で助言をいただきました.

勝沼聡氏,塩谷亮太氏,廣瀬健一郎氏,ドゥブトゥ・ピエール氏には,研究の過程で様々な手助けを

していただきました.

その他にも,坂井・五島研究室の皆様には研究や論文執筆,研究室での生活のサポートなど様々な

面でご協力いただき,大変お世話になりました.

本当にありがとうございました.

23

Page 25: マルチスレッド・プロセッサにおける ループ繰り越し依存の ... · 2019-12-21 · 最も早いタイミングで送信命令を実行することが可能になる

参考文献

[1] 渡辺憲一,五島正裕,坂井修一: ”ループを並列実行するクラスタ型アーキテクチャ” 情報処理

学会研究報告書 計算機アーキテクチャ研究会 200-ARC-169, Vol.2006, No.88, pp. 25-30, Aug,

2006.

[2] 小林良太郎,小川行宏,岩田充晃,安藤秀樹,島田俊夫: ”非数値計算応用向けスレッド・レベル並

列処理マルチプロセッサ・アーキテクチャSKY,” 情報処理学会論文誌 Vol.42 No.2, pp.349-366,

2001.

[3] 岩田充晃:”スレッド間命令レベル並列を利用するプロセッサアーキテクチャSKYのコンパイラ

に関する研究,” 名古屋大学大学院工学研究科博士課程 (前期課程)修士学位論文, 1998.

[4] IA-32 Intel Architecture Software Developer’s Manual

http://developer.intel.com/design/pentium4/documentation.htm

[5] G.S.Sohi, S.E.Breach, T.N.Vijaykumar:”Multiscalar processors,” Proceedings. 22nd Annual Interna-

tional Symposium on Computer Architecture, pp.414 - 425, June 1995.

[6] 大石基之:”トヨタの新型レクサス歩行者を認識して自動制御  NECの並列処理 LSIを採用”

日経エレクトロニクス 9-11/2006

[7] Radeon 9600 Series Specifications

http://www.ati.com/products/radeon9600/radeon9600pro/specs.html

[8] Cell Broadband Engine

http://cell.scei.co.jp/j_download.html

[9] Telairity-1 Breakthrough Architecture for High Definition Video

http://www.telairity.com/technology.html

[10] TAK S1R

http://www.takimaging.com/products/taks1r.php

24