(情報科学)技術的特異 ..
[2ch|▼Menu]
195:>>194
18/07/27 02:16:45.99 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
? ブロック内の推測
2.2.2 ブロック内での投機
  ry 3つのタイプ ry
? 述語推測は、 ry 。
述語投機は、述語の値を予測するために結合述語分岐予測子を使用する。
? 投機的ブロックが投機的ブロックによって変更される可能性のあるL1キャッシュから ry 。
軽投機的なブロックが投機的ブロックによって変更される可能性のあるL1キャッシュから値をロードするとき、投機的ブロック内でメモリ投機が発生する。
? ry ・スペキュレーションが発生 ry 。
ロード・ストア・キュー(LSQ)によって、ロード・ストア識別子の低いストアが実行される前にロード ry 、ロード投機が発生します。
? ry 、誤った推測は、 ry 。
 3つすべての場合において、誤った投機は、命令ブロック全体の再実行を必要とする。
これは比較的軽量であり、すべてのオペランドバッファ内の有効ビットを無効にし、ゼロオペランド命令を再ロードするだけでよい。
? 2.3 ry と頻度
2.3 面積と周波数
 ChipEstimate InCyte [4]と業界平均の65nmプ ry 、E2プロセッサのエリアモデルを開発 ry
。設計パラメータとコンポーネント領域を表1 ry 。 >>194
各E2コアにはL1キャッシュを含む3.87 mm2 ry
?  InCyteのバージョンでは、頻度の見積り ry 。
 InCyteの我々のバージョンでは、周波数見積りは利用できません。
しかし、マイクロアーキテクチャは、大規模でグローバルな構造を持たず、チップ全体にわたる分散制御 ry
。このため、E2は65nmで600?1000MHzの標準ARMマルチコア ry と同等の周波数 ry 期待 ry [2]。
3. 実行パイプライン
 E2の実行は、命令フェッチ、実行、コミットの3つの主要段階 ry
、最初にスカラーモードで動作するときの各ステージの動作について説明し、次 ry ベクトルモードの違い ry
3.1 フェッチ
 E2と従来のアーキテクチャとの主な違いの1つは、E2が単一命令を連続的にフェッチするのではなく、一度に多くの命令をフェッ ry 。

196:>>195
18/07/27 02:22:41.77 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 4
? 命令最大128命令のブロック ry 一度にフェッチ ry 。
総合計128以内の命令を持つブロックがL1命令キャッシュから一度にフェッチされ、命令ウィンドウにロードされます。
命令は、ブロックコミット(または、ry 3.3.1 ry 、おそらく長くなる)まで、ウィンドウに常駐しています。
 物理コアは、同時に1つの128命令ブロック、2つの64命令ブロック、または4つの32命令ブロックをウィンドウ内でサポートします。
命令ブロックは、ブロック内の命令数、特殊ブロック動作用のフラグ、およびブロックによって書き込まれたグローバルレジスタを符号化するビットベクトルおよび使用されるストア識別子を含む128ビットブロックヘッダから始まる。
命令は32ビット幅であり、一般に少なくとも4つのフィールドを含む:
? ry 数とともに実行する命令。
* オペコード[9ビット]: 受け取る入力オペランドの数付きで実行する命令。
* 述語[2ビット]: 命令が述語ビットで待機する必要があるかどうか、およびそのビットがtrueまたはfalseの場合に実行するか ry
* ターゲット1 [9ビット]: 命令の結果のコンシューマの識別子。コンシューマがレジスタの場合、このフィールドはレジスタ番号です。
コンシューマが別の命令である場合、このフィールドにはコンシューマの命令番号(オペランドバッファへのインデックス ry )と、結果がオペランド0、オペランド1、または述語として使用されるかどうかが含まれます。
? ry 即時[9ビット]: ry 即時命令 ry 。
* ターゲット2 /即値[9ビット]: 2番目の命令ターゲット、または即値命令の定数値のいずれか。
 命令ウィンドウは4つの等しいバンクに分割され、各バンクは1サイクルにつき2つの命令をロードする。
定数生成命令などの入力オペランドを必要としない命令は、命令番号をレディキューにプッシュ ry 直ちに実行 ry スケジューリング ry 。

197:>>196
18/07/27 02:29:09.72 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
3.2 実行する
 ry 、レディキュー ry 番号を読 ry 開始 ry
。オペランド、オペコード、および命令ターゲットフィールドは、ALU、レジスタファイル(読み出し命令用)、またはロードストアキュー( ロー ry ア用)のいずれかに転送されます。
? 、結果が(もしあれば)適切
ターゲットフィールドは、結果(もしあれば)を適切なオペランドバッファ(または書き込みの場合はレジスタファイル)に戻すために使用されます。
?  結果がオペランドバッファに転送されると、 ry 。
 結果がオペランドバッファに戻されると、ターゲットとなる命令がチェックされ、どの入力が必要であり、どのオペランドが既に到着しているかがわかります。
命令のすべてのオペランドが到着した場合、命令番号がレディキューに ry
。ブロックが完了するまで、 ry 継続 ry
。 他のEDGEやデータ・フロー・アーキテクチャーと同様に、メモリー操作が命令型言語 ry 順序 ry 確実に従うように、ロードとストアに特別な処理が必要です。
? ry 方法を使用します。 ry 。
E2は[10]で説明した方法を使用し、コンパイラはシーケンシャルメモリセマンティクスを実施するためにマイクロアーキテクチャが使用するプログラム順序を示すシーケンス識別子で各メモリ操作をエンコードします。
? プレディケートのためにブロック内のすべての命令が ry 。
予測のためにブロック内のすべての命令が必ず実行されるわけではないため、 ry ブロックの完了を検出する必要 ry
? ry (1)唯一の分岐 ry 。
ブロックは、(1)一つ ( 又唯一 ) の分岐が実行されたとき、および(2)外部状態を変更するすべての命令(レジスタ書き込みおよびストア)が実行されたときに完了したとみなされる。
? ry criteria(2)が満たされた ry 。
コンパイラはレジスタの書き込みとストア識別子を命令ブロックヘッダにエンコードし、マイクロアーキテクチャが上記(2)の判定が満たされたときを識別できるようにします。

