近況: Phoenixモデル上の データ並列プログラム

Slides:



Advertisements
Similar presentations
G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
Advertisements

HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
MPIを用いたグラフの並列計算 情報論理工学研究室 藤本 涼一.
クラスタの構成技術と クラスタによる並列処理
Chapter11-4(前半) 加藤健.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
最新ファイルの提供を保証する代理FTPサーバの開発
テキストベースの会議における議論の効率化に関する研究
全体ミーティング (4/25) 村田雅之.
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
クラスタコンピューティングの 並列環境と性能
PCクラスタにおける2個体分散遺伝的アルゴリズムの高速化
DNASシステム上のアプリケーション起動シーケンスのための基盤であるdsh部分の性能評価
AllReduce アルゴリズムによる QR 分解の精度について
神奈川大学大学院工学研究科 電気電子情報工学専攻
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
分散遺伝的アルゴリズムによる各種クラスタのベンチマーク
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
各種PC クラスタの性能評価 同志社大学 工学部 廣安 知之 三木 光範 谷村 勇輔.
多数の遊休PC上での 分散ゲーム木探索 導入 ゲーム木探索 ⇒遊休PCを利用して高速化 例)コンピュータ将棋における次手の計算
PCクラスタ上での 連立一次方程式の解の精度保証
並列分散プログラミング.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
CSP記述によるモデル設計と ツールによる検証
ネットワーク性能に合わせた 分散遺伝的アルゴリズムにおける 最適な移住についての検討
ま と め と 補 足 ネットワークシステムⅠ 第15回.
応用数理工学特論 第5回 計算理工学専攻 張研究室 山本有作.
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
アクセラレータを用いた 大規模へテロ環境における Linpack
型付きアセンブリ言語を用いた安全なカーネル拡張
大阪市立大学 学術情報総合センター 大西克実
応用数理工学特論 第6回 計算理工学専攻 張研究室 山本有作.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
MPIを用いた最適な分散処理 情報論理工学研究室 角 仁志
#6 性能向上、ブレイクスルー、集中と分散 Yutaka Yasuda.
コンポーネント連携によるサービスを オーバレイネットワーク上で 実現するためのサービス設計技法の提案
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
12/14 全体ミーティング 米澤研究室卒論生 山崎孝裕
卒論進捗発表(1) 10/ 山崎孝裕.
分散環境でのStableな ブロードキャストアルゴリズムの 提案と実装
Internet広域分散協調サーチロボット の研究開発
私の立場 OSカーネルを手がけるエンジニア 大阪市立大学 創造都市研究科の学生
通信機構合わせた最適化をおこなう並列化ンパイラ
実行時情報を用いて通信を最適化するPCクラスタ上の並列化コンパイラ
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
進捗報告 金田憲二.
目的:高速QR分解ルーチンのGPUクラスタ実装
盗聴・改ざんに対して耐性を持つ ネットワーク符号化について
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
InTriggerクラスタ環境の構築 i-explosion 支援班 クラスタ環境の概要 研究に使える「共有資源」を提供
Virtualizing a Multiprocessor Machine on a Network of Computers
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
「マイグレーションを支援する分散集合オブジェクト」
マイグレーションを支援する分散集合オブジェクト
秘匿リストマッチングプロトコルとその応用
全体ミーティング (5/23) 村田雅之.
「マイグレーションを支援する分散集合オブジェクト」
Mondriaan Memory Protection の調査
Cソースコード解析による ハード/ソフト最適分割システムの構築
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
アドホックルーティングにおける 省電力フラッディング手法の提案
理工学部情報学科 情報論理工学研究室 延山 周平
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
ネット時代のセキュリティ3(暗号化) 2SK 情報機器工学.
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
分散メモリ型並列計算機上での行列演算の並列化
アーキテクチャパラメータを利用した並列GCの性能予測
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

近況: Phoenixモデル上の データ並列プログラム (副題: Top500@homeへの第一歩?) 遠藤敏夫

背景: Grid Gridツールが徐々に一般的に(Globus, Nimrod…) 古典的な並列計算研究ではGridに対応しきれない でも、ちょっと複雑な並列プログラムが書きにくい 古典的な並列計算研究ではGridに対応しきれない 多数のノード、ノード増減 ヘテロ性 セキュリティ Gridの特徴に対応しつつ、古典的並列に迫る性能は可能か?

