Tokyo Research Laboratory

講演の概略と目次
 概略

マルチコアプロセッサのプログラミングに求められるもの- スレッドプログラミング技術を中心として 2007年2月23日
日本アイ・ビー・エム（株）東京基礎研究所
阪本 正治

ゲーム産業開発者のためのスキルアップ講
座– IBM は長年データプロセッシングの領域で最先端の技術を研究してまいりました。 最新の動向としては、マルチコアプロセッサー、特にヘテロジーニアスなマルチコアに対するプログラミング技術が最先端として注目されています。IBMは、ソニー株式会社様、株式会社ソニー・コンピュータエンタテインメント様および東芝様と共に、Cell
Broadband EngineTMと呼ばれる次世代のマイクロプロセッサーを開発いたしました。
それは、次世代のメディアプロセセッシングで要求される膨大な計算処理を、複数の演算コアの同時並行動作によって可能にします。しかしながら、アプリケーション・プログラムからマルチコアプロセッサーの能力を活用するためには、複数のコアを有効活用した並列処理や、データの入出力を考慮に入れたプログラミングが必須となります。本講
演では，マルチコアプロセッサの能力を遺憾なく発揮させるためのプログラミング戦略について説明いたします。

 Agenda– はじめに
– Cell Broadband Engine HW概説
– 並列処理の基礎– Cell Broadband Engineでのマルチスレッドプログラミング– まとめ
Cell Broadband Engine is a trademark of Sony Computer Entertainment Inc.

© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

スケールアップからスケールアウトへ

従来型プロセッサーとの比較

 スケールアップ

Cell Broadband Engine– ＣＰＵやサーバー単体の性能を強化する
Blue Gene スケールアウト– ＣＰＵのコア数やサーバーの台数を増やして性能を上げる

AA

A

A

SPE

SPESPESPE

P
L2

A

x86 core

P
L1D$

L1I$

EIB

MIPS/WattP
C

C

C

C

C

C

L2

マルチコアを利用した場合

シングルコア

C

CCC

A A

CCCCCCCSPESPESPESPEA

A

A

A

A

L2$PL3$A A

A ActiveA

大規模 中規模 小規模
コア
コア アクセラレーター
コアMIPSPPEA A

Cell Broadband Engine
Blue GeneはIBM Corporationの商標。
© 2006 IBM Corporation

P Passive

複数のアクティブな「頭」を持つ疎結合（Decoupled)アーキテク
チャー

一つのアクティブな「頭」を持つ従来型アーキテクチャー© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

マルチコアプロセッサー
 ホモジーニアス型– 同じコアが複数搭載されたマルチコアプロセッサー

 ヘテロジーニアス型

Cell Broadband Engine ハードウェア概説– 異なるコアが複数搭載されたマルチコアプロセッサー• Cell Broadband Engineは、１個の64ビットのＰｏｗｅｒプロセッ
サー・コアと複数のSynergetic Processor Elementが搭載されているPowerPCは、IBM Corporationの商標です。

© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEのアーキテクチャー
SPEのアーキテクチャーSPEのアーキテクチャー
SPEのアーキテクチャー

Cell Broadband Engine の目指すところ
汎用CPU
汎用CPU

CellBroadband Engine

SPEのコンセプト
DSP/専用プロセッサ

OS

平均的に速いコア

SPE

仮想メモリ

キャッシュ

DMA

マルチスレッド

アドレス変換アドレス演算

レジスタ数 少制御命令

レジスタリネーム

アプリケーション

スカラ演算

ギャップ
平均的に速いコア(PPE)＋
演算が非常に速いコア群(SPE)

汎用CPU
汎用CPU
メインメモリアクセス

特定のことは非常に速いコア

UI

分岐予測

計算

Out of Order

OSOS

Graphics

Graphics

SPE nGraphics

スカラ演算

Broadband

Broadband

SPE m

Broadband

ベクタ演算

PPE

OS

ベクタ演算
(SIMD)