198:>>197
18/07/27 02:33:17.48 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
3.3 コミット
 実行中、命令はアーキテクチャ状態を変更しません。
代わりに、すべての変更がバッファリングされ、ブロック完了時に一緒にコミットされます。
? ry 最も低いシーケンス識別子 ry 。
コアがコミット・フェーズに入ると、レジスタ・ファイルはすべてのレジスタ書き込みで更新され、ロード・ストア・キュー内のすべてのストアは、最小のシーケンス識別子で始まるL1キャッシュに送信されます。
すべてのレジスタ書き込みおよびストアがコミットされると、コアは同じ論理プロセッサ内の他のすべてのコアにコミット信号を送信します。
3.3.1 リフレッシュ
 リフレッシュと呼ばれる重要なコミット最適化の1つは、命令ブロックが自身に分岐するときに発生します。
命令をL1命令キャッシュから再びロードするのではなく、命令をそのまま残し、オペランド・バッファおよびロード・ストア・キュー内の有効ビットのみをクリアする。
これにより、命令フェッチフェーズを完全にバイパス ry
? ry 実行されるたびに再生成されないようにする ry 。
定数を生成する命令は、オペランドバッファの値をリフレッシュ後も有効なままにしておき、命令ブロックが実行されるたびに再生成される事がないようにすることもできます。

199:>>198
18/07/27 02:34:47.64 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
要素サイズ  最小値(1 ALU)    最大値(4 ALU)
8ビット  8        32
16ビット  4      16
32ビット  2(1つのシングルfp)  8(4つのシングルfp)
64ビット  1 
表2: サポートされているベクトル演算

200:>>199
18/07/27 02:39:37.38 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
3.4 ベクトルモード
 ry 、各プロセッサコアをN個(このペーパーでは4つ)の独立したベクトルレーンに分割します。
ry 、命令は同じベクタ・レーン内の他の命令のみをターゲットにすることができ、オペランド・バッファとALU間にフル・クロス・バーを必要としません。
各レーンは、32エントリ命令ウィンドウ、2つの64ビットオペランドバッファ、16レジスタ、および1つのALUで構成 ry
。 E2は、64ビット、128ビット(256ビットにパディングされた)、および256ビット幅のベクトルに対するベクトル演算 ry
。各ALUは、8つの8ビット、4つの16ビット、または2つの32ビット・ベクタ・オペレーション ry
? ry 1コアあたり最大32 ry 。
4つのALUにより、E2は1コア1サイクルあたり最大32のベクトル演算 ry
。 64ビット・ベクタ・オペレーションは単一のALUを使用し、128ビット・オペレーションと256ビット・ベクタ・オペレーションは4つのALUすべて ry
。表2に、各ベクトル長とデータ要素サイズでサポートされる並列ベクトル演算の数 ry 。 >>199
 ベクトル命令を含む命令ブロックは、各ベクトルレーンの命令ウィンドウのサイズである32命令に制限される。
レーン1で発行されるベクトル命令は、他の3つのレーンで自動的に発行され、スカラー命令は常にレーン1に割り当てられます。
?  ry 形成するために別名が付けられます。
 ベクタモードでは、64個の64ビット物理レジスタ(R0R63)に16個の256ビットベクタレジスタ(V0V15)を形成するためにエイリアスされます。
物理レジスタファイルを4つのバンクに分割して、ベクトルの単一サイクルアクセス ry
? 3.4.ベクトル ry
3.4.1 ベクトルモードでのメモリアクセス
 E2コアは、256ビットのチャンクで動作し、中小長のベクトルでデータレベルの並列処理を効率 ry
? より大きなベクトルでの操作は、効率的なリフレッシュモードを使用して命令フェッチと定数の生成(セクション3.3)をバイパスするループ内の複数の命令ブロックを使用して実行されます。
ループ内の複数の命令ブロックでのより大きなベクトル操作に於ては、効率的なリフレッシュモードを使用する事で命令フェッチと定数の生成がバイパスされます(セクション3.3)。

201:>>200
18/07/27 02:41:44.47 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 5
 複数の命令ブロック間で大きなベクトルを分割すると、同じベクトルの隣接するチャンクのロード間に遅延が発生する可能性 ry 。 ry 。
この遅延を軽減するために、E2はメモリインタフェースコントローラ(MIC)と呼ばれる特殊なユニット ry
。 MICはL1データキャッシュの制御を引き継ぎ、キャッシュの一部をプリフェッチストリームバッファに変更します[8,11]。
ストリームバッファは、次のベクトルロードのアドレスを予測し、そのデータをキャッシュに早期に持ち込む。
これにより、後続の命令ブロックのベクタロードが常にL1キャッシュにヒット ry
?   ry 従来のキャッシュとして動作 ry 。
 ベクトルおよびスカラー演算は命令ブロックで混合されるので、キャッシュの一部は依然として従来型キャッシュとして動作する必要があります。
? ry 半減させますか? それらの方法をスト??リームバッファ用のメモリに変換する。
キャッシュのサイズを半分にするのではなく、キャッシュのセットアソシアティビティを半減させますか? つまりそれらのウェイをストリームバッファ用のメモリに転換する。
ベクタロード時に、キャッシュはストリームバッファをチェックします。
スカラのロードとストアでは、チェックするセットの数は少なくなりますが、キャッシュは同じ方法でキャッシュをチェックします。
?  ry 、ブロックコミットまでストリームバッファにバッファされ、その時点 ry 。
 ベクタストア命令は、ストリームバッファにバッファされ、ブロックコミット時点でメインメモリに直接書き込まれます。

202:yamaguti
18/07/27 02:46:28.11 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
URLリンク(search.yahoo.co.jp)
URLリンク(google.jp)