TOP500(www.top500.org)とは 速いスーパーコンピュータ上位500位 古典的並列の祭典? Linpack(密行列連立一次方程式)のGflopsにより決定 データ依存関係が多いので、seti@homeよりは難しい ちなみに2002/6現在、 1位: 地球シミュレータ (35,860GFlops) 2位: ASCI White (7,226GFlops) 47位: 松岡研480CPUクラスタ (716GFlops)

現状 Phoenixモデル上でLinpackもどきを記述 記述を楽にするために以下のモジュール作成 性能はまだヘボヘボ LU分解のみ、pivotingなし 記述を楽にするために以下のモジュール作成 分散行列 集団通信 性能はまだヘボヘボ Ultra SPARC 750MHz ×16上で、0.50GFlops アプリケーション 分散行列 モジュール 集団通信 モジュール Phoenix通信 モジュール

発表の概要 普通のモデルとPhoenixモデル LU分解と、単純な並列化 集団通信 まとめ ブロードキャストを用いた場合 部分ブロードキャストを用いた場合 まとめ

普通の メッセージパッシングモデル MPI (www.mpi-forum.org) 汎用メッセージパッシングAPI仕様 物理ノードがそのまま見えるモデル ノードIDは0~P-1 ノード数増減への対応はプログラマの責任 API MPI_Send: 送信 MPI_Recv: 受信 MPI_Comm_Rank: ノードID取得 集団通信(broadcastなど) など

Phoenixモデル [田浦01] 仮想ノード空間([0,264)など)を物理ノードに分配 仮想ノード数が莫大な点が、のちのち話題に 物理ノード増減 = 仮想ノードのやりとり バケツリレーによりメッセージを配送 [0000,3FFF] [4000,7FFF] [8000,FFFF] [8000,BFFF] [C000,FFFF] 仮想ノード数が莫大な点が、のちのち話題に

Phoenix通信API P_send(dest, msg) (dest, msg) = P_recv() 自分あてのメッセージを一つ受信 vpset = P_get_assigned_vps() 自分の担当する仮想ノード集合を取得 P_set_assigned_vps(vpset) ~を設定 その他、ノード集合演算 etc.

発表の概要 普通のモデルとPhoenixモデル LU分解と、単純な並列化 集団通信 まとめ ブロードキャストを用いた場合 部分ブロードキャストを用いた場合 まとめ

LU分解 U L A U L A(i) 全体の計算量はO(n3) 右下ほど計算量が多い → ブロック分割よりサイクリック分割が望ましい for( i = 0; i < n; i++ ) for( j = i+1; j < n; j++ ){ A[j][i] /= A[i][i]; for( k = i+1; k < n; k++) A[j][k] -= A[i][k] * A[j][i]; } U L A U L A(i) 全体の計算量はO(n3) 右下ほど計算量が多い → ブロック分割よりサイクリック分割が望ましい

普通のモデルでの並列化 「ノード数<<要素数」なので、要素を分担 P0 P1 P2 P3 P4 P5 ブロック分割 サイクリック分割 P0 P1 P2 P3 P4 P5 (実際にはブロック-サイクリック分割が使われる)

Phoenixモデルでの並列化 「仮想ノード数>>要素数」 に注意 仮想ノード空間に均一に割り当てる ブロック分割 サイクリック分割 ノード 0000 ノード FFFF 仮想ノード空間に均一に割り当てる 行列を適当な数に分割し、左と同様

並列LU分解の実装(単純版) LUアプリケーション 分散行列モジュール P_send/P_recvにより記述 Phoenix通信モジュール ブロック分割・サイクリック分割に対応 仮想ノード移送時にデータも移送(詳細略) Phoenix通信モジュール TCP/IP上に(てきとうに)実装 ノード増・リーフノード減に対応(詳細略)

実験環境 Sun Bladeクラスタ gcc –O4 各ノードに均等に仮想ノード割り当て パラメータ Ultra SPARC 750MHz × 2 × 16ノード (各ノード1CPUのみ使用) gcc –O4 各ノードに均等に仮想ノード割り当て パラメータ 行列サイズ=2048×2048 ブロックサイズ=64×64 サイクリック分割数=8×8

