クラスタコンピューティングの 並列環境と性能

Slides:



Advertisements
Similar presentations
Windows HPC 講習会 2009/9/25 Windows HPC コンソーシアム 1 - MS-MPIプログラミング演習 - 同志社大学生命医科学部 廣安 知之 同志社大学工学研究科 中尾 昌広.
Advertisements

IP over DVB-RCS の設計と実装 研究背景 DVB-RCS 衛星回線を用いて受信局から送信局への狭帯域な戻り回線を提供 Forward Link Return Link HUB Terminal.
11 January 17, Sample answer of the last week's report. (1) 2 #include #include "mpi.h" int main(int argc, char *argv[]) { int i,r, myid, procs,*result;
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
Curlの特徴.
ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能
情報理工学系研究科 コンピュータ科学専攻 上嶋裕樹
キャッシュ付PRAM上の 並列クィックソートと 並列マージソート
メモリコンシステンシモデル memory consistency model
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
クラスタの構成技術と クラスタによる並列処理
Parallel Programming in MPI part 2
Docker.
タスクスケジューリング    .
ラウンドトリップタイムを指標とした 無線LAN のためのアクセスポイント選択手法
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
PCクラスタにおける2個体分散遺伝的アルゴリズムの高速化
DNASシステム上のアプリケーション起動シーケンスのための基盤であるdsh部分の性能評価
アルゴリズムとプログラミング (Algorithms and Programming)
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
分散遺伝的アルゴリズムによる各種クラスタのベンチマーク
各種PC クラスタの性能評価 同志社大学 工学部 廣安 知之 三木 光範 谷村 勇輔.
福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室
アルゴリズムとデータ構造 補足資料4-2 「線形探索」
OSI7層の各層の1)名称 2)機能の簡単な説明 3)各階層に関連のあ る機器、規格などを5つ以上書いて下さい。
ネットワーク性能に合わせた 分散遺伝的アルゴリズムにおける 最適な移住についての検討
スパコンとJLDG HEPの計算環境 HEPnet-J
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ 不可分命令の実装 プロセス間通信 PV命令
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
京都大学大学院医学研究科 画像応用治療学・放射線腫瘍学 石原 佳知
Occam言語による マルチプリエンプティブシステムの 実装と検証
OpenMPハードウェア動作合成システムの検証(Ⅰ)
オペレーティングシステムJ/K (実時間処理システム)
MPIによるwavからmp3圧縮の検証 情報論理工学研究室 04‐1‐47‐200 木村 惇一.
MPIによるプログラミング概要(その2) 【Fortran言語編】
Parallel Programming in MPI part 3
分散IDSの実行環境の分離 による安全性の向上
関数の定義.
マルチスレッド処理 マルチプロセス処理について
MPIとOpenMPを用いた Nクイーン問題の並列化
近況: Phoenixモデル上の データ並列プログラム
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
「コアの数なんて どうでもいい」 五島 正裕(東大).
通信機構合わせた最適化をおこなう並列化ンパイラ
進化的計算手法の並列計算機への実装 三木 光範
オペレーティングシステムJ/K (システムプログラミング)
実行時情報を用いて通信を最適化するPCクラスタ上の並列化コンパイラ
phononの分散関係の計算 -カイラルナノチューブ(18,3)-
MPIを使った加算  齋藤グループ 小林直樹
IP over DVB-RCSの設計と実装
目的:高速QR分解ルーチンのGPUクラスタ実装
Virtualizing a Multiprocessor Machine on a Network of Computers
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
「マイグレーションを支援する分散集合オブジェクト」
福岡工業大学 情報工学部 情報工学科 種田研究室 于 聡
社会の情報インフラストラクチャとして、高性能コンピュータおよびネットワークの重要性はますます増大しています。本研究室では、コンピュータおよびネットワークの高速化を狙いとする並列・分散情報処理の科学と技術に関する研究に取り組んでいます。効率のよいシステムの実現を目指して、下記の項目を追求しています。 ◇コンピュータアーキテクチャ.
「マイグレーションを支援する分散集合オブジェクト」
卒業研究 JCSPを用いたプログラム開発  池部理奈.
アドホックルーティングにおける 省電力フラッディング手法の提案
Parallel Programming in MPI part 2
理工学部情報学科 情報論理工学研究室 延山 周平
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
分散メモリ型並列計算機上での行列演算の並列化
アーキテクチャパラメータを利用した並列GCの性能予測
第8章 データベースシステムの発展 8.1 オブジェクトリレーショナルデータベース 8.2 分散データベース 8.3 インターネットとデータベース.
プログラミング 2 静的変数.
Presentation transcript:

クラスタコンピューティングの 並列環境と性能 建部修見 電子技術総合研究所 tatebe@etl.go.jp

クラスタコンピューティング ETL-Wiz(電子技術総合研究所)

ETL-Wiz(1) http://ninf.etl.go.jp/wiz/ Node 333MHz Alpha 21164 #PE 32 (+1) Cache L1:8KB, L2:96KB, L3:2MB Network Fast Ethernet Switch 1.2Gbps backplane OS Digital UNIX Software NFS/MPI/PVM http://ninf.etl.go.jp/wiz/

ETL-Wiz(2) UPSによる自動ブートとシャットダウン 共有コンソール ネットワークスイッチによる完全結合ネットワーク ロードモニタ http://ninf.etl.go.jp/wiz/load-monitor/ ロックファイルによるプロセッサ自動選択