203:>>201
18/07/27 02:47:07.02 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
4. 例:RGBからYへの変換
 このセクションでは、E2でプログラムをベクトル化 ry 例 ry 。
図2は、カラー画像をグレースケールに変換するために一般的に使用されるRGBからYへの輝度変換のためのCコードおよび対応するベクトル化されたアセンブリを示す。
1 // numVectors > 0
2 // y = r * .299 + g * .587 + b * .114;
3 void rgb2y(int numVectors,
4   __vector float *r, __vector float *g,
5   __vector float *b, __vector float *y)
6 {
7 __vector float yr = { 0.299f, 0.299f,
8   0.299f, 0.299f };
9 __vector float yg = { 0.587f, 0.587f,
10   0.587f, 0.587f } ;
11 __vector float yb = { 0.114f, 0.114f,
12   0.114f, 0.114f };
13
14 for (int i = 0; i < numVectors; i++)
15   y[i] = r[i] * yr + g[i] * yg + b[i] * yb;
16 }
17
18 _rgb2y:
19   read t30, r3  // numVectors
20   read t20, r4  // next rのアドレス
21   read t21, r5  // 次のgのアドレス
22   read t22, r6  // 次のアドレスb
23   read t32, r7  // yのアドレス
24   read t31, r8  // i
25   read t1, v0  // vector yr
26   read t3, v1  // ベクトルyg
27   read t5, v2  // vector yb
28

204:>>203
18/07/27 02:49:23.89 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
29 // RGBからYへの変換
30   vl t0, t20 [0]  // ベクトルロード
31   vl t2, t21 [1]
32   vl t4, t22 [2]
33   vfmul t6, t0, t1  // ? ベクトルfp mul  ベクトル 乗算 fp
34   vfmul t7, t2, t3
35   vfmul t8, t4, t5
36   vfadd t9, t6, t7  // ? ベクトルfp add  ベクトル 加算 fp
37   vfadd t10, t8, t9
38
39 // 結果をYに格納する
40   multi t40, t31, #32
41   add t41, t32, t40
42   vs 0(t41), t10 [3]  // ベクトルストア
43
44 // ループテスト
45   tlt t14, t31, t30
46   ret_t<t14>
47   br_f<t14> rgb2y
48   addi r8, t31, #1
49   addi r4, t20, #32
50   addi r5, t21, #32
51   addi r6, t22, #32
図2: ベクトル化されたRGBからYへの輝度変換のためのC ry およびE2アセンブリリスト。

205:>>204
18/07/27 02:55:53.80 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
? ry 三重線を有する。
画像の各ピクセルは、赤、緑、および青の色成分に対応する三重要素を有する。
輝度(Y)は、各RGB値に定数を掛け、3つの結果を合計 ry
? ry 、並行して並列化することができます。
このプログラムは、各変換が独立しているため、並行して複数の変換を実行するために、並列化することができます。
4.1 Cソース
?  ry 、これらのベクトルへのポインタ、 ry Yへのポインタ、変換するベクトルの数 ry 。
 各RGBコンポーネントはベクトルで表され、これらの三つのベクトルへのポインタ、事前に割り当てられた結果ベクトルYへのポインタ、そして変換するベクトルの数が引数として関数に渡されます(行4-5)。 >>203
変換の定数もベクトルに格納されます(7-12行目)。
各ベクトルは256ビット幅で、個々のデータ要素は32ビット単精度浮動小数点型なので64ビットにパディングされます。
変換は単純なforループを使用して行われます(1416行目)。
? この例 ry 、ループを展開してブロックを埋めるわけではありません。
例を単純化するために、ループ展開でブロックを埋める事を避けます。
4.2 アセンブリ
 アセンブリリストは、1851 ry 。 >>203-204 >>203 >>204
? ry 、新しいブロックはすべてのラベル(ライン18)で開始されます。
命令はコンパイラ(この例では1つのブロック)によってブロックにグループ化され、全てのラベルは新しいブロックの先頭を意味します(ライン18)。
ry 、ブロックをアトミックにフェッチ、実行、およびコミットします。
慣習的には、スカラーレジスタを表すためにRn、ベクトルレジスタを表すVn、テンポラリオペランドを表すTn ry
? ry 、すべてのブロックで参照できるグローバル状態の一部です。
スカラーレジスタとベクタレジスタは、全てのブロックでグローバルステートとして参照できる構成要素です。
? ただし、一時的なオペランドは、 ry 表示されます。
但し、テンポラリオペランドは、定義されたブロック内でのみ参照可能です。
? ry 19行目???卸行目 ry 。
グローバルレジスタファイルから読み取ることができる命令は、レジスタREAD命令(19行目 - 27行目)のみです。
ただし、ほとんどの命令はグローバルレジスタファイルに書き込むことができます。

206:>>205
18/07/27 02:57:32.83 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
 ベクトル命令は 'v'で始まります(行30-37と42)。 >>204 >>203-204 >>203
すべてのロード命令とストア命令には、ロード・ストア識別子が割り当てられ、シーケンシャル・メモリ・セマンティクスが確実に行なわれます(3032行目と42行目)。
? これは、割り当てられた負荷ID0は、ID1のストアの前に ry 。
ここで割り当てられた処理ID0は、ID1のストアの前に完了する必要があります。
? ry 見ることができない。
 ほとんどの命令は述語になり得、述語は定義されたブロック内でしか参照できない。
述語命令は、述語命令に符号化された極性と比較される真または偽を表すオペランドを取る(_tおよび_fで示される)。
45行目のテスト命令は、受信命令(行4647)が自身の符号化された述語と比較する述語を作成する。
一致する述部を持つ命令だけが実行されます。

Page 6
 ブロックは最大で128個のスカラ命令に制限されています。
ベクトル命令を使用する場合、ブロックは合計32個のスカラ命令とベクトル命令に制限されます。
? には27種類 ry 。
ブロック_rgb2yには計 27 個のスカラー命令とベクトル命令が混在しています。