単純版LUの性能 4CPUで性能頭打ち 原因の一つは無駄な通信の多さ → ブロードキャストが必要 2n以外で特に遅いのは分割の不規則性のためか?

発表の概要 普通のモデルとPhoenixモデル LU分解と、単純な並列化 グループ通信 まとめ ブロードキャストを用いた場合 部分ブロードキャストを用いた場合 まとめ

LU分解の通信パターン 1つの要素を、複数の要素の計算に用いる 近くの要素たちは、おそらく同CPUが担当 第iループ for( j = i+1; j < n; j++ ){ A[j][i] /= A[i][i]; ← 真上の要素を使って更新 for( k = i+1; k < n; k++) A[j][k] -= A[i][k] * A[j][i]; ↑ 真左と真上の要素を使って更新 } 1つの要素を、複数の要素の計算に用いる 近くの要素たちは、おそらく同CPUが担当 → 相手ごとにメッセージを送るのはムダ → ブロードキャストしたい

Phoenix上での ブロードキャスト メッセージを仮想ノード空間全体に送信したい 物理ノードグラフを知っていることにする? 実際のメッセージ数が、O(仮想ノード数)やO(行列要素数)では困る O(物理ノード数)にしたい 物理ノードグラフを知っていることにする? モデルが複雑に 送信とほぼ同時にノード増減が起こると微妙 → 空間のDivide&conquerで手軽に実現

ブロードキャストアルゴリズム メッセージにあて先ノード範囲を添付 範囲中の任意の1ノードへ送信 受信メッセージのあて先が 物理ノード アプリ 集団通信モジュール Phoenixモジュール 物理ノード アプリ 集団通信モジュール Phoenixモジュール 物理ノード アプリ 集団通信モジュール Phoenixモジュール 物理ノード メッセージにあて先ノード範囲を添付 範囲中の任意の1ノードへ送信 受信メッセージのあて先が すべて自分→受信 それ以外→2分してやり直し

ブロードキャスト版LUの性能 2, 4, 8CPU以外で悪化 さすがに仮想ノード全部に送るのはムダ 2n以外でメッセージが増加

発表の概要 普通のモデルとPhoenixモデル LU分解と、単純な並列化 グループ通信 まとめ ブロードキャストを用いた場合 部分ブロードキャストを用いた場合 まとめ

一部へのブロードキャスト MPIの場合 Phoenixの場合 任意のノード集合を設定可能 (ex. CPU0と2と6にブロードキャスト) 任意の仮想ノード集合 メモリ・時間コスト大 任意の行列要素

どんな部分集合を考えるか 同じ行・列へのブロードキャストの出番は多 → のノード集合へ送ればよい これもDivide&conquerでok これ以外の集合については検討課題

部分ブロードキャスト版LUの性能 これまでより圧倒的に性能向上 ただし8CPUで頭打ち 2n以外ではやはり悪い

関連研究 MPICH-V [Bosilcaら 02] (SC02) HPF2.0仕様 [荒木ら 02] (JSPP02) Grid上でMPIプログラムが無変更で動作 ノード故障に対応 (checkpointingによる) ノード増減、負荷分散はユーザ責任 HPF2.0仕様 任意の幅のBLOCK分割に対応 [荒木ら 02] (JSPP02) 性能ヘテロに対応した動的負荷分散 (HPF2.0使用) プログラマが性能計測フェーズを記述し、その後処理系が配列マッピングし直し 負荷分散時に全プロセッサが協調

関連研究 Space filling curve [Peano 1890] d次元から1次元へのマッピング 非均一な並列プログラムの負荷分散方法として利用される 本研究の文脈では、行・列の部分集合をどう表現?

まとめ Phoenixは高性能計算に向いているか? → 実装がヘボいので結論はまだ出せない 現状では、最高0.516GFlops (台数効果4.0倍)

TCP/IP tips 小さいメッセージの到着が遅れる → setsockopt()でTCP_NODELAYを設定 通信量が増えるとデッドロックする read()だけでなくwrite()もブロックする → fcntl()でO_NONBLOCKを設定