Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Try Cell Broadband Engine

Hibari
November 10, 2018

Try Cell Broadband Engine

This slide is an introduction to use Cell Broadband Engine(Cell B.E.) on the PS3.
I used it and implemented large integer multiplication with SIMD instruction.

Hibari

November 10, 2018
Tweet

Other Decks in Programming

Transcript

  1. Cell Broadband Engine #とは • PowerPCアーキテクチャベースの64ビットRISCマイクロプロセッサ • 分類上はマルチコア • PPE

    (PowerPC Processor Element) • 汎用プロセッサ.制御プロセッサ. • 1つ搭載されている • SPE (Synergistic Processor Element) • 演算プロセッサ • 8つ搭載されている
  2. Cell Broadband Engine #とは • PPE (PowerPC Processor Element) •

    OS駆動や,SPEの制御が主な仕事 • 演算はあまり得意でない • 512KB L2キャッシュを持つ • SPE (Synergistic Processor Element) • SIMD系の演算特化アーキテクチャ • 128bit長レジスタを128個もつ • キャッシュは持っていない • 代わりに256KB SRAM (Local Store)を持つ
  3. Cell Broadband Engine #とは • Cell Broadband Engineが搭載されているマシン • Roadrunner

    • アメリカが保有していたスーパーコンピュータ • 2008年6月ー2009年月でTOP500で1位を獲得 • QPACE • ドイツの研究所が保有していたエネルギー効率の良いスパコン • 東芝 CELL REGZA • 2010年10月発売の薄型テレビ • PlayStation 3
  4. Cell Broadband Engine #とは • 神威・太湖之光 • 中国のスーパーコンピュータ • 2016年6月ー2017年11月の間,TOP500で1位と取り続けた

    • Cell/BEと似たアーキテクチャを採用している • 役割の異なるコアを持つ • スクラッチパッドを採用している
  5. Cell Broadband Engine #とは PS3(Cell/BE) • PPE(汎用コア) • 3.20GHz •

    64-bit RISC PPC命令セット • 128-bit SIMD • SPE(演算コア) • アウトオブオーダー実行不 可 • スクラッチパッドメモリのみ • 128-bit SIMD 神威・太湖之光 • MPE(汎用コア) • 1.45GHz • 64-bit RISC 独自命令セット • 256-bit SIMD • CPE(演算コア) • ブロックごとのアウトオブ オーダー実行 • L1命令キャッシュあり • 256-bit SIMD
  6. Linux on the PS3 • PS3のCell Broadband Engineを使いたい • PS3にLinuxをインストールできたら使えそう

    • とっても簡単にインストールできる!!!! • 優先起動システムを利用する
  7. Linuxディストリビューション • RedRibbon GNU/Linux for PS3 • DebianベースのLinux • Cell/BEをサポートしている

    • デフォルトではツールが入ってない • 色々格闘したが環境できなかった
  8. Linuxディストリビューション • Yellow Dog Linux (YDL) • Red Hat系のLinux •

    マルチコアアーキテクチャ向け • Cell/BEを使うためのツールが付属 • インストールしてすぐに試せる
  9. Cell Broadband Engine • Cell/BEがIntel CPUと主に異なる点 • PPUとSPUと2種類のコアを持つ • SPUはメインメモリを直接参照することができない

    • PPUから明示的にデータを送る必要がある • SPUはキャッシュを持たない • 付属するLSが事実上のキャッシュ(SRAMでありアクセスは高速) • ビッグエンディアン • ハードウェア分岐予測,アウトオブオーダー実行ができない • 単純化して高周波数化を実現している
  10. Cell Programming • SPEを使うために • SPEは自身のリソースを管理する機構を持たない • PPEが一時的な機構(context)を事前に作成する • すべてのcontextはprogram

    handleとしてSPEに読み込まれる • おおまかなフロー • PPEがcontextを作成する • PPEがcontextの中にSPEが行うprogram handleをロードする • SPEがcontextに従ってプログラムを実行する • 処理が終わったらPPEがcontextを削除する
  11. Hello, world! • SPE • spe_id • SPEスレッドのID • argp

    • PPUからSPEに送られる データのアドレス • envp • 環境データ
  12. Hello, world! • PPE • ヘッダファイル • SPE program handle

    • SPE context • SPE start address • status value • Stop information
  13. Hello, world! • コンパイル • spu_gcc spu_basic.c –o spu_basic •

    SPU実行ファイルのビルド • ppu-embedspu –m64 spu_basic spu_basic.o • 実行ファイルをPPUの.oファイルに組み込むための変換 • ppu_gcc ppu_basic.c –o ppu_basic spu_basic.o –lspe2 • PPU実行ファイルのビルド
  14. Cell Programming • Cell プログラミングで高性能計算の体験がしたい • SPUはSIMD演算が得意 • 高性能計算の題材 •

    粒子法シミュレーション • 密行列積演算 • 疎行列ベクトル積 • N体問題 • 多倍長整数乗算 → SIMD化して高速な乗算をしたい!
  15. Memory Flow Controller • SPUのローカル・ストア(LS)とメインメモリ間のDMA転送を管理 • SPUはメインメモリを直接参照できない • SPUが明示的にメインメモリから要求する •

    mfc_get • LSへの転送を行う • 転送データは,16byteのアライメントをしないとSegmentation Fault • mfc_put • メインメモリへの転送を行う
  16. Memory Flow Controller • mfc_get/putは非同期呼び出し • タグマスクをセットし,利用するタググループを設定する • mfc_write_tag_mask •

    転送の完了は以下の関数を呼んでチェックする • mfc_read_tag_status_any • MFCタググループの「どれか」がタスクを完了したら状態を変えるように する • mfc_read_tag_status_all • MFCタググループの「全て」がタスクを完了したら状態を変えるようにする
  17. intrinsic • SIMD命令を使用するために用いられる組込み関数 • SPUの言語拡張としてサポートされている • C言語の関数の感覚でSIMD命令を指示できる • 筋肉プレイングをせずとも明示的に使用できる •

    レジスタの割り当てミスも起こらない • (参考)Intelにもintrinsicが用意されている • MMXからAVX-512まで,ほぼ全ての命令がサポートされている
  18. intrinsic • 使用する主なSIMD命令のintrinsic • spu_madd(a, b, c) • a *

    b + c を一命令で行う • MPYA命令 • spu_shuffle(a, b, pattern) • patternにしたがってa, bから要素を取り出す • SHUFB命令
  19. 性能評価 • 比較対象 • GNU MP ver4.1.4 (2005年くらい) • 多倍長整数乗算関数

    mpz_mul • 比較オペランドサイズ • 512, 1024, 1536, 2048, 2560, 3072ビット
  20. 性能評価 • GNU MPに対して約10倍の実行時間 • やはりGNU MPは最強ライブラリ • そもそも性能でGNUを相手にするのはさすがに分が悪い •

    ここまでは想定済み • ベクトル化しているなら,スカラ処理には勝てるでしょう • スカラ版の素直な乗算を実装して性能比較 → スカラ vs ベクタの戦い
  21. 性能評価 • 原因 • 今回のベクトル化の実装が素直すぎる • 計算が合うようにすることを最優先に実装 • データ依存関係まみれ •

    ループアンローリングしていない • レイテンシを隠す工夫もなされていない • 128bitくらいのベクタ命令やるならスカラ命令の方が速いのでは? という予測はすでに立っていた • そもそもSPEの使い方がよくない
  22. まとめ • PlayStation3とは • ゲーム機 • じゃじゃ馬スパコン体験機 • すべてマニュアルなマシン •

    アーキテクチャレベルの深い理解が必要 • チューニングの難易度高 • (多倍長整数乗算のような)小規模計算には向いてない • HPCマンの端くれの端くれの自分がいきなり扱える代物でなかった • 同時に,アウトオブオーダー実行や分岐予測のありがたみがわかった