207:>>206
18/07/27 03:03:38.97 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
サイクル  1 2 3 4 5 6 7 8 9 1011121314151617
FETCH    IF IF IF IF
READ     R R R R R
READ     R R R R
MEM     L L L S
EX     A A A M M M M M M M M M A A B
EX     M A T M M M M M M M M M A A A
EX     M M M M M M M M M A A
EX     M M M M M M M M M A A
図3: 図2の1つの可能なスケジュール。

208:>>207
18/07/27 03:09:30.30 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
? 4.3 指導スケジュール
4.3 命令スケジュール
 図3は、図2の例の1つの可能なスケジュー ry 。 >>207
我々は、3サイクルの32ビット浮動小数点乗算を仮定し、すべてのロードがL1キャッシュでヒットし、3サイクルが必要となる。
ry 1サイクルにつき8命令をフェッチ ry 、27命令ブロック ry 4サイクル ry
。サイクル1では、8つのレジスタ読み出し命令がフェッチされ、これらの命令は依存性がないので、次のサイクルですべて実行 ry
? すべてのグローバル・レジスタを読み出すために5サイクルを必要とする1サイクルにつき2回のレジスタ・リードが実行できます。
1サイクルに付き 2 つのレジスタの読出しが実行でき 5 サイクルですべてのグローバル・レジスタを読出せます。
サイクル2では、レジスタR4(20行目)とR8(24行目)が読み出され、ベクタロード(30行目)、即値乗算(40行目)、および即値(48行目)命令に送られます。 >>203-204 >>203 >>204
これらの命令はそれぞれ1つのオペランドで待機しているため、すべて準備ができてサイクル3で実行を開始します。
サイクル17でブロックがコミットする準備ができるまで、ry 継続
5. 結論
?   ry 、E2アーキテクチャについて説明しましたか? 高性能な電力を効率的に達成するために設計されたExplicit Data Graph Execution(EDGE)ISAを利用した新しい動的マルチコア。
  この論文では、E2アーキテクチャ -- 演算性能が高く電力を効率的に達成するために設計されたExplicit Data Graph Execution(EDGE)ISAを利用した新しい動的マルチコアに付いて説明しました。
EDGEアーキテクチャとして、E2はデータフローの実行と攻撃的な投機によって命令レベルの並列 ry
、ベクトルとSIMDのサポートによって、データ・レベルの並列 ry 説明 ry
。このベクトルのサポートにはスカラー命令が散在しているため、E2は従来のベクトルプロセッサよりも柔軟性があり、従来のスカラーアーキテクチャよりも優れています。
?   ry 、SystemCとMicrosoft Phoenixソフトウェアの最適化と分析フレームワークで新しいコンパイラバックエンドを使用してE2用の ry 。

209:>>208
18/07/27 03:12:18.38 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
 我々は、最適化と分析のフレームワークであるMicrosoft Phoenixソフトウェア付きの新しいコンパイラバックエンドと SystemC とを使用して E2用のアーキテクチャシミュレータを開発しました[1]。
? 、産業強度コンパイラ ry 。
ry 、我々の産業強度コンパイラと組み合わせることで、アーキテクチャの詳細な調査と評価を実行できるサイクル精度の高いFPGA実装を開発中です。
? ry 先行しています。
 多くの課題が待受けています。
アクセラレータとして説得するためには、GPUや専用ベクトルプロセッサなどの特殊なアクセラレータよりも優れた性能、電力効率、プログラマビリティ ry
。 E2は汎用プロセッサとしても優れている可能性 ry 。その場合、新しいISAへの移行を正当化するために、現在の静的マルチコア・アーキテクチャに比べて十分な電力/性能 ry
。 E2のパフォーマンスと電力効率は、コアを動的に構成および分解する能力を基盤としているため、動的構成を管理するための正しいポリシーとメカニズムには慎重な検討 ry
? ry プログラマーが基盤となるハードウェアについて推論 ry 。
理想的には、コンポジションに関するすべての決定をランタイムシス ry 、プログラマがこのハードウェアの根本に付いて推論することを完全に免れます。
 最後に、組み込みデバイスからデータセンターまで、E2のパワーとパフォーマンスのトレードオフの能力が役立つさまざまなアプリケーションドメインがあります。
今後数か月 ry 電力性能 ry 調査

210:>>209
18/07/27 03:14:44.39 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
6. 参考文献
[1] Microsoft Phoenix。
URLリンク(research.microsoft.com)
[2] ARM。 Cortex-A9 MPCoreテクニカルリファレンスマニュアル、2009年11月
[3] D. Burger、SW Keckler、KS McKinley、M. Dahlin、LK John、C. Lin、CR Moore、J. Burrill、RG McDonald、W. Yoder、およびTRIPSチーム。 EDGEアーキテクチャを使用したSilicon Endへのスケーリング IEEE Computer、37(7):44?55、2004年7月。
[4]ケイデンス。 Cadence InCyte Chip Estimator、2009年9月。
[5] H. EsmaeilzadehおよびD. Burger。.階層的制御予測:積極的な予測のサポート。.マルチコアアーキテクチャにおけるシーケンシャルプログラムの並列実行に関する2009ワークショップの講演会、2009年。
[6] MD HillとMR Marty。 マルチコア時代のアムダールの法則。 IEEE COMPUTER、2008。
[7] E.?Ipek、M. K?rman、N. K?rman、およびJF Mart?ez。 コア・フュージョン:チップ・マルチプロセッサにおけるソフトウェア・ダイバシティの適応。 コンピュータアーキテクチャに関する国際シンポジウム(ISCA)、サンディエゴ、CA、2007年6月。

