GPUを用いた疎行列の格納形式による行列ベクトル積の評価

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
大規模な三角 Toeplitz 線形方 程式の高速解法とその応用 ○ 安村 修一(法政大学 4 年) 李 磊(法政大学) 日本応用数理学会「行列・固有値の解法とその応用」研究部会 第6回研究会.
CPU/GPUを協調利用する ソフトウェア開発環境
在庫管理問題の動的計画法による 解法とCUDA を用いた高速化
MPIを用いたグラフの並列計算 情報論理工学研究室 藤本 涼一.
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
Chapter11-4(前半) 加藤健.
Intel AVX命令を用いた並列FFTの実現と評価
Fill-in LevelつきIC分解による 前処理について
高度情報演習1A “テーマC” 実践 画像処理プログラミング 〜画像認識とCGによる画像生成〜 第四回 演習課題 画像中からの物体抽出処理(背景情報を手がかりとして) 芝浦工業大学 工学部 情報工学科 青木 義満 2006/05/15.
ラスタグラフィックス (raster graphics)
全体ミーティング (4/25) 村田雅之.
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
データ構造とアルゴリズム 第10回 mallocとfree
DNASシステム上のアプリケーション起動シーケンスのための基盤であるdsh部分の性能評価
AllReduce アルゴリズムによる QR 分解の精度について
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
IT入門B2 ー 連立一次方程式 ー.
PCクラスタ上での 連立一次方程式の解の精度保証
大きな仮想マシンの 複数ホストへのマイグレーション
プログラムはなぜ動くのか.
半正定値計画問題に対する 行列補完理論の高速実装
理学部情報科学科 金田研究室 指導教官 金田 康正 工藤 誠
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
応用数理工学特論 第5回 計算理工学専攻 張研究室 山本有作.
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
正方行列向け特異値分解の CUDAによる高速化
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
Occam言語による マルチプリエンプティブシステムの 実装と検証
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
応用数理工学特論 第6回 計算理工学専攻 張研究室 山本有作.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
1.コンピュータと情報処理 p.18 第1章第1節 2.コンピュータの動作のしくみ CPUと論理回路
PGIコンパイラーによる ディレクティブベースのGPGPU
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
MPIとOpenMPを用いた Nクイーン問題の並列化
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
トーリックイデアルの グレブナ基底を求める アルゴリズム – F4およびF5 –
航空エンジンの翼列周り流れ解析のメニーコアシステム向け最適化
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
GPGPUによる 飽和高価値 アイテム集合マイニング
目的:高速QR分解ルーチンのGPUクラスタ実装
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
コンピュータアーキテクチャ 第 5 回.
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
アルゴリズムとデータ構造1 2009年6月15日
コンピュータアーキテクチャ 第 5 回.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
アルゴリズムとデータ構造 2010年6月17日
複数ホストにまたがるVMの 高速かつ柔軟な 部分マイグレーション
目次 はじめに 収束性理論解析 数値実験 まとめ 特異値計算のための dqds 法 シフトによる収束の加速
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
分散メモリ型並列計算機上での行列演算の並列化
情報処理Ⅱ 2005年11月25日(金).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

GPUを用いた疎行列の格納形式による行列ベクトル積の評価 コンピュータサイエンス専攻2年 200920710 久保田 悠司 指導教員  高橋 大介

研究の背景 GPU (Graphics Processing Unit)は個人のPC に搭載されるようになり,身近なものとなっている GPUの性能は年々上昇し,ピーク演算性能はCPU を上回っている 近年,GPUを汎用な演算に用いるGPGPU (General-Purpose computation on GPU)が注 目されている GPGPU 元々グラフィック演算を専門とするアクセラレータであるGPU を,より汎用的で自由度の高い計算に用いること 特に,N体問題や連立一次方程式などの科学技術計算によく用いられる

