********************************************************************** セッションs4-a テーマ:メニーコア/ネットワークオンチップの基礎と組込みシステムへの応用 講師:前篇:鯉渕 道紘 氏(国立情報学研究所)     後編:冨山 宏之 氏(立命館大学) 日時:2013/8/23 13:00〜14:20 参加人数:14名(終了時) ********************************************************************** 前篇 ・内容  メニーコア ネットワークオンチップ トポロジ ルータアーキテクチャ ・現在のメニーコアアーキテクチャの流れ  だいたい8コアを超えたあたりからメニーコアと呼ばれる。  現在、2000コアくらいのものもある。  例を挙げると2006年に発売されたPS3が8コア。  コアの数においてもムーアの法則のようなものがあり、コア数はだいたい18か月で  2倍になっていくといわれている。 ・教科書  パターソンアンドヘネシーの相互結合網などを読むとよい ・NoCとは  チップ内ネットワーク  Network-on-Chip(NoC)=  On-Chip Network(OCN)=  On-Chip Interconnection Network(OCIN) ・NoCパラダイムシフト  BusからP2Pパケット転送へ  バス構造の限界  -コア数の増加  -配線遅延の増加  NoCにおいてトポロジ、スイッチング技術が大事 ・トポロジ  規則的な2次元レイアウト  メッシュ、トーラス、ツリーが基本  アプリの通信特性と合わせて総合的に選択  2次元メッシュと2次元トーラスであれば、16コアの場合2倍の帯域がトーラスに  ある。  各コアの情報を吸い取りたい場合、メッシュとトーラスでは大変なのでツリーを使う  ことがある。 ・Small Worldトポロジ  規則的なメッシュトポロジに加えて、アプリに特化したロングリンクをもつ  アーキテクチャを自動合成 ・ヘテロジニアルだとどうなるのか?  トラフィックパターンを事前に解析  トラフィック総量を最小にする最適化 ・3次元だとどうなるのか?  ネットワークオンチップでは2次元、3次元はそこまで問題でない ・トポロジの展望  -省電力技術の適用しやすさ  -直径、平均ホップ数は遅延にはさほど影響しないが、  パケットの転送電力は比例する  驚くようなトポロジは出尽くした?? ・トポロジの現在  2次元メッシュトポロジが基本 ・ルータアーキテクチャの展望  驚くべき技術革新がおきた  プロセッサのパイプライン技術の応用が多い  -省電力化 Power Gating / DVFSルータ  -低遅延化 Speculativeルータ 予測ルータ <まとめ> メニーコアNoCは以下を基準に要求に応じた最適設計 ・トポロジ  2次元メッシュ ・スイッチング技術  ワームホール方式 ・ルータアーキテクチャ  4サイクルルータ 前篇における質疑応答 Q:NoCを設計するにあたって良い設計手法やツールはあるのか?  また、設計環境はあるのか? A:講師はそういうものは作っていない。  しかし、NoCの方式の評価をとるときはVMWareのようなもの(フルシステム  シミュレーション)で詳細な評価と挙動確認をすることは可能。  実環境に比べて遅くなるが、実機でどのように動くか予測することができる。 後篇 〜SMYLEプロジェクトを例に〜 ・プロジェクト概要  NEDOグリーンITプロジェクト  「低消費電力メニーコア用アーキテクチャとコンパイラ技術」  大学   可能な限り設計データやツール群を無償で公開  トップシステムズ   評価ボードデモを開発しIPコアビジネスへと展開  フィクスターズ   ベンチマークやツール群を無償で公開  JEITA+eSOL+CATS   市場調査 検討結果を公開 ・メニーコアの本質とは?  低性能、小面積、低消費  電力なコアを大量に搭載 ・Many VS Multi VS Single  ソフトウェアに並列性がどれだけあるかが重要  並列性があればメニーのほうがスピード早い  なければシングルのほうがはやい ・単一アプリ性能はスケールするのか?  科学技術計算アプリでさえも性能が収束  並列性に限界がある ・メニーコアプロセッサの課題  スケーラビリティが低い   −アプリケーションプログラムが持つ並列性の不足   −メモリアクセスのボトルネック   −バリア同期のオーバヘッド ・組込みにおいて  組込みアプリケーションはデータ並列性が小さい。  いかに組込み向けに活用するか ・SMYLErefの狙い  マルチスレッド、マルチタスク実行でスケーラビリティを確保  並列性が高いもの、低いものでコアの割り当てを変える。   ハードウェアは、ある程度汎用性を確保したい。  アプリのマッピングで専用化。 ・VAM実装のリファレンスアーキテクチャ  数個のプロセッサコアをバスで結合したクラスタ構成  クラスタを2次元メッシュのオンチップネットワーク(NoC)で結合  クラスタ化によりルータのコスト下げる(より多くのトランジスタを演算に利用) ・プロセッサコア  MIPS R3000ベースを利用 ・クラスタの構成  -プロセッサクラスタ   複数のコア   分散共有L2$   ルータがクラスタバスを通して接続  -Peripheral Cluster  DRAMコントローラ   I/Oコントローラ ・VAM向けの拡張 -再構成可能L1キャッシュ  コアごとにL1キャッシュメモリをキャッシュとして、もしくはSPMとして利用 -分散共有L2キャッシュの拡張 -グループハードウェアバリア  バリア同期専用のツリー型ネットワーク  VAM内での高速バリア同期の実現 ・SMYLE OpenCLの目的   いかにリアルタイム性を確保するか   いかに高性能(スループット)を実現するか   低消費電力 ・マルチ/メニーコアのソフトウェアの課題 コア数の増加をアプリケーションが意識しなくてもよい実行環境/開発環境 リアルタイム性 ・並列プログラミング 一番相性がいいのはOpenCL CUDAの標準化バージョン オープンでロイヤルティフリーな仕様 C言語ベース ヘテロジニアスなプラットフォームに対応 プラットフォーム非依存 データ並列実行とタスク並列実行の両方に対応 ・既存のOpenCL環境の問題 複数のOpenCLアプリケーションの並列実行が不可 リアルタイム性の保証が困難 オーバヘッドが大きい、予測が難しい ・SMYLE OpenCLの特徴 起動時のオーバヘッドが小さい さまざまなレベルの並列化 ・SMYLE OpenCLの実行の流れ 1、入力データをメモリバッファに格納 2、カーネル実行 3、実行結果をメモリバッファから読み出し それ以外は全部staticにやる ・SMYLEref機能シミュレータ OpenCLプログラムのデバッグ用を作成 詳細な評価は不可能 ・Runlengthの実行時間の内訳 起動時のオーバヘッドはほぼ変わらない <まとめ> ・SMYLE OpenCL環境を開発  -ランタイムライブラリ  -マッパ  -機能シミュレータ ・特徴  -小さな実行時のオーバヘッド   静的なコンテキスト生成   静的なマッピング  -さまざまなレベルでの並列実行   アプリケーション間の並列実行   アプリケーション内のデータ並列/タスク並列実行 ・128コアSMYLErefアーキテクチャ上で実証 <最後に>  大学で作ったものはフリーで公開  フィクスターズでつくったものも一部フリー  一般公開されているものはまだ少ないがぜひつかっていただければ ・前篇、後篇における質疑応答 <質問者1>  リアルタイム性の考慮はオーバヘッド時間の保証はない? <回答>  保証してない  最悪実行時間を見積もることはできる  ある程度正確に見積もれる <質問者1> キャッシュのアーキテクチャでそれができる? <回答> それはできない しかしキャッシュをローカルなメモリとして使用する際はできる 補足 工夫した点として タスクのマッピングをする際に リアルタイム性が高いものは、排他的に他を占有する シングルタスク環境で動かすので、ほかのタスクが邪魔しないので リアルタイム解析は楽にできる <質問者2> アプリケーションを分けると、ネットワークの階層をもっているといっていたが アプリの配置をうまくわけるのはむずかしいのではないか? <回答>  難しいといえば難しい  ひとつのクラスタの中にアプリケーションを閉じ込めれば簡単  基本的に共有メモリで通信  コアとコアの配置よりも主記憶からの位置で性能が決まってしまう  早く実行したいやつはメモリの近くにおくなどで考慮する <質問者2>  将来的に階層構造ってどうですか? <回答> クラスタリングして階層化していく話があったが コア数が増えていけば、階層せざるを得ないのは当然。 作れる限りはそういう方向に行く。 <質問者3> FPGAのエミュレータの動作周波数が10MHzということだが、 システム全体が同じクロックで動くからそんなに周波数がさがるのか? <回答> その通り <質問者3> 別のクロックで動かして同期して実行させるということはしないのか? <回答>  FPGAで動かすことが確定しているならそれでもよい  ワンチップに集積されるメニーコアを実現するうえでFPGAを仕方なくつなげて  使っただけということをご理解してください <質問者3>  オンチップはクロックが違うほうがいい? <回答>  できるなら違うほうがいい  パワードメインが違うので、通信の同期をとる必要がある <質問者4>  OpenCLを使って作られたということだが、  コアを意識しないのが主流になっていくのか?  コンパイラを考えて自動化が主流になっていくのか? これからのトレンドは? <回答>  組み込み向けにもOpenCLが普及しつつある  STMicroでもここ数年こういう環境を作っている。  それがいいのかというとだめ OpenCLつかいにくい  もう少しよい言語があったほうがいい  自動並列化は懐疑的  モデルベースで最初からしっかりやってコード生成の段階で並列化したほうが  いいのではないか  forallだけうまいこといくけどそれ以外うまいこといかないのが昔からの常。  エクスプレシッドに書いたほうがいい <質問者5>  組み込みをメニーコアの事例ってなんですか? <回答>  画像処理が多い  広義の意味だと、GPUを乗っけているものなどもあるので結構多い <質問者5>  車向けだとどうですか? <回答>  画像処理や自動運転とかがメニーコアの時代にはいりつつある  並列性があれば使われていくと思う  時間がたつと車載のチップではエンジン制御などが劣化していく  専門家ではないからよくわからないがやっている方はいるので可能性があるのでは  ないか 以上