211:>>210
18/07/27 03:15:58.77 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
? [8] ry 小さな完全連想キャッシュ ry 。
[8] NP Jouppi。 小さなフルアソシエイティブキャッシュとプリフェッチ・バッファを追加することで、ダイレクト・マップ・キャッシュのパフォーマンスを向上させます。 SIGARCH Computer Architecture News、18(3a)、1990を参照されたい。
? [9] ry マイクロシンポジウム ry 。
[9] C.Kim、S.Sethumadhavan、D.Gulati、D.Burger、M.Govindan、N.Ranganathan、およびS.Keckler。 構成可能な軽量プロセッサ。.第40回IEEE / ACMマイクロアーキテクチャ国際シンポジウム議事録、2007年。
[10] S. Sethumadhavan、F. Roesner、JS Emer、D. Burger、およびSW Keckler。 遅延バインディング:順序なしロード・ストア・キューを使用可能にします。 2007.第34回国際コンピュータシンポジウム講演予稿集、347357頁、ニューヨーク、 NY 、米国、2007年。 ACM。
? [11] ry 国際シンポジウム ry 。
[11] T.シャーウッド、S。セア、B.カルダー。 予測子指示ストリームバッファ。 In Proceedings of the 33rd Annual ACM/IEEE International Symposium on Microarchitecture, 2000.第33回ACM / IEEE国際マイクロアーキテクチャシンポジウム講演予稿集、2000年。
[12] A.スミス。 明示的なデータグラフのコンパイル。 博士論文、テキサス大学、オースティン、2009年。

212:>>184-211
18/07/27 03:21:15.54 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
>>184-211
URLリンク(theregister.co.uk)
URLリンク(gigazine.net)
URLリンク(web.archive.org)

>478 山口青星 160930 1929 /EmvfkU+
:
>           意味スレッド有機分散普遍浸透
>479 478 160930 1931 /EmvfkU+
:
>> マルチ PC 的スーパスカラ マルチ PC 的順序外実行
>>>>>>>01> ↓
>>>01> フェイルレストランザクション ( 普遍浸透有機スレッド Aperios BeOS PalmOS6 DfBSD )
>>>>>>>01> ↓
>>>>>01> フェイルレストランザクションベース細粒度分散 VM
>>>>>>01>
>>>>>>01>
>>v1> メインメモリ細粒度ページ ( キャッシュライン投影 ) ※1
>>v1> ↓
>>>>>>>>>01> 細粒度ページ単位普遍マルチスレッド ( 完全掌握 ) ※2
>>v1> ↓
>>>>>>>>>01> キャッシュ対応疑似分散 UMA ( コヒーレントレスコヒーレント 浸透スレッド ) ※3
>>v1> ↓
>>>>>>>>>01> 透過可視マルチプロセッサベース論理物理ユニプロセッサ ( 256KB-SPE 込 ) ※4
>>v1>
>>v1> ↓↑ ( VM 策 ↑ / ↓ 環境策 1 )
>>v1>
:

213:>>212
18/07/27 03:23:10.80 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
>>184-212 >>212
>480 479 161001 2229 hw5iBIwd
>>>>>>>>7> ※1 ROM 化オブジェクト 多段実身仮身 TRONCHIP キュー ( MMU )
>>>>>>>>7> → 自律 機能メモリ
>>>>v>
>>>>v> ※2 選別 波及 浸透 仮身 高低 細胞
> 競合自動回避 分配済オブジェクト投影 ( 必然分配 上流 Ru?y )
>>>>>>>>> API 内外 鏡像 → API 内部 API 外部 ( 内宇宙 外宇宙 )
>>>>>>>>n>
>>>>>>>>>01> ※3 BeBox : キャッシュ非対応 ( 環境 )
>>>>>>>>>71>
>>>>>>>>>01> ※4 MPU 機構直交融合動的普遍オーバライド
>>>>>>>><71> ( 加算器 レジスタ トラップ・ベクタ・ブレークポイント )
>>>>>>>>>71>
>>>>>>>>01> ※5 Rite : スタック 分散 ( Amoeba : 生バイナリ )
>>>>>>01>
:
>485 478 161006 2307 sOXXCC59
:
>>>>><7> 細粒度スレッドレベル部品分散 VM / MTRON WinnyOS ( Aperios/MuseOS )
:

214:>>213
18/07/27 03:25:24.36 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
>>184-213 >>212-213
>487 486 161008 1739 7/TdBlDM
:
>>>>>>>><71> ↓
>>>>>>><7> 有機無機ハイブリッドコンピュータ ( 有機分子 返り値 互換 )
>>>>>>>><71> ↓
:
>502 478 161016 1447 +gGlHDwt
:
>>>>><71> AAP/SPE AI/AL クラスタ
>>>>>>>><71> ↓
>>>>><71> AAP/SPE 有機コンパイル ( 自生 / 3D プリンタ )
>>>>>>>> 細粒度ライブラリベース回路 ( 最適化 )
>>>>>>>> 平面有機回路 積層有機回路
>>>>>>>><71> ↓
:

215:>>214
18/07/27 03:42:18.14 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
>>184-214 >>212-214
 
>>164
> スレリンク(future板:478-509番)
>>177
> >>152-176
> スレリンク(future板:681番)-684# TRON SakamuraSensei
>スレリンク(future板:478番)-509# DensiZunou SekkeiZu Gaiyou
> >>110 >>44-46
>>184
>55
> >>46 訂正
> スレリンク(future板:525-527番)# 64bitARM Fuguai