計算© 2006 IBM Corporation

レジスタ数 多PPEで対応ベクタ演算(SIMD)

計算に特化
＋
マルチコア

ギガヘルツ
SIMD : Single Instruction Multiple Data

マルチコア
© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

制御と計算に必要なテクノロジ

制御も計算も高速であるためには計算に必要なテクノロジ

制御に必要なテクノロジ
スカラ演算

多種多様な計算Out of Order

同じ計算の繰り返し

演算内容

キャッシュ

ランダムアクセス

メインメモリへのアクセス

シーケンシャル
アクセス

分岐予測

非常に多い

分岐の発生

少ない

スカラ演算

大容量レジスタOut of Order

DMA

キャッシュ

小容量レジスタ

ギガヘルツ

大容量レジスタ
DMA

アドレス変換(仮想メモリ)スレッド自身8つのSPE

小容量レジスタ

PPE

レジスタリネーム

レジスタリネーム
全てに適したテクノロジ

対立
トランジスタ数
大ギガヘルツ

ベクタ演算(SIMD)

マルチコア

分岐予測

アドレス変換(仮想メモリ)プロセス/スレッド プロセス/スレッド
管理者との関係計算に必要なテクノロジ

全てに適したテクノロジ

制御に必要なテクノロジ

ベクタ演算(SIMD)

適合
トランジスタ数
小マルチコアCell
Broadband Engine

計算特化のプロセッサを分離し、さらにマルチコア化することで汎用性と超高性能を同時に手に入れた

汎用CPU
汎用CPU

© 2006 IBM Corporation

Tokyo Research Laboratory© 2006 IBM Corporation

Tokyo Research Laboratory

SPEのアーキテクチャー
SPEのアーキテクチャー

SPEの特徴Cell Broadband Engineの内部構造
204.8Gflops
SPE
SPU

2命令同時発行

SPU

SPU

SPU

SPU

SPU

SPU

SPU

SXU

SXU

SXU

SXU

SXU

SXU

SXU

LS

LS

LS

LS

LS

LS

LS

LS

SMF

SMF

SMF

SMF

SMF

SMF

SMF

SMF

SXU

ローカルストア

16命令プリフェッチ

204.8GB/s

16B/cycle

128bitEIB (up to 96B/cycle)

256KB

oddパイプ
制御系

パイプライン化
SIMD

・・・・・

evenパイプ演算系

128entry

128本のレジスタ

メイン
メモリ

コード／データ兼用

25.6GB/s

16B/cycle

PPE

16B/cycle

PPU

広帯域DMA

L2

16B/cycle (2x)

MIC

BIC

Dual
XDRTM

FlexIOTM

L1 PXU

32B/cycle 16B/cycle

キャッシュミスが起きず、コヒーレンシの問題もなく、実行時間を予測しやすい

64-bit Power Architecture with VMX© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

並行(Concurrent) と並列(Parallel) 並行(Concurrent)
タスクA

並列処理の基礎タスクB

 並列(Parallel)
タスクA
タスクB

© 2006 IBM Corporation

Tokyo Research Laboratory© 2006 IBM Corporation

Tokyo Research Laboratory

マルチスレッドプログラミング

マルチスレッドプログラミングの利点と問題点

 シリアルな処理を行う通常のプログラムからコンカレントな処理を見つけ出し、スレッド化し、各コアに割付ける。

 利点– ターンアラウンド時間の短縮• 処理要求を出してから処理完了までの所要時間 -> 科学技術計算

シリアルプログラム– スループットの向上

コンカレント– 複雑な機能の実現• 単位時間当たりの処理能力の向上 -> 組み込みシステム• 異なる機能を異なるスレッドで処理する

 問題点– 複雑さが増す– デバッグの困難さ（race condition or deadlock)

２スレッド
3スレッド

© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

Amdahl則

データ並列とタスク並列

 複数のプロセッサを使ったときの理論上の性能向上の度合い 。

