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

Try Cell Broadband Engine

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for Hibari 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.

Avatar for Hibari

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マンの端くれの端くれの自分がいきなり扱える代物でなかった • 同時に,アウトオブオーダー実行や分岐予測のありがたみがわかった