216:>>215
18/07/27 03:54:39.51 pBBIx/eO.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
>>184-215 >>212-215
>>25-42 >>97-98
>>212
>意味スレッド有機分散普遍浸透
>ry ( 普遍浸透有機スレッド
>細粒度ページ単位普遍マルチスレッド ( 完全掌握 ) ※2
>キャッシュ対応疑似分散 UMA ( コヒーレントレスコヒーレント 浸透スレッド ) ※3
>>213
>※2 選別 波及 浸透 仮身 高低 細胞
>競合自動回避 分配済オブジェクト投影 ( 必然分配 上流 Ru?y )
:
>細粒度 ry 分散 VM /
>>214
>有機無機ハイブリッドコンピュータ ( 有機分子 返り値 互換 )

217:yamaguti
18/07/30 06:13:12.48 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
This is the html version of the file URLリンク(atrg.jp)
. Google

Page 1
ZettaScaler/PEZY-SCの紹介と今後の方向性
〜自動チューニング技術の現状と応用に関するシンポジウム発表資料
2016/12/26
PEZY Computing, K.K.

218:>>217
18/07/30 06:15:12.57 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 2
PEZYグループ
株式会社PEZY Computing (ペジーコンピューティング)
・独自メニーコア・プロセッサ開発
・同汎用PCIeボード開発
・同独自システムボード開発
・同アプリケーション開発
・半導体2.5次元実装技術開発
・ウェハ極薄化応用技術開発
創業:2010年1月  社員数:23名
UltraMemory株式会社 (ウルトラメモリ)
・超広帯域独自DRAM開発
・DRAM積層技術開発
・磁界結合メモリIF開発
・ウェハ極薄化応用技術開発
・広帯域、高速DRAM開発
・最先端汎用DRAM受託開発
創業:2013年11月  社員数:41名
株式会社ExaScaler (エクサスケーラー)
・液浸冷却技術開発
・HPC液浸システム開発
・液浸スパコンシステム開発
・液浸冷却水槽販売
・液浸冷却システム販売
・液浸冷却用ボード類販売
創業:2014年4月  社員数:13名

219:>>218
18/07/30 06:16:03.52 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
PEZY Computing:メニーコア・プロセッサ
UltraMemory:超広帯域積層カスタムDRAM
ExaScaler:液浸冷却システム
? 組み合わせることにより、最終システムとしてスーパーコンピュータを開発
? 各社の要素技術を個別に製品展開

Page 3
主な内容
? ZettaScaler1.x/PEZY-SCの概要
? プログラミング概要
? 今後の展開
? その他の話題

Page 4
ZettaScaler1.x/
PEZY-SCの概要

220:>>219
18/07/30 06:18:31.10 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 5
ZettaScaler-1.xシステム
Suiren(睡蓮) ZettaScaler-1.5
2014.10Install 2016.5 Upgrade (32node to 48node)
Shoubu(菖蒲) ZettaScaler-1.6
2015.6Install 2016.5 Upgrade
Suiren Blue(青睡蓮) ZettaScaler
2015.5 Install 2016.5 upgrade
Ajisai(紫陽花) ZettaScaler-1.6
2015.10Install 2016.5Upgrade
Satsuki(皐月) ZettaScaler-1.6
2016.5 Install
Sakura(さくら) ZettaScaler-1.6
2016.5 Install

221:>>220
18/07/30 06:19:21.12 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 6
Top500
? 世界で最も高速なコンピュータシステムの上位500位までを定期的にランク付けし、評価するプロジェクト。
1993年に発足し、スーパーコンピュータのリストの更新を年2回発表
? 単位:FLOPS(Floating Operation per Second)浮動小数点命令を1秒間に何回実行するか?
? ハイパフォーマンスコンピューティング(HPC)における傾向を追跡・分析するための基準を提供することを目的とし、
LINPACKと呼ばれる行列計算ベンチマークによりランク付けを行っている。
? 大規模システムを構築するには資金力も必要
Green500
? 世界で最もエネルギー消費効率の良いスーパーコンピュータを定期的にランク付けし評価するプロジェクト
? 単位:FLOPS/W FLOPSあたりの消費電力。
? スーパーコンピュータにおけるグリーンITの指標の1つともされ、
日本では「スーパーコンピュータの省エネ性能ランキング」などと呼ばれる事もある。
? 省電力、高効率実行の技術力が問われる

Page 7
Green500での成果
理研情報基盤センターに設置した菖蒲が 2015/6, 11, 2016/6の3期連続で首位
皐月も2位を獲得

222:>>221
18/07/30 06:20:27.16 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 8
ZettaScaler-1.xのキーテクノロジー
液浸冷却技術“ESLiC”
1,024メニーコアプロセッサ, “PEZY-SC”
液浸サーバー“Brick”高密度実装技術

223:>>222
18/07/30 06:21:08.85 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 9
菖蒲ZettaScaler-1.6システム
? ノード:1つのXeon に4個のPEZY-SCnp が接続されている
Intel Xeon E5-2618L v3
DDR4 LP 32GB DDR4 LP 32GB DDR4 LP 32GB DDR4 LP 32GB
PEZY-SCnp DDR4 32GB
PCIe Gen3 8Lane
PEZY-SCnp DDR4 32GB
PCIe Gen3 8Lane
PEZY-SCnp DDR4 32GB
PCIe Gen3 8Lane
PEZY-SCnp DDR4 32GB
PCIe Gen3 8Lane
PCH C612
DMI2
BMC
RS-232C
SPI
VGA
USB SATA SATA
Infiniband FDR
PCIe 8Lane
PEZY-SCnpはPEZY-SCの半導体部分は変更せずに パッケージとしての信号品質と電源品質を向上したもの

224:>>223
18/07/30 06:21:52.86 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 10
菖蒲ZettaScaler-1.6システム
? ブリック:4ノードの集合体
? 液浸層:16ブリックから構成
? 全体システム:5 液浸層から構成

Page 11

225:>>224
18/07/30 06:22:43.07 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
第2世代プロセッサ「PEZY-SC」
Name  PEZY-SC
製造プロセス  TSMC28HPM
コア性能
動作周波数  733MHz(Target)
キャッシュ  L1: 1MB, L2: 4MB, L3: 8MB
周辺回路
動作周波数  66MHz
IPs
内蔵CPU  ARM926 x 2  Cache L1:32KB*2, L2: 64KB
PCIe    PCIe Gen3 x 8Lane 4Port  (8GB/s x 4 = 32GB/s)
DDR    DDR4 64bit 2,400MHz 8Port  (19.2GB/s x 8 = 153.6GB/s)
コア(PE)数  1,024 PE
演算性能
3.0T Flops (単精度浮動小数点)
1.5T Flops (倍精度浮動小数点)
消費電力
70W (Leak: 10W, Dynamic: 60W)
46W@533MHz (PEZY-1以下)
パッケージ
DDR版  47.5*47.5mm (2,112pin)
Wide-IO版  20*60mm CSP (#pin: TBD)

226:>>225
18/07/30 06:23:33.00 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 12
PEZY-SCの特徴
? 高性能
  ? 8スレッドSMT(Simultaneous Multi-threading)
    ? 4スレッドを順番に切り替え x 2面
    ? 8スレッド分のレジスタファイルを用意
  ? Deep pipelining (16Stages)
  ? 潤沢なオンチップキャッシュ、メモリ
? 低消費電力、高密度実装
  ? 極端に高い周波数は狙わない
  ? 各PEはシンプルに
    ? In-order 2way SuperScaler
    ? 分岐予測なし
    ? キャッシュ間コンシステンシはソフトウェア責任
    ? 独自ISAによる必要命令の絞り込み

227:>>226
18/07/30 06:24:33.15 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 13
PEZY-SCのブロック図
ARM0  ARM1    PTILE  PTILE  PTILE  PTILE
Local Bus / Config Bus
PEZY-SC Core    DDR4C  DDR4C  DDR4C  DDR4C  DDR4C  DDR4C  DDR4C  DDR4C
RSTGen
CLKGen
INTC
SRAM
SPI
PIT
PIT
UART
WDT
GPIO
? PTILE: PCIe Gen3
? ARM926は2個搭載 役割分担に対する制約はない
  ? L1I 16KB / L1D 16KB / L2 32KB
  ? ITCM 16KB / DTCM 16KB
  ? MMU

228:>>227
18/07/30 06:25:31.86 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 14
PEZY-SCプロセッサ全体構成
3レイヤーの階層構造を持ったMIMD型メニコアプロセッサ
  (4PE x 4(village) x 16(city) x 4(prefecture) = 1024PE)
PE
Program Counter (8set)
L1 I- Cache (2KB)
ALU 4FpOps/Cycle
Register File 32b x 32w x 8set
Local Memory (16KB)
Village (4PE)
PE
PE
L1 D- Cache (2KB)
PE
PE
L1 D- Cache (2KB)
City ( 16 PE )
Special Function Unit
Village (4PE)  Village (4PE)
Village (4PE)  Village (4PE)
L2 I-Cache (32KB)
L2 D-Cache (64KB)

229:>>228
18/07/30 06:31:21.90 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Prefecture
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
L3 I-Cache (128KB)
L3 D-Cache (2MB)

230:>>229
18/07/30 06:32:07.83 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Prefecture
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
L3 I-Cache (128KB)
L3 D-Cache (2MB)

231:>>229-230
18/07/30 06:32:50.77 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Prefecture
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
L3 I-Cache (128KB)
L3 D-Cache (2MB)

232:>>229-231
18/07/30 06:33:48.30 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Prefecture
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
City (16PE)  City (16PE)  City (16PE)  City (16PE)
L3 I-Cache (128KB)
L3 D-Cache (2MB)

233:>>229
18/07/30 06:45:42.46 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
DDR4-I/F 64 bit 2400MHz  DDR4-I/F 64 bit 2400MHz

234:>>230
18/07/30 06:46:14.12 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
DDR4-I/F 64 bit 2400MHz  DDR4-I/F 64 bit 2400MHz

235:>>231
18/07/30 06:47:10.62 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
DDR4-I/F 64 bit 2400MHz  DDR4-I/F 64 bit 2400MHz

236:>>232
18/07/30 06:47:55.24 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
DDR4-I/F 64 bit 2400MHz  DDR4-I/F 64 bit 2400MHz

237:>>229-236
18/07/30 06:51:12.91 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
ARM926
Host I/F & Inter Processor I/F
Host I/F
PCI Express Gen3 x8
Host I/F
PCI Express Gen3 x8
Host I/F
PCI Express Gen3 x8
Host I/F
PCI Express Gen3 x8
UART
SPI BUS
GPIO

238:>>229-237
18/07/30 06:54:34.12 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 15
階層構造と同期メカニズム
? スレッドを階層管理
? 同期レベル(バリア同期)
  ? Level 0 :スレッドレベル、 PE内の0-3スレッド、または4-7スレッド
  ? Level 1 : PEレベル、PE内の8スレッド
  ? Level 2 : Villageレベル、4つのPEとL1キャッシュ
  ? Level 3 : Cityレベル、16のPEとL1/L2キャッシュまで
  ? Level 4 : Prefectureレベル、256のPEとL1/L2/L3キャッシュまで
  ? Level 5 : PEZY-SCレベル、1024のPEとL1/L2/L3キャッシュまで
Sync Level
0  Thread 0-3  Thread 4-7
1    PE  PE  PE  PE
      L1 Cache
2        Village  Village  Village  Village
          L2 Cache
3            City
              L3 Cache
4                Prefecture
5                  PEZYSC Core

239:>>238
18/07/30 06:55:38.03 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 16
オンチップキャッシュ
  level  Size(B)  Chip Total(B)  Way  Entry  Line 長(B)  接続
データキャッシュ
  L1  2K  1M  8  4  64  2PEに1つ
  L2  64k  4M  8  32  256  Ciry毎 L1 8 個に対して
  L3  2M  8M  8  256  1k  Prefecture毎 L2 16 個に対して
命令キャッシュ
  L1  2K  2M  8  2  128  PE毎
  L2  32K  2M  4  32  256  City毎 PE 16個
  L3  128K  512K  4  32  1K  Prefecture毎 L2 16 個
複数PE間のメモリコンシステンシはソフトウェア責任、 PE毎に16KBのローカルメモリを備える

Page 17
プログラミング概要

240:>>239
18/07/30 06:56:30.65 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 18
プログラミング対象
Xeon
  PEZY-SC
  PEZY-SC
  PEZY-SC
  PEZY-SC
    <演算リソース>
      ・1024個の演算コア(PE)
      ・1PEあたり8個のスレッド
    <メモリ>
      ・32GBのデバイスメモリ
      ・1PEあたり16KBのローカルメモリ

241:>>240
18/07/30 06:57:53.49 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 19
作成するプログラム
? 2種類のプログラムを作成する必要がある
  ? CPU上のプログラム(C++で記述)
  ? PEZY-SC上のカーネルプログラム(PZCLで記述)
    ※PZCL=カーネルプログラムを記述するPEZY独自仕様の言語
    コンパイラはllvmを用いている。
main関数呼び出し
  CPU プログラム
    起動  終了
      カーネルプログラム1
    起動  終了
      カーネルプログラム2
上図のようにCPUプログラムからカーネルプログラムを起動する

242:>>241
18/07/30 06:58:54.95 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 20
特殊な関数
? カーネルプログラムで利用可能な、PEZY-SC制御に必要な組み込み関数がある。
  ? sync_L1 (L1キャッシュにアクセスする単位でのスレッド同期)
  ? sync_L2 (L2キャッシュにアクセスする単位でのスレッド同期)
  ? sync_L3 (L3キャッシュにアクセスする単位でのスレッド同期)
  ? sync (sync_L3と同等)
  ? flush_L1 (L1キャッシュのフラッシュ)
  ? flush_L2 (L2キャッシュのフラッシュ)
  ? flush_L3 (L3キャッシュのフラッシュ)
  ? flush (flush_L3と同等)
  ? get_pid (PE ID取得)
  ? get_tid (PE内スレッドID取得)
  ? chgthread (PE内スレッドの表裏切り替え)

243:>>242
18/07/30 06:59:40.84 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 21
カーネルプログラムの構造
? 基本的な構造
  void pzc_foo(…)
  {
    ? PE ID取得(get_pid)
    ? PE内スレッドID取得(get_tid)
    ? 自スレッドに割り当てられた処理の実行
    ? 出力バッファフラッシュ(flush)
  }

Page 22
pzcAddサンプル
? カーネルは起動するとユニークな tid,pid を持って、 CPUから指定されたスレッド分実行される。
tid=0,pid=0
  void pzc_Add(float* a, float* b, float* c, int count)
  {
    int tid = get_tid();
    int pid = get_pid();
    int index = pid * get_maxtid() + tid;
    if(index >= count) return;
    c[index] = a[index] + b[index];
    flush(); // cache flush
  }

244:>>243
18/07/30 07:00:23.57 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
tid=1,pid=0
  void pzc_Add(float* a, float* b, float* c, int count)
  {
    int tid = get_tid();
    int pid = get_pid();
    int index = pid * get_maxtid() + tid;
    if(index >= count) return;
    c[index] = a[index] + b[index];
    flush(); // cache flush
  }

tid=7,pid=N
  void pzc_Add(float* a, float* b, float* c, int count)
  {
    int tid = get_tid();
    int pid = get_pid();
    int index = pid * get_maxtid() + tid;
    if(index >= count) return;
    c[index] = a[index] + b[index];
    flush(); // cache flush
  }
? 1つのPEには8スレッドが存在する
  ? スレッド数を128で起動した場合、128/8=16個のPEが実行される
? 8192を超えるスレッド数で起動する場合、CPUから複数回に分けて起動される

245:>>244
18/07/30 07:01:00.85 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 23
簡単な最適化の説明
? 前述のpzcAddサンプルを用いて、PEZY-SC内での簡単な最適化の説明を行う
? ここでは以下のような最適化を行っている
  ? カーネル呼び出しのオーバヘッドの削減
  ? chgthreadを用いたレイテンシーの隠蔽
  ? 同期を用いたキャッシュアクセスの効率化

Page 24
オーバヘッド削減(1/2)
? 以下のコードをスレッド数=要素数として起動する場合、
8192を超えるサイズを処理しようとした場合にカーネルが複数回起動されるため、カーネル呼び出しのオーバヘッドが増加する
void pzc_Add(float* a, float* b, float* c, int count)
{
  int tid = get_tid(); // thread ID (0 - 7)
  int pid = get_pid(); // PE ID
  int index = pid * get_maxtid() + tid;
  if(index >= count) return;
  c[index] = a[index] + b[index];
  flush(); // cache flush
}

246:>>245
18/07/30 07:03:04.06 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 25
オーバヘッド削減(2/2)
? 以下のようにカーネルコードを修正し、CPUからの呼び出し時のスレッド数を固定にしても、
1回のカーネル呼び出しで全要素の処理を行えることとなる。
? これによってオーバヘッドを減らすことができる。
void pzc_Add(float* a, float* b, float* c, int count)
{
  int tid = get_tid(); // thread ID (0 - 7)
  int pid = get_pid(); // PE ID
  int offset = pid * get_maxtid() + tid;
  int step = get_maxtid() * get_maxpid();
  for(int pos = offset; pos < count; pos += step) {
    c[pos] = a[pos] + b[pos];
  }
  flush();
}

247:>>246
18/07/30 07:03:40.68 wOzVCFyH.net BE:138871639-2BP(0)
URLリンク(img.5ch.net)
Page 26
寄り道:CPUエミュレート
? このようにカーネルの中でループさせることは別のメリットもある。
? CPUで1スレッドでの動作として、この関数を同じように動作させることができる
→ソースを共有したデバッグに有効
void pzc_Add(float* a, float* b, float* c, int count)
{
  int tid = get_tid(); // thread ID (0 - 7)
  int pid = get_pid(); // PE ID
  int offset = pid * get_maxtid() + tid;
  int step = get_maxtid() * get_maxpid();
  for(int pos = offset; pos < count; pos += step) {
    c[pos] = a[pos] + b[pos];
  }
  flush();
}
CPUでは
  get_tid() … 常に0
  get_pid() … 常に0
  get_maxtid() … 1
  get_maxpid() … 1


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

795日前に更新/314 KB
担当:undef