Ttotal (1) = Tserial + T parallel 1/(1-p)が並列化による速度向上の Ttotal ( N ) = Tserial +限界である。P=0.8なら５倍が限界。
speedup =Amdahl則
22p=20
18

p=0.5
p=0.6
p=0.8
p=0.9
p=0.98p=1.0

Speedup

1614
12108642012345678910 1112 1314 15

プロセッサ数16 1718 1920T parallelN データ並列– 独立したデータセットに対して並列に処理を実行する

 タスク並列– 独立したサブプログラムを並列に実行する

Ttotal (1)Ttotal ( N )T parallel
Ttotal (1)Ttotal (1)1=
Ttotal ( N ) 1 − p + pNspeedupE(N ) =N

speedup =© 2006 IBM Corporation

Tokyo Research Laboratory© 2006 IBM Corporation

Tokyo Research Laboratory

そのほかの検討事項
 粒度– 並列化するタスクの粒度は、大きい方が有利。
• ループでの並列化の場合には、最外側のループを並列化できると有利• 負荷の不均衡に注意

 同期– 排他制御でデータにロックされている場合や、次の処理に移る前に、他のスレッドの終了を待つ必要が生じる。データを共有せず、同期を減らすのが得策。

Cell Broadband Engineでのマルチスレッドプログラミング Race condition– 共有リソースであるデータへのアクセス順序によって、計算結果が変わることがある。このような状態をRace Condition (競合状態）と呼ぶ。
 Deadlock–複数のスレッドが互いの処理終了を待ち、結果としてプログラムが停止してしまうこと。
–デバッグが困難なことが多い© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
ト

PPEとSPEの役割分担

性能を引き出すポイント コアの演算特性を意識したタスク分割。
– 一般的には、PPEは処理全体を制御する役割を担い、SPEが計算処理を担う。

 SIMDに適したデータ配置

PPEに適したプログラム

SPEに適したプログラム

多種多様な
計算

同じ計算の繰り返し

演算内容

メインメモリへのシーケンシャルランダムアクセス
アクセス
アクセス

 分岐ミスの回避非常に多い 演算とDMAのダブルバッファリング

分岐の発生

少ない

プロセス/スレッド
スレッド自身管理者
プロセス/スレッドとの関係
複数スレッド可能
管理者は1つだけ SPEのプログラミングモデル

SPEを効果的に利用するためには同じ計算を繰り返すプログラムをSIMDで実装する
連続領域のDMA転送
なるべく分岐をつくらない

1SPE 1スレッドとし、なるべくコードを再ロードしない© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
ト

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
ト

SIMD演算とvector型

vector型

vector signed char
vector unsigned char
char 0 char 1 char 2 char 3 char 4 char 5 char 6 char 7 char 8 char 9 char 10char 11char 12char 13char 14char 15

halfword 0 halfword 1 halfword 2 halfword 3 halfword 4 halfword 5 halfword 6 halfword 7– sizeof() ・・・ 常に16を返す– = (代入) ・・・ 同一のベクタ型である場合のみ有効

vector floatvector signed int
vector unsigned int– & (アドレス) ・・・ 有効
word 1word 2

word 3– ポインタに対する + ・・・ 次のベクタを指す(16byte進む)

vector double
vector signed long longvector unsigned long long
doubleword 0– ポインタに対する * ・・・ ポインタの下位4bitをマスクしたアドレスからのロード/ストア。
※アラインされていないロード/ストアは組み込み関数で実現

doubleword 1

qword
quadwordmsb

 vector型に演算子による加減乗除(+,-,*,/,%など)は行えない 使用できる演算子は以下の通り

vector signed shortvector unsigned shortword 0© 2006 IBM Corporationlsb© 2006 IBM Corporation– キャスト ・・・ ポインタ同士はベクタÙベクタ、ベクタÙスカラ、どちらも可能 ※16byteアラインに注意© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイント

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トSIMDに適したデータ配置

SIMDに適したデータ配置

 16byteアラインメントを注意深く守る－ 16byte単位のLoad/Store－ 16byteアラインされたアドレス⎛ ax + by + cz + d ⎞ ⎛ a⎜⎟ ⎜⎜ ex + fy + gz + h ⎟ ⎜ e例) 三角形ポリゴンデータの表現と座標変換 ⎜⎟=⎜ iix+jy+kz+lb⎜⎟ ⎜⎜ mx + ny + oz + p ⎟ ⎜ ma⎝