研究の目的 科学技術計算に用いられる連立一次方程式の多 くは疎行列を対象 疎行列は零が多いため,それを省略して格納 反復法で解くため,疎行列ベクトル積の性能が重要 疎行列は零が多いため,それを省略して格納 格納形式には様々な種類があり,行列ごとに最適 な格納形式は異なる GPU上での疎行列ベクトル積の高速化 格納形式を変換してから疎行列ベクトル積を行う 今回はその第一歩として, GPU上で各格納形式 を実装し,性能を評価する

GPUアーキテクチャ(Tesla C1060) 複数のコアを搭載したメニーコアプロセッサ それぞれのコアでスレッドを同時に実行できる 今回は,共有メモリは使用しない SP DP 共有メモリ (16KB) グローバルメモリ (4GB) ストリーミング プロセッサ 倍精度 ユニット マルチプロセッサ (SM)

CUDA(Compute Unified Device Architecture) NVIDIA社が提供している統合開発環境 C言語と同様の記述が可能 GPU上でのプログラムはスレッド単位で実行さ れる CUDAにおけるメモリ参照 32バイト,64バイト,128バイトごと 連続するスレッドで連続するメモリ領域にアクセスするほうが効率が良い 参照するメモリの先頭が64バイト,または,128バイト境界でアラインメント(整列)されていると,さらに効率が上がる

疎行列の格納形式 CRS(Compressed Row Storage)形式 行方向に走査し,零要素を省く CCS(Compressed Column Storage)形式 列方向に走査し,零要素を省く この2つの形式は格納が容易である val: 4 1 2 6 3 5 非零要素の配列 colind: 非零要素の列番号 7 9 rowptr: 上2つの配列での各行の先頭を表す配列 val: 1 3 4 2 6 5 非零要素の配列 rowind: 非零要素の行番号 7 9 colptr: 上2つの配列での各列の先頭を表す配列

1行あたりの非零要素数が多い順に行を並べ替える 疎行列の格納形式(2) JDS(Jagged Diagonal Storage)形式 1行あたりの非零要素数が多い順に行を並べ替える 行方向へ非零要素を詰める val: 2 4 1 6 5 3 非零要素の配列 colind: 非零要素の列番号 8 9 ptr: 上2つの配列での各列の先頭を表す配列 perm: 元の行列の行番号を表す配列 max: 各行の非零要素数の最大値

CUDAによる実装 CPU上でプログラムを起動 デバイスメモリに領域を確保し,ホストメモリか らデータを転送する スレッドを生成し,GPU上で動作させるプログ ラムを実行 結果をホストメモリへ転送する ホストメモリ CPU GPU デバイスメモリ デバイスからホストへ データ転送 ホストからデバイスへ データ転送 プログラムを起動 プログラムを実行

CUDAを用いた行列ベクトル積(CRS形式) 1 2 3 1 2 3 SP = SP DP 共有 メモリ × = y[0] = val[0] * x[colind[0]-1] + val[1] * x[colind[1]-1] val: 4 1 2 6 3 5 colind: 7 9 rowptr: 1 2 3 4 x: 入力ベクトルの配列

CUDAを用いた行列ベクトル積(CCS形式) 1 2 3 1 2 3 SP = SP DP 共有 メモリ × = + 同じアドレスに 書き込むときは 排他制御が必要 y[rowind[0]-1] += val[0] * x[0] y[rowind[1]-1] += val[1] * x[0] val: 4 2 6 1 5 3 rowind: 7 9 colptr: 1 2 3 4 x: 入力ベクトルの配列

CUDAを用いた行列ベクトル積(JDS形式) 1 2 3 1 2 3 SP SP DP 共有 メモリ × = = val: 2 4 1 6 5 3 colind: 8 9 ptr: perm: max: y[perm[0]] = val[0] * x[colind[0]-1] + val[4] * x[colind[4]-1] + val[7] * x[colind[7]-1] 1 2 3 4 x: 入力ベクトルの配列

