JP2009054032A - 並列プロセッサ - Google Patents
並列プロセッサ Download PDFInfo
- Publication number
- JP2009054032A JP2009054032A JP2007221463A JP2007221463A JP2009054032A JP 2009054032 A JP2009054032 A JP 2009054032A JP 2007221463 A JP2007221463 A JP 2007221463A JP 2007221463 A JP2007221463 A JP 2007221463A JP 2009054032 A JP2009054032 A JP 2009054032A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- pipeline
- unit
- synchronization
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000002131 composite material Substances 0.000 claims abstract description 23
- 230000001360 synchronised effect Effects 0.000 claims description 20
- 238000010586 diagram Methods 0.000 description 14
- 150000001875 compounds Chemical class 0.000 description 10
- 239000000470 constituent Substances 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 210000001072 colon Anatomy 0.000 description 1
- 238000000034 method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
Abstract
【課題】コスト及び消費電力を低減しつつ、並列処理の性能を向上する。
【解決手段】並列プロセッサは、繰り返し指定付きの複合演算命令と同期命令とを有するプロセッサ命令を保持するフェッチユニット20と、プロセッサ命令をデコードするデコーダユニット40と、複合演算命令に基づいて並列に演算を実行し、同期命令に応じてパイプライン接続が制御される複数のパイプライン演算器pipeA、pipeBと、フェッチユニットとデコーダユニットとの間に設けられ、同期命令に応じてパイプライン演算器のパイプライン接続の実行開始タイミングを制御する同期制御ユニット30とを具備する。
【選択図】 図1
【解決手段】並列プロセッサは、繰り返し指定付きの複合演算命令と同期命令とを有するプロセッサ命令を保持するフェッチユニット20と、プロセッサ命令をデコードするデコーダユニット40と、複合演算命令に基づいて並列に演算を実行し、同期命令に応じてパイプライン接続が制御される複数のパイプライン演算器pipeA、pipeBと、フェッチユニットとデコーダユニットとの間に設けられ、同期命令に応じてパイプライン演算器のパイプライン接続の実行開始タイミングを制御する同期制御ユニット30とを具備する。
【選択図】 図1
Description
本発明は、パイプライン演算器を有する並列プロセッサに関する。
プロセッサの演算処理では、処理能力を高めるために、同時に実行する命令数を増やす手段がいくつかある(例えば、特許文献1参照)。しかし、アウトオブオーダー実行付きのスーパースカラプロセッサ等では、リオーダーバッファを用いて並列演算処理を実行するが、面積が大きくかつ複雑である上に、コスト及び消費電力が高いという問題があった。
特開2000−293509号公報
本発明は、コスト及び消費電力を低減しつつ、並列処理の性能を向上することが可能な並列プロセッサを提供する。
本発明の一態様による並列プロセッサは、繰り返し指定付きの複合演算命令と同期命令とを有するプロセッサ命令を保持するフェッチユニットと、前記プロセッサ命令をデコードするデコーダユニットと、前記複合演算命令に基づいて並列に演算を実行し、前記同期命令に応じてパイプライン接続が制御される複数のパイプライン演算器と、前記フェッチユニットと前記デコーダユニットとの間に設けられ、前記同期命令に応じて前記パイプライン演算器の前記パイプライン接続の実行開始タイミングを制御する同期制御ユニットとを具備する。
本発明によれば、コスト及び消費電力を低減しつつ、並列処理の性能を向上することが可能な並列プロセッサを提供できる。
本発明の実施の形態を以下に図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
[1]並列プロセッサの構成
図1は、本発明の一実施形態に係る並列プロセッサの概略的な構成図を示す。以下に、本発明の一実施形態に係る並列プロセッサの概略的な構成について説明する。
図1は、本発明の一実施形態に係る並列プロセッサの概略的な構成図を示す。以下に、本発明の一実施形態に係る並列プロセッサの概略的な構成について説明する。
図1に示すように、並列プロセッサは、バスインターフェイスユニット1、命令メモリ10、命令フェッチユニット(IFU:Instruction Fetch Unit)20、同期制御ユニット30、デコーダコントロールユニット(DCU:Decode Control Unit)40、レジスタファイル50、ロードストアユニット(LSU:Load Store Unit)60、データメモリ70、パイプライン演算器pipeA、pipeBを備えている。
バスインターフェイスユニット1は、主記憶装置等と命令やデータのやりとりを行う。命令メモリ10は、命令キャッシュメモリであり、バスインターフェイスユニット1から受けたプロセッサ命令を一時的に格納する。命令フェッチユニット20は、プロセッサ命令をフェッチする。デコーダコントロールユニット40は、プロセッサ命令を解読し、パイプライン演算器pipeA、pipeBに対する制御信号を出力する。
パイプライン演算器pipeA、pipeBは、複数の演算論理ユニット(ALU:Arithmetic and Logic Unit)A.ALU1〜3、B.ALU1〜3をそれぞれ有する。このパイプライン演算器pipeA、pipeBは、デコーダコントロールユニット40で解読したプロセッサ命令に従って複合演算を行う。尚、演算論理ユニットA.ALU1〜3、B.ALU1〜3は、複数段あればよく、3段に限定されない。
レジスタファイル50は、内部に複数のレジスタを持ち、パイプライン演算器pipeAとパイプライン演算器pipeBに供給するデータ及びこれらのパイプライン演算器での複合演算の結果を一時的に格納する。
同期制御ユニット30は、命令フェッチユニット20とデコーダコントロールユニット40との間に設けられる。この同期制御ユニット30は、パイプライン演算器pipeAとパイプライン演算器pipeBとのパイプライン接続の実行開始タイミングを制御する。
ロードストアユニット60は、データメモリ70とレジスタファイル50の間のデータ転送を制御する。より具体的には、デコーダコントロールユニット40で解読されたプロセッサ命令がロード命令の場合、データメモリ70からレジスタファイル50にデータを転送する。プロセッサ命令がストア命令の場合、レジスタファイル50からデータメモリ70にデータを転送する。データメモリ70は、データキャッシュメモリであり、バスインターフェイスユニット1から受けたデータ及びバスインターフェイスユニット1に送るデータを一時的に格納する。
[2]並列プロセッサの命令形式
図2は、本発明の一実施形態に係る並列プロセッサの命令形式を示す。以下に、本発明の一実施形態に係る並列プロセッサの命令形式について説明する。
図2は、本発明の一実施形態に係る並列プロセッサの命令形式を示す。以下に、本発明の一実施形態に係る並列プロセッサの命令形式について説明する。
図2に示すように、プロセッサの命令形式は、同期用命令ID、同期命令、pipe指定、繰り返し指定、複合演算命令を有する。このように、プロセッサの命令形式は、複数のフィールドで構成される。複数のフィールドを合わせると命令ビット長が長くなるので、これをLIW(Long Instruction Words)命令を呼ぶ。
このようなプロセッサ命令をアセンブリ言語で表現する場合、下記のように、命令フィールドの区切りを識別する記号としてコロン(:)やセミコロン(;)を付けて記述する。
同期用命令ID:同期命令;pipe指定;繰り返し指定;複合演算命令;
ここで、繰り返し指定付きの複合演算命令をベクタ演算命令と呼ぶことにする。このベクタ演算命令は、例えば、以下のような処理を1つの命令で実現する。
ここで、繰り返し指定付きの複合演算命令をベクタ演算命令と呼ぶことにする。このベクタ演算命令は、例えば、以下のような処理を1つの命令で実現する。
for (i=0; i<4; i++) {
x[i] = a[i] * 11 + b[i];
}
尚、複合演算命令は、SIMD(single instruction Multiple Data)演算でもよい。SIMD演算の場合、例えば、以下の2重ループを1つのLIW命令で実行する。
x[i] = a[i] * 11 + b[i];
}
尚、複合演算命令は、SIMD(single instruction Multiple Data)演算でもよい。SIMD演算の場合、例えば、以下の2重ループを1つのLIW命令で実行する。
for (i=0; i<4; i++) {
for (j=0; j<8; j++) { /* SIMD並列方向 */
x[i*8+j] = a[i*8+j] * 11 + b[i*8+j];
}
}
上記の例では、変数jで回るループをSIMD演算で並列に実行する。尚、以降の説明では、このSIMD演算ループについての説明は省略する。
for (j=0; j<8; j++) { /* SIMD並列方向 */
x[i*8+j] = a[i*8+j] * 11 + b[i*8+j];
}
}
上記の例では、変数jで回るループをSIMD演算で並列に実行する。尚、以降の説明では、このSIMD演算ループについての説明は省略する。
[3]複合演算のパイプライン動作
[3−1]複合演算
図3は、本発明の一実施形態に係る並列プロセッサの複合演算のパイプライン動作のブロック図を示す。図4は、本発明の一実施形態に係る1つのパイプライン演算器による複合演算動作を描いたタイミング図を示す。以下に、本発明の一実施形態に係る並列プロセッサにおいて、1つのパイプライン演算器による複合演算について説明する。
[3−1]複合演算
図3は、本発明の一実施形態に係る並列プロセッサの複合演算のパイプライン動作のブロック図を示す。図4は、本発明の一実施形態に係る1つのパイプライン演算器による複合演算動作を描いたタイミング図を示す。以下に、本発明の一実施形態に係る並列プロセッサにおいて、1つのパイプライン演算器による複合演算について説明する。
図3及び図4において、パイプラインステージの各記号の意味は下記の通りである。
F:命令フェッチ
Q:同期用待ち合わせ
D:デコード
R:レジスタフェッチ
X1,X2,X3:実行
W:ライトバック
図3及び図4に示すように、同期用命令ID=1、同期命令=なし(nosync)、pipe指定=パイプライン演算器pipeA、繰り返し指定=4回(repeat4)の複合演算命令が行われた場合、次のようになる。尚、本例では、パイプライン演算器pipeAは1つのみ使用しているため、複数のパイプライン演算器の同期制御を行う必要がないため、同期命令はなしとなっている。
Q:同期用待ち合わせ
D:デコード
R:レジスタフェッチ
X1,X2,X3:実行
W:ライトバック
図3及び図4に示すように、同期用命令ID=1、同期命令=なし(nosync)、pipe指定=パイプライン演算器pipeA、繰り返し指定=4回(repeat4)の複合演算命令が行われた場合、次のようになる。尚、本例では、パイプライン演算器pipeAは1つのみ使用しているため、複数のパイプライン演算器の同期制御を行う必要がないため、同期命令はなしとなっている。
まず、命令フェッチユニット20が複合演算命令をフェッチする(F)。そして、同期制御ユニット30が同期用待ち合わせを行い(Q)、デコーダコントロールユニット40が複合演算命令を解読する(D)。このデコードと同時に、レジスタファイル50でレジスタフェッチが行われる(R)。次に、パイプライン演算器pipeAの演算論理ユニットA.ALU1、A.ALU2、A.ALU3により、演算1〜4が4回繰り返される。
具体的には、レジスタファイル50によるレジスタフェッチ(R)、演算論理ユニットA.ALU1の命令実行(X1)、演算論理ユニットA.ALU2の命令実行(X2)、演算論理ユニットA.ALU3の命令実行(X3)、レジスタファイル50へのライトバック(W)の順で、演算1が実行される。
演算2のレジスタフェッチ(R)は、演算1の演算論理ユニットA.ALU1の命令実行(X1)と同時に行われる。そして、演算2も、演算1と同様、演算論理ユニットA.ALU1、A.ALU2、A.ALU3により順に実行され(X1、X2、X3)、レジスタファイル50へのライトバック(W)が行われる。
演算3のレジスタフェッチ(R)は、演算2の演算論理ユニットA.ALU1の命令実行(X1)と同時に行われる。そして、演算3も、演算1と同様、演算論理ユニットA.ALU1、A.ALU2、A.ALU3により順に実行され(X1、X2、X3)、レジスタファイル50へのライトバック(W)が行われる。
演算4のレジスタフェッチ(R)は、演算3の演算論理ユニットA.ALU1の命令実行(X1)と同時に行われる。そして、演算4も、演算1と同様、演算論理ユニットA.ALU1、A.ALU2、A.ALU3により順に実行され(X1、X2、X3)、レジスタファイル50へのライトバック(W)が行われる。
尚、この例では、実行ステージを3段にしているが、他の段数でも構わない。また、ベクタ演算による1つの繰り返しあたり1サイクルのスループットで実行する。LIW命令は、1サイクルに1個フェッチできる。
[3−2]複合演算の並列実行
図5は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたタイミング図を示す。以下に、本発明の一実施形態に係る並列プロセッサにおいて、2つのパイプライン演算器による複合演算のパイプライン動作の一例について説明する。
図5は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたタイミング図を示す。以下に、本発明の一実施形態に係る並列プロセッサにおいて、2つのパイプライン演算器による複合演算のパイプライン動作の一例について説明する。
本実施形態では、複合演算を行うパイプライン演算器pipeA、pipeBが複数ある。ここで、複数のパイプライン演算器pipeA、pipeBに依存関係が無ければ、複数のベクタ演算を複数のパイプライン演算器pipeA、pipeBを使って並列実行できる。この例を下記に示す。
for (i=0; i<4; i++) {
x[i] = a[i] * 11 + b[i]; /* pipe Aで実行 */
}
for (i=0; i<4; i++) {
y[i] = d[i] * 13 + e[i]; /* pipe Bで実行 */
}
上記の例で配列変数同士の依存がないとき、例えば、下記のLIW命令に翻訳できる。尚、この段階ではまだ同期命令は考慮していないため、同期命令は記述していない。
x[i] = a[i] * 11 + b[i]; /* pipe Aで実行 */
}
for (i=0; i<4; i++) {
y[i] = d[i] * 13 + e[i]; /* pipe Bで実行 */
}
上記の例で配列変数同士の依存がないとき、例えば、下記のLIW命令に翻訳できる。尚、この段階ではまだ同期命令は考慮していないため、同期命令は記述していない。
pipe A; repeat 4; muli_add $8+, $0+, $4+, 11;
pipe B; repeat 4; muli_add $20+, $12+, $16+, 13;
ここで、$で始まる数字は、レジスタファイル50内のレジスタ番号を表す。このレジスタ番号の直後の+は、レジスタ番号の自動インクリメントを表す。
pipe B; repeat 4; muli_add $20+, $12+, $16+, 13;
ここで、$で始まる数字は、レジスタファイル50内のレジスタ番号を表す。このレジスタ番号の直後の+は、レジスタ番号の自動インクリメントを表す。
このような同期命令のない複数のパイプライン演算器pipeA、pipeBによる並列実行は、例えば図5のようになる。LIW命令を1サイクルに1個ずつフェッチできるとすると、図5に示すように、命令フェッチ(F)のために1サイクルのオーバーヘッドが付くが、この分を除いて、2つのベクタ演算を並列実行できる。
尚、ここでは、説明の簡略化のため、パイプライン演算器pipeA、pipeBが2つの場合のみを記述しているが、パイプライン演算器が3つ以上の場合も同様にして並列実行できる。
[3−3]同期制御
図6は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたブロック図を示す。図7は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたタイミング図を示す。図8は、本発明の一実施形態に係る同期制御ユニットによるパイプライン接続の制御の様子を示す。以下に、本発明の一実施形態に係る複合演算のパイプライン動作において、2つのパイプライン演算器の同期制御について説明する。
図6は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたブロック図を示す。図7は、本発明の一実施形態に係る2つのパイプライン演算器による複合演算のパイプライン動作を描いたタイミング図を示す。図8は、本発明の一実施形態に係る同期制御ユニットによるパイプライン接続の制御の様子を示す。以下に、本発明の一実施形態に係る複合演算のパイプライン動作において、2つのパイプライン演算器の同期制御について説明する。
上記[3−2]で説明した例からも推測が付くが、パイプライン演算器pipeA、pipeBの2つのベクタ演算を並列実行すると、同時に使用するレジスタの本数が多くなるという問題がある。レジスタの本数は、並列プロセッサのコストと消費電力に大きな影響を与える。よって、同時に使用されるレジスタの本数はできるだけ少ない方が望ましい。
そこで、本実施形態では、この問題の一解決策として、パイプライン接続する前段側の命令(本例の場合、パイプライン演算器pipeAの命令)の繰り返しの最初のライトバックが完了する直後のサイクルから後段側の命令(本例の場合、パイプライン演算器pipeBの命令)の繰り返しの最初のレジスタフェッチが開始されるように制御する。
このような制御は、例えば、下記の例で考える。
for (i=0; i<4; i++) {
y[i] = d[i] * 13 + a[i] * 11 + b[i];
}
上記のループ内の式を下記のように2つに分割して、それぞれを1つのパイプライン演算器pipeA、pipeBに割り当てる。
y[i] = d[i] * 13 + a[i] * 11 + b[i];
}
上記のループ内の式を下記のように2つに分割して、それぞれを1つのパイプライン演算器pipeA、pipeBに割り当てる。
for (i=0; i<4; i++) {
x[i] = a[i] * 11 + b[i]; /* pipe Aで実行 */
}
for (i=0; i<4; i++) {
y[i] = d[i] * 13 + x[i]; /* pipe Bで実行 */
}
上記をLIW命令に直訳すると、下記のようになる。
x[i] = a[i] * 11 + b[i]; /* pipe Aで実行 */
}
for (i=0; i<4; i++) {
y[i] = d[i] * 13 + x[i]; /* pipe Bで実行 */
}
上記をLIW命令に直訳すると、下記のようになる。
pipe A; repeat 4; muli_add $8+, $0+, $4+, 11;
pipe B; repeat 4; muli_add $16+, $12+, $8+, 13;
変数x[i]には、$8, $9, $10, $11の4本のレジスタを割り当てることになる。そこで、このレジスタの本数を減らすため、下記のように変形する。
pipe B; repeat 4; muli_add $16+, $12+, $8+, 13;
変数x[i]には、$8, $9, $10, $11の4本のレジスタを割り当てることになる。そこで、このレジスタの本数を減らすため、下記のように変形する。
for (i=0; i<4; i++) {
tmp = a[i] * 11 + b[i]; /* pipe Aで実行 */
y[i] = d[i] * 13 + tmp; /* pipe Bで実行 */
}
ここで、変数tmpには、レジスタ1本のみを割り当てる。これをLIW命令に翻訳すると、下記のようになる。尚、変数tmpの参照の同期に関する説明は後述する。
tmp = a[i] * 11 + b[i]; /* pipe Aで実行 */
y[i] = d[i] * 13 + tmp; /* pipe Bで実行 */
}
ここで、変数tmpには、レジスタ1本のみを割り当てる。これをLIW命令に翻訳すると、下記のようになる。尚、変数tmpの参照の同期に関する説明は後述する。
pipe A; repeat 4; muli_add $8, $0+, $4+, 11;
pipe B; repeat 4; muli_add $13+, $9+, $8, 13;
ここで、パイプライン処理を行うとき、変数tmpをパイプライン演算器pipeAからパイプライン演算器pipeBに送る仕組みとして、バイパス制御することも考えられる。しかし、パイプラインの本数と段数が多いと、各パイプライン演算器の各段からバイパスする回路が大きく、コストと消費電力が増加する。
pipe B; repeat 4; muli_add $13+, $9+, $8, 13;
ここで、パイプライン処理を行うとき、変数tmpをパイプライン演算器pipeAからパイプライン演算器pipeBに送る仕組みとして、バイパス制御することも考えられる。しかし、パイプラインの本数と段数が多いと、各パイプライン演算器の各段からバイパスする回路が大きく、コストと消費電力が増加する。
そこで、本実施形態では、パイプライン演算器pipeAの演算結果のレジスタファイル50へのライトバックを待って、パイプライン演算器pipeBでの参照においてはライトバックした演算結果をレジスタファイル50から読むようにする。また、この制御を簡単にするために、この同期を指示するための専用の同期命令を用意する。
具体的には、上記の例で言えば、下記のようなLIW命令にする。
1: pipe A; repeat 4; muli_add $8, $0+, $4+, 11;
sync 1; pipe B; repeat 4; muli_add $13+, $9+, $8, 13;
ここで、1つ目のLIW命令の先頭の1:は、同期用命令IDを表す。2つ目のLIW命令の先頭のsync 1;は、同期用命令ID=1の命令結果を参照する同期を表す。
sync 1; pipe B; repeat 4; muli_add $13+, $9+, $8, 13;
ここで、1つ目のLIW命令の先頭の1:は、同期用命令IDを表す。2つ目のLIW命令の先頭のsync 1;は、同期用命令ID=1の命令結果を参照する同期を表す。
このようなLIW命令を実行するにあたり、本実施形態の並列プロセッサは、図6に示すように、命令フェッチステージ(F)とレジスタフェッチステージ(R)の間に同期制御ユニット30を備える。この同期制御ユニット30は、上述する同期命令に従って、後から接続されるパイプライン演算器pipeBの接続を待たせる制御を行い、パイプライン演算器pipeBを使う命令の実行開始タイミングを制御する。この際、レジスタファイル50中の1本のレジスタをパイプラインレジスタ51として使用する。このパイプラインレジスタ51は、同期制御ユニット30の制御信号に従って、2つのパイプライン演算器pipeA、pipeBをつなぐ。
パイプライン演算器pipeBの実行開始タイミングは、レジスタファイル50中に確保するパイプラインレジスタ51がちょうど1つで済むタイミングとする。つまり、パイプライン接続する前段側の命令(本例の場合、パイプライン演算器pipeAの命令)の繰り返しの最初のライトバックが完了する直後のサイクルから後段側の命令(本例の場合、パイプライン演算器pipeBの命令)の繰り返しの最初のレジスタフェッチが開始されるように制御する。繰り返しのこれ以降でも、このライトバックした値を直後のサイクルで読む関係が保持されるように制御する。
このような複合演算の制御について、図7を用いて具体的に説明する。ここでは、2つのパイプライン演算器pipeA、pipeBを用い、複合演算の繰り返し回数は4回である。そして、パイプライン接続において、前段側がパイプライン演算器pipeAであり、後段側がパイプライン演算器pipeBとする。
まず、パイプライン演算器pipeAに対する命令1は、次のように実行される。命令フェッチユニット20が命令1をフェッチする(F)。そして、同期制御ユニット30が同期用待ち合わせを行い(Q)、デコーダコントロールユニット40が命令1を解読する(D)。このデコードと同時に、レジスタファイル50でレジスタフェッチが行われる(R)。次に、演算論理ユニットA.ALU1の命令実行(X1)、演算論理ユニットA.ALU2の命令実行(X2)、演算論理ユニットA.ALU3の命令実行(X3)、レジスタファイル50へのライトバック(W)の順で、演算1が実行される。次の演算2のレジスタフェッチ(R)は、演算1の演算論理ユニットA.ALU1の命令実行(X1)と同時に行われる。そして、演算2も、演算1と同様、演算論理ユニットA.ALU1、A.ALU2、A.ALU3により順に実行され(X1、X2、X3)、レジスタファイル50にライトバック(W)が行われる。このような演算1〜4が、命令1によりパイプライン演算器pipeAで実行される。
ここで、パイプライン演算器pipeBに対する命令2は、命令1の同期用待ち合わせ(Q)と同時に、命令フェッチユニット20でフェッチされる(F)。そして、同期制御ユニット30で同期用待ちか否かの判定が行われる(Q)。ここで、命令1の演算1のライトバック(W)が終了するまで、パイプライン演算器pipeBは待ち状態となる(Qストール)。一方、命令1の演算1のライトバック(W)が終了すると、レジスタファイル50中のパイプラインレジスタ51には、パイプライン演算器pipeAの演算1の演算結果が保持されている。そこで、この演算結果をレジスタファイル50から読み、パイプライン演算器pipeBの演算1を開始する。同様に、パイプライン演算器pipeBの演算2はパイプライン演算器pipeAの演算2の演算結果を参照し、パイプライン演算器pipeBの演算3はパイプライン演算器pipeAの演算3の演算結果を参照し、パイプライン演算器pipeBの演算4はパイプライン演算器pipeAの演算4の演算結果を参照する。
上記のような複合演算において、パイプラインレジスタ51の状態は、図7に示すように、S0、S1、S2、S3、S4、S0と順に変化する。ここで、サイクル0〜2は状態S0である。サイクル3〜5は状態S1である。サイクル6は状態S2である。サイクル7〜8は状態S3である。サイクル9は状態S4である。サイクル10〜14は状態0である。
このようなパイプラインレジスタ51の状態は、図8に示すように、パイプライン演算器pipeAのライトバックの進み具合により変化する。具体的には、以下のようになる。
まず、1つ目の命令の演算が開始されるまで、パイプラインレジスタ51は初期状態S0である。つまり、図7の例では、命令1の演算1の実行(X1)が開始されるまで初期状態S0である。
次に、1つ目の命令の演算が開始されると、状態S1に変化する。そして、1つ目の命令の繰り返しの最初のライトバックが行われる直前のサイクルまでが、状態S1である。すなわち、図7の例では、命令1の演算1の実行(X1)が開始されてからこの演算1のライトバック(W)が開始される直前のサイクルまでが状態S1である。
次に、1つ目の命令の繰り返しの最初のライトバックが行われるサイクルで、状態S2に変化する。状態S2に留まるのは1サイクルのみであり、次のサイクルでは別の状態に変化する。すなわち、図7の例では、命令1の演算1のライトバック(W)が行われるサイクルのみが状態S2である。
次に、1つ目の命令の繰り返しの最初のライトバック後は、状態S3に変化する。そして、1つ目の命令の繰り返しの2番目から最後より1つ前のライトバックまでが、状態S3である。すなわち、図7の例では、命令1の演算2のライトバック(W)から、命令1の演算3のライトバック(W)までが状態S3である。状態S3に変化すると同時に、2つ目の命令の繰り返しの最初のレジスタフェッチ(R)を開始する。すなわち、図7の例では、命令2の演算1のレジスタフェッチ(R)を開始する。
次に、1つ目の命令の繰り返しの最後のライトバックが行われるサイクルで、状態S4に変化する。状態S4に留まるのは1サイクルのみであり、次のサイクルでは別の状態に変化する。すなわち、図7の例では、命令1の演算4のライトバック(W)が行われるサイクルのみが状態S4である。
次に、1つ目の命令の繰り返しの最後のライトバック後は、状態S0に戻る。すなわち、図7の例では、命令1の演算4のライトバック(W)の直後のサイクルで、状態S0に変化する。状態S0に変化すると同時に、2つ目の命令の繰り返しの最後のレジスタフェッチ(R)を行う。すなわち、図7の例では、命令2の演算4のレジスタフェッチ(R)を行う。
以上のように、2つ目の命令のレジスタフェッチ(R)のタイミングを1つ目の命令のライトバック(W)の進み具合の状態に合わせて制御し、パイプライン演算器のパイプライン接続が行われる。
尚、図8において、状態S2から状態S0に戻るループはベクタ演算が1回の場合の流れを示している。状態S2から状態S4に飛ぶループはベクタ演算が2回の場合の流れを示している。各状態S0、S1、S3の自己に戻るループは、次の状態に移るまでの条件が不成立である場合を示している。
[3−4]ステートマシン
図9は、本発明の一実施形態に係る同期制御ユニットに実装されるステートマシンの概略図を示す。以下に、本実施形態の同期制御を行うためのステートマシンの一例について説明する。
図9は、本発明の一実施形態に係る同期制御ユニットに実装されるステートマシンの概略図を示す。以下に、本実施形態の同期制御を行うためのステートマシンの一例について説明する。
上述するパイプラインレジスタ51の状態S0、S1、S2、S3、S4は、図9に示す同期制御ユニット30のステートマシンによって制御される。このステートマシンは、2つ目のパイプライン演算器pipeBの命令2のレジスタフェッチ(R)のタイミングを、1つ目のパイプライン演算器pipeAの命令1のライトバック(W)の進み具合の状態S0、S1、S2、S3、S4に合わせて制御する。
同期制御ユニット30は、図9に示すように、複数の同期管理ステートマシン31、32、33、34で構成される。ここで、同期制御ユニット30は、同期用命令IDとして取り得る値の数だけステートマシンを持つ。つまり、本実施形態では、パイプライン演算器pipeA、pipeBが2つしかないが、一般にはもっと多くてもよく、その場合には同期制御の対象となる命令の数が2つ以上になり得る。このような場合には、LIW命令中の同期用命令IDのフィールドに2ビット以上割り当てると共に、この同期用命令IDとして取り得る値の数だけ同期管理ステートマシンを用意するとよい。
同期制御ユニット30では、同期用命令ID付きの命令を受け取った場合、この同期用命令IDに対応する同期管理ステートマシンを起動する。すなわち、同期用命令ID=0の命令の場合、同期管理ステートマシン31を起動する。また、同期命令を受け取った場合、オペランドで指定された同期用命令IDに対応する同期管理ステートマシンを見て、2つ目のパイプライン演算器pipeBの実行開始を制御する。
[4]効果
本発明の一実施形態の並列プロセッサは、命令フェッチユニット20とデコーダコントロールユニット40との間に同期制御ユニット30を備えている。そして、この同期制御ユニット30は、複数のパイプライン演算器pipeA、pipeBのうち後から接続されるパイプライン演算器pipeBの接続を待たせる制御を行い、パイプライン演算器pipeBの実行命令を開始するタイミングを制御する。具体的には、パイプライン演算器pipeAの演算結果のライトバックを待って、このライトバックした結果をレジスタファイル50から読み、パイプライン演算器pipeBで参照するようにする。ここで、パイプライン演算器pipeA、pipeBのパイプライン接続は、レジスタファイル50内の1本のパイプラインレジスタ51によって行われる。このため、パイプライン演算器pipeA、pipeBにおいて2つのベクタ演算を並列実行する場合も、同時に使用するのは1本のパイプラインレジスタ51のみとなる。従って、従来のように、ベクタ演算を並列実行する際、同時に使用するレジスタの本数が多くなることを回避できる。
本発明の一実施形態の並列プロセッサは、命令フェッチユニット20とデコーダコントロールユニット40との間に同期制御ユニット30を備えている。そして、この同期制御ユニット30は、複数のパイプライン演算器pipeA、pipeBのうち後から接続されるパイプライン演算器pipeBの接続を待たせる制御を行い、パイプライン演算器pipeBの実行命令を開始するタイミングを制御する。具体的には、パイプライン演算器pipeAの演算結果のライトバックを待って、このライトバックした結果をレジスタファイル50から読み、パイプライン演算器pipeBで参照するようにする。ここで、パイプライン演算器pipeA、pipeBのパイプライン接続は、レジスタファイル50内の1本のパイプラインレジスタ51によって行われる。このため、パイプライン演算器pipeA、pipeBにおいて2つのベクタ演算を並列実行する場合も、同時に使用するのは1本のパイプラインレジスタ51のみとなる。従って、従来のように、ベクタ演算を並列実行する際、同時に使用するレジスタの本数が多くなることを回避できる。
以上のように、本実施形態によれば、規模の小さい同期制御ユニット30を追加するだけで、多くのパイプライン演算器のパイプライン接続による並列実行の制御が可能となり、コスト及び消費電力を低減しつつ、並列処理の性能を向上することが実現できる。
その他、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で、種々に変形することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
1…バスインターフェイスユニット、10…命令メモリ、20…命令フェッチユニット(IFU)、30…同期制御ユニット、40…デコーダコントロールユニット(DCU)、50…レジスタファイル、51…パイプラインレジスタ、60…ロードストアユニット(LSU)、70…データメモリ、pipeA、pipeB…パイプライン演算器、A.ALU1〜3、B.ALU1〜3…演算論理ユニット。
Claims (5)
- 繰り返し指定付きの複合演算命令と同期命令とを有するプロセッサ命令を保持するフェッチユニットと、
前記プロセッサ命令をデコードするデコーダユニットと、
前記複合演算命令に基づいて並列に演算を実行し、前記同期命令に応じてパイプライン接続が制御される複数のパイプライン演算器と、
前記フェッチユニットと前記デコーダユニットとの間に設けられ、前記同期命令に応じて前記パイプライン演算器の前記パイプライン接続の実行開始タイミングを制御する同期制御ユニットと
を具備することを特徴とする並列プロセッサ。 - 前記同期制御ユニットは、前記パイプライン接続を行う前段のパイプライン演算器の演算結果のライトバックを待って、このライトバックされた前記演算結果を参照して後段のパイプライン演算器の実行を開始する制御を行うことを特徴とする請求項1に記載の並列プロセッサ。
- 前記前段のパイプライン演算器の前記演算結果を保持し、前記前段のパイプライン演算器と前記後段のパイプライン演算器との前記パイプライン接続を行うパイプラインレジスタと
をさらに具備することを特徴とする請求項2に記載の並列プロセッサ。 - 前記パイプラインレジスタによる前記パイプライン接続は、前記前段のパイプライン演算器の前記ライトバックの進み進み具合の状態に合わせて、前記同期制御ユニットにより制御されることを特徴とする請求項3に記載の並列プロセッサ。
- 前記プロセッサ命令は、同期用命令IDをさらに有し、
前記同期制御ユニットは、前記同期用命令IDに対応するステートマシンを備えていることを特徴とする請求項1乃至4のいずれか1項に記載の並列プロセッサ。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007221463A JP2009054032A (ja) | 2007-08-28 | 2007-08-28 | 並列プロセッサ |
US12/197,663 US20090063827A1 (en) | 2007-08-28 | 2008-08-25 | Parallel processor and arithmetic method of the same |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007221463A JP2009054032A (ja) | 2007-08-28 | 2007-08-28 | 並列プロセッサ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009054032A true JP2009054032A (ja) | 2009-03-12 |
Family
ID=40409338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007221463A Pending JP2009054032A (ja) | 2007-08-28 | 2007-08-28 | 並列プロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US20090063827A1 (ja) |
JP (1) | JP2009054032A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012160794A1 (ja) * | 2011-05-20 | 2012-11-29 | 日本電気株式会社 | 演算処理装置、演算処理方法 |
JP2017228213A (ja) * | 2016-06-24 | 2017-12-28 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS57206982A (en) * | 1981-06-15 | 1982-12-18 | Fujitsu Ltd | Instruction controlling system |
JPH0535474A (ja) * | 1991-04-01 | 1993-02-12 | Matsushita Electric Ind Co Ltd | パイプライン計算機の同期方法及びそれを実現したパイプライン計算機 |
JPH08202687A (ja) * | 1995-01-26 | 1996-08-09 | Fujitsu Ltd | パイプライン制御方式 |
JPH10149285A (ja) * | 1996-11-18 | 1998-06-02 | Hitachi Ltd | 命令実行制御方法および情報処理装置 |
US5822557A (en) * | 1991-12-27 | 1998-10-13 | Fujitsu Limited | Pipelined data processing device having improved hardware control over an arithmetic operations unit |
JP2001184340A (ja) * | 1999-12-22 | 2001-07-06 | Nec Kofu Ltd | 情報処理装置及び複数ベクトルプロセッサ間の同期化方法 |
JP2005538439A (ja) * | 2002-09-04 | 2005-12-15 | エイアールエム リミテッド | データ処理装置におけるパイプライン間の同期 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06103494B2 (ja) * | 1986-11-18 | 1994-12-14 | 株式会社日立製作所 | ベクトル処理装置の制御方式 |
US5299320A (en) * | 1990-09-03 | 1994-03-29 | Matsushita Electric Industrial Co., Ltd. | Program control type vector processor for executing a vector pipeline operation for a series of vector data which is in accordance with a vector pipeline |
JP2748822B2 (ja) * | 1993-07-05 | 1998-05-13 | 日本電気株式会社 | 情報処理装置 |
KR100308618B1 (ko) * | 1999-02-27 | 2001-09-26 | 윤종용 | 단일 칩 상의 마이크로프로세서-코프로세서 시스템을 구비한 파이프라인 데이터 처리 시스템 및 호스트 마이크로프로세서와 코프로세서 사이의 인터페이스 방법 |
DE60144022D1 (de) * | 2000-11-06 | 2011-03-24 | Broadcom Corp | Umkonfigurierbares verarbeitungssystem und -verfahren |
US20070073925A1 (en) * | 2005-09-28 | 2007-03-29 | Arc International (Uk) Limited | Systems and methods for synchronizing multiple processing engines of a microprocessor |
US20080313438A1 (en) * | 2007-06-14 | 2008-12-18 | David Arnold Luick | Unified Cascaded Delayed Execution Pipeline for Fixed and Floating Point Instructions |
-
2007
- 2007-08-28 JP JP2007221463A patent/JP2009054032A/ja active Pending
-
2008
- 2008-08-25 US US12/197,663 patent/US20090063827A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS57206982A (en) * | 1981-06-15 | 1982-12-18 | Fujitsu Ltd | Instruction controlling system |
JPH0535474A (ja) * | 1991-04-01 | 1993-02-12 | Matsushita Electric Ind Co Ltd | パイプライン計算機の同期方法及びそれを実現したパイプライン計算機 |
US5822557A (en) * | 1991-12-27 | 1998-10-13 | Fujitsu Limited | Pipelined data processing device having improved hardware control over an arithmetic operations unit |
JPH08202687A (ja) * | 1995-01-26 | 1996-08-09 | Fujitsu Ltd | パイプライン制御方式 |
JPH10149285A (ja) * | 1996-11-18 | 1998-06-02 | Hitachi Ltd | 命令実行制御方法および情報処理装置 |
JP2001184340A (ja) * | 1999-12-22 | 2001-07-06 | Nec Kofu Ltd | 情報処理装置及び複数ベクトルプロセッサ間の同期化方法 |
JP2005538439A (ja) * | 2002-09-04 | 2005-12-15 | エイアールエム リミテッド | データ処理装置におけるパイプライン間の同期 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012160794A1 (ja) * | 2011-05-20 | 2012-11-29 | 日本電気株式会社 | 演算処理装置、演算処理方法 |
JPWO2012160794A1 (ja) * | 2011-05-20 | 2014-07-31 | 日本電気株式会社 | 演算処理装置、演算処理方法 |
JP2017228213A (ja) * | 2016-06-24 | 2017-12-28 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20090063827A1 (en) | 2009-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5889986B2 (ja) | 実行された命令の結果を選択的にコミットするためのシステムおよび方法 | |
US9766894B2 (en) | Method and apparatus for enabling a processor to generate pipeline control signals | |
JP5209933B2 (ja) | データ処理装置 | |
JP2002333978A (ja) | Vliw型プロセッサ | |
JP2010532063A (ja) | 条件命令を無条件命令および選択命令へと拡張する方法およびシステム | |
JP2000330790A (ja) | コンピュータシステム動作方法、コンピュータシステムにおける命令スケジューリング方法およびコンピュータシステム | |
JP2006313422A (ja) | 演算処理装置及びデータ転送処理の実行方法 | |
KR20010109354A (ko) | 프로세서내의 기록 트래픽을 감소시키는 시스템 및 방법 | |
JP2003005958A (ja) | データ処理装置およびその制御方法 | |
JP2004171573A (ja) | 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ | |
US7620804B2 (en) | Central processing unit architecture with multiple pipelines which decodes but does not execute both branch paths | |
US20210216454A1 (en) | Coupling wide memory interface to wide write back paths | |
WO2017093307A1 (en) | Data processing | |
JP2009508180A (ja) | マイクロプロセッサにおける効率的なサブプログラムリターン | |
US20110264892A1 (en) | Data processing device | |
KR101077425B1 (ko) | 효율적 인터럽트 리턴 어드레스 저장 메커니즘 | |
JP2007102333A (ja) | データ処理装置およびデータ処理方法 | |
JP2009054032A (ja) | 並列プロセッサ | |
US7437544B2 (en) | Data processing apparatus and method for executing a sequence of instructions including a multiple iteration instruction | |
JP4444305B2 (ja) | 半導体装置 | |
KR100636596B1 (ko) | 고에너지 효율 병렬 처리 데이터 패스 구조 | |
JP2003005954A (ja) | データ処理装置およびその制御方法 | |
JP2006285721A (ja) | 演算処理装置および演算処理方法 | |
JP3795449B2 (ja) | 制御フローコードの分離によるプロセッサの実現方法及びそれを用いたマイクロプロセッサ | |
JP5013966B2 (ja) | 演算処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090901 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110606 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110614 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20111018 |