⎠ ⎝アラインされたデータのリード

LS

Load

計算を考えると．．．

 データ配置もSIMDに最適化する－ 16byte単位のLoad/Store－ 16byteアラインされたアドレス

Load

効率的

a[0].x演算へ使用OKa[0].yca[0].z
SIMDの4つのデータに入れるのが自然だが．．．

演算へ使用OK

アラインされていないデータのリードLS

前半 Load後半 Load00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1516 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

a.x

a.ya.z1b.x

b.yb.z1c.x

合成a[1].xa[1].ya[1].zb[1].xb[1].yabefcgjnkoa[2].xa[2].ya[2].zd ⎞⎛ x ⎞⎟⎜ ⎟h ⎟⎜ y ⎟l ⎟⎜ z ⎟⎟⎜ ⎟p ⎟⎠⎜⎝ 1 ⎟⎠a[3].xa[3].ya[3].zb[2].x b[3].xb[2].y b[3].y・・・
Structure of Array (SOA)c.yc.z1
Array of Structure (AOS)b[0].xb[0].ybfijmn

効率的演算へ使用OK© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トSPEプログラミング
SPEプログラミング Æ 性能を引き出すポイ
ント演算とDMAのダブルバッファリング

分岐ミスの回避

バッファリングなし

 分岐そのものをなくす 分岐ヒント命令を使用する－ 比較命令と選択命令で条件付代入を実現する －gccの__builtin_expectを使用する－ hbr, hbra命令
if ( cond ) 処理a;
else
処理b;

if ( a > b ) x = a*2;
elsex = b*2;
2. 選択命令で代入

a0a1a0a1b0b1b0b1条件分岐開始

演算
SAÆRA

処理a

1111
0000

1の時はaを代入、0の時はbを代入
x0x1

分岐が消えた転送
S1ÆSA

__builtin_expect : 分岐しやすい方を指示する

0000

SelectS0

if ( __builtin_expect(cond, false)
false )
処理a;else
処理b; // 分岐のペナルティがない

条件分岐開始

処理b

演算
SAÆRA

ローカルストア
S1
S2

転送
RAÆR0

© 2006 IBM Corporation

S3

RA

R0

演算
SBÆRB演算
SAÆRA

R1
R2

メインメモリ

S0
転送
S1ÆSB

ローカルストア

転送
RAÆR0

SA

転送
S2ÆSA

SB

S3

RA

R0

転送
RBÆR1
転送
S3ÆSB

S1

RB

S2

R1
R2

転送

転送
RAÆR1

処理a

分岐ミスしにくい
コードになるSA

演算SAÆRAtime

1111

転送
S0ÆSA

処理b

分岐結果がわかるころには実行が進んでいる
Compareダブルバッファリン
グメインメモリ

R3

転送
S2ÆSA
まだまだ続く．．．

time

分岐を生成する通常の命令の代わりに…

1. 比較してマスクを生成

転送
S0ÆSA

演算 RAÆR2
SBÆRB

転送
RBÆR3

R3

短時間で完了© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トSPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トFunction Offload モデル

提案されているプログラミングモデル
 Cell Broadband Engineの柔軟なアーキテクチャは様々なアプリケーションの実現方法を可能にする 時間のかかる処理をSPEで処理– 下記は公開資料中で提案されているモデル– 簡単な変更で効果を実感しやすい– SDKにサンプルがあるものもある– 他のモデルへ展開する前のステップとするのもよい

PPEとSPEの連携に関するモデル

マルチSPEに関するモデル