評価 各格納形式での行列ベクトル積の実行速度を計測 計測はGPU上での実行時間のみ 倍精度演算を使用 評価環境 メモリの確保やデータ転送は含めない 反復法のように,GPU上で何度も呼び出すアプリケーションを想定 倍精度演算を使用 評価環境 CPU AMD Opteron 2350×2 メモリ 16GB GPU NVIDIA Tesla C1060 4GB 理論ピーク性能 78GFLOPS 開発環境 CUDA SDK 2.3 コンパイラ nvcc (-O3) version 2.3

評価(2) 評価ではUniversity of Florida Sparse Matrix Collectionから以下の疎行列を用いた Size 非零要素数 非零要素率 tmt_sym 726713 5080961 0.00096% mario002 389874 2097566 0.00138% ldoor 952203 42493817 0.00469% audikw_1 943695 77651847 0.00872% msdoor 415863 19173163 0.01109% F1 343791 26837113 0.02271% s3dkt3m2 90449 3686223 0.04506% x104 108384 8713602 0.07418% crankseg_2 63838 14148858 0.34719% nd24k 72000 28715634 0.55393%

評価結果 今回用いた疎行列では, JDS形式が高速 早 性能 CCS形式は他の形式と比べ, 大きな差がある 遅

考察 CCS形式が最も低速 JDS形式とCRS形式のちがい 今回の評価では,JDS形式が最も高速 それぞれのスレッド間で同じアドレスに書き込む場合に,排他制御を用いているため JDS形式とCRS形式のちがい 各スレッドのデータへの参照の仕方 JDS形式の方が,連続するスレッドが連続するメモリ領域にアクセスするため,効率が良い 今回の評価では,JDS形式が最も高速

連立一次方程式の求解による評価 連立一次方程式 反復法 CRS形式とJDS形式について評価   は疎行列、  は  の要素がすべて1となるようなベクトルを用いた 反復法 何度も計算を反復させることで理想的な値に近づけて行く Bi-CGSTAB法を用い,前処理は行わない 反復の上限は5000回 CRS形式とJDS形式について評価 JDS形式については,CRS形式で入力し,反復法を行う前にJDS形式に変換する 本研究の最終目的は,入力された疎行列によって 最適な格納形式に変換してから計算を行うため

連立一次方程式の求解による評価結果 遅 早 反復回数が少ないため,変換に要する時間の割合が多い CRS形式と同等以下の実行時間 CRS形式に対するJDS形式の実行時間の割合

関連研究 SILC(Simple Interface for Library Collections) [梶山ら,2005] 行列計算ライブラリインターフェース CPU上で疎行列の格納形式を変更し,行列ベクトル積の高速化を行った CG on GPU-enhanced Clusters [A.Cevahir,et al,2009] GPUクラスタ上での共役勾配法の実装 異なる格納形式の疎行列ベクトル積を数回実行し,最も高速なものを選択

まとめ CUDAを用いて,3つの格納形式での疎行列 ベクトル積を実装し,性能を評価した   ベクトル積を実装し,性能を評価した 評価結果から,今回用いた疎行列ではJDS形式が 最も高速であることがわかった JDS形式では,GPU上で効率の良いメモリ参照を行 うことができるからだと考えられる 連立一次方程式の求解による評価では,反復回数 によって最適な格納形式に違いが生じることがわ かった

今後の課題 他の疎行列での評価 他の格納形式の実装 各格納形式での行列ベクトル積の高速化 最適な格納形式への変換アルゴリズム より多くの疎行列で評価を行い,疎行列と格納形式との関連性を調べたい 他の格納形式の実装 本研究では3つの格納形式で実装し評価を行ったが,他の格納形式での実装,評価を行いたい 各格納形式での行列ベクトル積の高速化 共有メモリの使用や,アラインメントを考慮した実装を行うことで,高速化が可能 最適な格納形式への変換アルゴリズム 入力された疎行列によって,最適な格納形式に変換するアルゴリズムを実現したい

ご清聴ありがとうございました

audikw_1 tmt_sym msdoor mario002 ldoor F1

s3dkt3m2 x104 crankseg_2 nd24k

CPUでの性能評価 CPU1コアでの実行速度