MPI メッセージパッシングの標準 [1992-] 大多数の MPP, NOW 上に実装 実用性、高効率、ポータビリティ、柔軟性 AP1000/1000+/3000, Cenju-3/4, SR-2201/8000, SP-1/2/3, T3D/E, 大多数のWS/PCクラスタ, SMP

MPI の特徴 SPMDの通信ライブラリインターフェースの標準 ポータビリティ 実装方式を規定しない 抽象度の高いインターフェース コミュニケータ (ライブラリ、集合演算、トポロジ) FORTRAN77, C(, Fortran90, C++) 基本データ型のデータサイズに非依存 実装方式を規定しない 抽象度の高いインターフェース 効率的な実装の余地 柔軟性

並列プログラムにおける 主要なオーバヘッド 負荷バランス アルゴリズム、ランタイムで解決すべき? SPMDなので規則的な問題であればあまり問題にならない? 通信遅延

通信遅延隠蔽 通信遅延 計算と通信のオーバラップ 並列、分散環境の主要なオーバヘッド ノンブロッキング通信 (MPI) マルチスレッド実行 (pthread 等)

通信と計算のオーバラップ

オーバラップの例 ヤコビ法 jacobi() { int i, j; forall(i = 1; i < N - 1; ++i) forall(j = 1; j < N - 1; ++j) b[i][j] = .25 * (a[i - 1][j] + a[i][j - 1] + a[i][j + 1] + a[i + 1][j]); }

データ依存関係とデータ分散 ヤコビ法のデータ依存関係 2次元ブロックデータ分散

プロセストポロジ 2次元メッシュ #define FALSE (0); MPI_Comm comm2d; static int np[2] = { npy, npx }; static int periods[2] = { FALSE, FALSE }; int reorder = FALSE; MPI_Cart_create(MPI_COMM_WORLD, 2, np, periods, reorder, &comm2d); 次元数 周期的か? 各次元のプロセス数 ランクの変更可?

Naïve code /* 送受信先のプロセスランクの計算 */ MPI_Cart_shift(comm2d, 0, 1, &north, &south); MPI_Cart_shift(comm2d, 1, 1, &west, &east); /* 南北のプロセスとの通信 */ MPI_Sendrecv(&a[1][1], L_N-2, MPI_DOUBLE, north, NORTHTAG, &a[L_N-1][1], L_N-2, MPI_DOUBLE, south, NORTHTAG, comm2d, &st[0]); … /* 東西のプロセスとの通信 */ for(i = 0; i < L_N - 2; ++i) send_buf[i] = a[i + 1][1]; MPI_Sendrecv(send_buf, L_N-2, MPI_DOUBLE, west, WESTTAG, recv_buf, L_N-2, MPI_DOUBLE, east, WESTTAG, comm2d, &st[2]); MPI_Get_count(&st[2], MPI_DOUBLE, &count); for(i = 0; i < L_N - 2; ++i) a[i + 1][L_N - 1] = recv_buf[i]; /* 計算 */ for(i = 1; i < L_N - 1; ++i) for (j = 1; j < L_N - 1; ++j) b[i][j] = .25 * (a[i-1][j] + a[i][j-1] + a[i][j+1] + a[i+1][j]);

ブロッキング通信 buf の内容を読み書きできるようになるまでブロック int MPI_Send(buf, count, datatype, dest, tag, comm); void *buf; int count, dest, tag; MPI_Datatype datatype; MPI_Comm comm; int MPI_Recv(buf, count, datatype, source, tag, comm, status); int count, source, tag; MPI_Status *status; buf の内容を読み書きできるようになるまでブロック

ブロッキング送受信の注意点 バッファリングの有無は規定外 バッファリングがない場合、 MPI_Send() は対応する MPI_Recv() の発行が確認され、送信終了までブロック (= MPI_Ssend()) バッファリングが必要な場合、MPI_Bsend() を利用

ノンブロッキング通信 int MPI_Isend(buf, count, datatype, dest, tag, comm, req); void *buf; int count, dest, tag; MPI_Datatype datatype; MPI_Comm comm; MPI_Request *req; int MPI_Irecv(buf, count, datatype, source, tag, comm, req); int count, source, tag; int MPI_Wait(req, status); int MPI_Test(req, flag, st); MPI_Request *req; MPI_Request req; MPI_Status *status; int *flag; MPI_Status *st;

計算と通信のオーバラップ /* 送受信リクエストの発行 */ MPI_Irecv(…, &req[1]); MPI_Isend(…, &req[0]); /* ローカル計算 */ for(i = 2; i < L_N - 2; ++i) for(j = 2; j < L_N - 2; ++j) b[i][j] = .25 * (a[i-1][j] + a[i][j-1] + a[i][j+1] + a[i+1][j]); /* 送信リクエスト完了待ち */ MPI_Wait(&req[0], &st[0]); /* ローカルデータによる境界点の更新 (略) */ /* 受信リクエスト完了待ち */ MPI_Wait(&req[1], &st[1]); /* リモートデータによる境界点の更新 (略) */

ETL-Wiz による評価(1) N = 200

ETL-Wiz による評価(2) N = 400

ETL-Wiz による評価(3) N = 200

ETL-Wiz による評価(4) N = 400

通信遅延隠蔽のまとめ N=200(L3キャッシュ以下、計算<通信) N=400(L3キャッシュ以上、計算>通信) 35%程度性能向上 N=400(L3キャッシュ以上、計算>通信) 8%程度性能向上 計算順序変更によるキャッシュミス増大 2次元隣接通信では、プロセッサあたり N=400以上は必要