SPEの起動に関するモデル• Function Offload モデル• Asymmetric Thread
Runtime モデル• Streaming モデル• Computation-Accelerationモデル• Asymmetric Thread
Runtime モデル• Pipeline モデル• SPU thread モデル• SPUlet モデル

SPEでのマルチタスクに関するモデル• ComputationAccelerationモデル• Pipeline モデル• Shared-Memory Multiprocessorモデル• Multi-thread モデル• Run-to-completion モデル• Job Queue モデル• User-Mode Thread モデル

PPEだけでは、処理能力が低い（=パイプが細い）ため、時間がかかる。 (※VMXを使わない場合)

 プログラミング方法– SDKライブラリを用いて、SPEスレッド作成、終了待機関数により実装する

その他のモデル

SPE同士の連携に関するモデル

ジョブ ・・・ 右から順に投入する• Device Extension モデル• SPU Plugins モデル※分類は一例。複数のカテゴリーに当てはまるモデルも多い– SDKに付属するIDL (InterfaceDefinition Language) ツールを使用して、 RPC (Remote Procedure Call)呼び出しとして実装する方法もあるtime

処理能力の高い(=パイプが太い)SPEへ移すことで処理時間を短縮できる。

time© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トSPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トComputation-Acceleration モデル

Asymmetric Thread Runtime モデル
 PPEとSPEを使ってマルチスレッド

 複数SPEにジョブを分割して投入して時間短縮をめざす–データの相互関係がある場合はSPE間でメッセージ交換

 配慮すべき点© 2006 IBM Corporation

ジョブを分割して投入する。分割方法はプログラマが考慮しなければならない。
PPEはジョブスケジューリングを実行している。

–DMAをうまくスケジュールしないと、処理すべきデータが投入されず、待たされる。

–Function Offloadのように終了を待機せずにスレッドが並列動作する

 配慮すべき点–PPEとSPEの性格の違いに配慮した
作業分担–1SPE 1コンテキストの原則

 プログラミング方法

 プログラミング方法–SDKのスレッド関数を利用する–SDKのスレッド関数を用いて実装–パラメータのやりとりにはDMAやMailboxなどを利用する–待機関数の代わりに、通信と割り込みでスレッドの終了を検知する

メインスレッド(PPE)
作業スレッド1(PPE)
作業スレッド2(SPE)
作業スレッド3(SPE)timetime© 2006 IBM Corporation© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
ト

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トPipeline モデル

Streaming モデル

 単一ジョブを複数の処理ステージに分割し、SPEに振り分ける

3 3 3
3 3 3
3 3 3

– データ分割で対応できない場合や瞬間スループットが重要なときに有効

2 2 2
2 2 2
2 2 2

1 1 1
1 1 1
1 1 1

順序依存のあるジョブ・・・上から順に処理しなければならない

 配慮すべきポイント

1 1 1 2 2 2 3 3 31 1 1 2 2 2 3 3 3– 何らかのSPE間通信は必須

 配慮すべき点

time

Pipeline Bubble が発生した例– 各ステージの処理時間 を揃える

 プログラミング方法– SPEプログラムを適切な粒度に分割

1 12 21 1 1 1

1 1

–SPUとLSの帯域は、LSとメインメモリのDMA転送よりも1桁大きいため、データの充填に気をつける プログラミング方法

3 3
2 2 2 2

–スレッド切り替えもPPEとの通信もないため、SPEがもっとも効率的に機能する–動画や音声の再生などに適する

1 1 1 2 2 2 3 3 3– 処理を同程度の処理時間のステージに分割できなければいけない SPEが自立的にジョブを取り出して処理

time–SPEスレッド作成
3 3 3 32 2

3 3

– MailboxとLS間DMA転送を用いる–メインメモリに共有ジョブキューや、メッセージ交換の仕組みなどを追加する–起動後はSPEが能動的にジョブキューを調べて、自律的にデータを処理PPEはスレッドを作成した後は何もしなくてよい。SPEが自律的にジョブを取り出しては処理していく。
PPEは別のことをしていてもよい© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
ト

SPEプログラミング
SPEプログラミング Æ 性能を引き出すポイン
トDevice Extension モデル

 SPEが直接I/Oとやりとりして高速に応答

プログラミングモデルの選択
処理時間を短縮するには処理速度の点だけでなく、OSやアプリケーションなどを同時に扱わなければならない
のでリアルタイム性の確保が難しい–ユーザインターフェースやネットワークの高速処理に適したモデル–SPEがデバイス処理に特化でき、リアルタイム性を要求されることが多いデバイスとのやりとりに有利
 プログラミング方法

External Device

専用SPEでネットワーク処理やユーザインターフェースの画像処理などをリアルタイムにこなすことができる

External Devicetime© 2006 IBM Corporation

易しい

とにかく短縮できればよい

Function Offloadモデル

平均スループットが重要

Computation-Accelerationモデル• 複数のSPEへ処理をオフロードする• データまたは処理で分割する

瞬間スループットが重要

Pipelineモデル• 一連の処理を複数ステージに分割• ステージの粒度を揃える

I/O処理を素早くしたい

Device Extension
モデル• SPEが直接I/Oデバイスからデータを取り込み処理して出力する

time–実装上はFunction Offloadモデルの特別の場合といえる–I/Oとは通常のDMA転送でやりとりする(メモリマップトI/O)© 2006 IBM Corporation• PPEを単一SPEへオフロード• SPEが終わるまでPPEは待機

難しい

大量のデータを処理するには異なる種類のデータ生成済みの大量データ

Computation-Acceleration
モデル

同種のデータだ
連続して生成されるStreaming
モデル• SPEを複数使って処理• SPEをグループに分けてもよい• PPEを介することなく、SPEがデータを取り込んで処理する

一般的

効率的
© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

コーンビーム3次元Ｘ線CTの画像再構成
 ボクセル I(x,y,z) は、投影角度βにおける投影ピクセル にフィルタ操作を施したP*(u,v, β)に、重み w(x,y,β)を掛け合わせたものの全角度にわたっての総和となる.
2D Ｘ線検出器
コーンビームP ' (u , v , β ) = w * P (u , v , β )w =Cell Broadband Engineアプリケーションの例.....( 1 )D so.....( 2 )D si + u 2 + v 2

P * (u , v , β ) = P ' (u , v , β ) ⊗ h (u )I[ x, y, z] =Ｘ線源.....( 3 )コーンビーム3次元CT*∑ β P [ u ( x , y , β ), v ( x , y , β ), β ] ⋅ W ( x , y , β )⎧ s = x cos β + y sin β⎨⎩ t = − x sin β + y cos β⎞⎛ D soW = ⎜⎜⎟⎟
⎝ D so − s ⎠t * D siu =D so − sv =....( 6 )s....( 7 )βx....( 8 )y

画像再構成の実行結果(Pentium® M 1.8GHz）
処理内容

処理全体に占める割合 [%]

重み付け

0.2

フィルタリ
ング
逆投影

1.0

– 重み付け：MN2

 投影画像のデータ量tTokyo Research Laboratory

M枚の投影画像から１辺の解像度がNの立方体を再構成する場合– 逆投影：17MN3

X-ray
sourceu© 2006 IBM Corporation

Tokyo Research Laboratory– フィルタリング： MN2(2+ 10log2(2N))

v

2D x-raydetector© 2006 IBM Corporation 演算回数zD....( 5 )2z * D si
D so − s....( 4 )逆投影の実装実装１
PPESPEs

ロード
開始コマンド

計算開始
投影位置の計算
完了通知

投影位置の近辺のデータをパック ボリューム画像のデータ量

開始コマンドPPESPEs

ロード

98.8– 各ピクセルを４バイトfloat型で表した場合、4MN2バイト

実装2

開始コマンド

計算開始
投影位置の計算

投影位置の近辺のデータを取得
データのパック

計算開始– 各ピクセルを４バイトfloat型で表した場合、4N3バイト

start compute
逆投影の計算PentiumはIntel Corporationの商標。
© 2006 IBM Corporation

完了通知

逆投影の計算完了通知© 2006 IBM Corporation

Tokyo Research Laboratory

Tokyo Research Laboratory

Motion JPEG 2000のプロファイリングの例

実行時間

FDWT_2D_DEINTERLEAVE()
forward_DC_level_shift()

FDWT_1D_FILTD()
100
100

Data pack and PPE initiated DMA

HOR_SD()実装１

1.8

enc_codeblock_encode_sign()

1010

2.1

enc_codeblock_context_for_MR()

2.2

codeblock_swap_coding_pass()

実装2

1 1

実装3

VER_SD()

2%
6%

ウェーブレット変換

18.41%

23.06%

4%2.42

codeblock_new()9%
1.4

SPE initiated block transfer

performance (normalized)

42.31%

enc_codeblock_arithmetic_encoding()

SPE initiated scatter-gather transfer

算術符号化

%

2.48%

enc_AR_encode()

enc_codeblock_MR_pass()

2.49%

11.44%

enc_put_dicision_and_context()%
2.82

0.10.1

3.1

enc_codeblock_bit_modeling()
1SPE
1SPE

2SPE2SPE

4SPE
4SPE

8SPE
8SPE

17.74%

その他
16.89%

9%
2.9

stream_buffer_read_bits()

8.13%

5%

enc_codeblock_context_for_SPCU()

3.
90
%

正規化した実行時間

ビットモデリングforward_RCT()

5.97%
4.81%

enc_AR_renorme()

5.14%

5.64%

enc_codeblock_propagate_significance()

enc_codeblock_CU_pass()
enc_codeblock_SP_pass()stream_buffer_write_bits()© 2006 IBM Corporation

Tokyo Research Laboratory© 2006 IBM Corporation

Tokyo Research Laboratory

ビットモデリング・算術符号化 (EBCOT)への応用

マルチエンコーダによる分散処理

 実装– コードブロック単位でジョブ生成 PPE 生産スレッド• 8 SPEで並列符号化

HL

 最適化

LH

時間
HH

コードブロックに分割してジョブ生成

 各 Cell Broadband Engine ブレード上で、NUMAにより並列に２ノードの符号化サーバーを実行– ダブルバッファリング• DMA転送隠蔽

コードブロック毎の符号化– PPE 2スレッド構成• タグツリー生成時間隠蔽
 効果– PPE 処理の 18 倍高速化
[ms]
60005689
5000 4727
4000
3462
3000
2607
2418
2000
2スレッド 1602
1000 （ダブルバッファ）
0
1 2
3SPE

パケット

DMA転送

1806

1254

1056

893

828

745

45678 [SPE]

1636

1557

PPE 消費スレッド タグツリー生成
リザルト回収キャッシュ (最大 64GB)
Frame

ウェーブレット変換
ビットモデリング
算術符号化 他
SPE

SPE

SPE

SPE

SPE

SPE

SPE

SPE

Frame

Frame
Frame

Frame
Frame
Frame

Frame
Frame

Cell Broadband
Engine クラスター

1098765432
10

1 2 3 4 5 6 7 8 9 10111213141516

Relative speed

NUMA

NUMA

NUMA

Cell Broadband Engine ブレード© 2006 IBM Corporation

8 SPE

Motion-JPEG2000 ストリーム

IA ブレード

Frame
Frame
Frame

1スレッド
1938

Cell broadband Engine を２個搭載したブレードサーバー
RAW データストリーム

MIC2071

 １枚の IA ブレードと複数の Cell Broadband
Engine ブレードで構成

16 SPE x1 より
8 SPE x2 で処理したほうが効率が良い© 2006 IBM Corporation

Tokyo Research Laboratory

ありがとうございました。

© 2006 IBM Corporation