Comments
Description
Transcript
GPU 統合型 CPU を用いた科学技術計算の高速化
408 GPU 統合型 CPU を 用いた科学技術計算の高速化 Acceleration of Scientific Computing by using GPU-integrated CPU ○正 非 高橋 徹(名古屋大学) 非 延山 龍介(名古屋大学) 正 大澤 尚希(名古屋大学) 学 飯盛 浩司(名古屋大学) 正 浅野 朗(名古屋大学) 松本 敏郎(名古屋大学) Toru TAKAHASHI, Naoki OSAWA, Hogara ASANO, Ryusuke NOBUYAMA, Hiroshi ISAKARI, Toshiro MATSUMOTO, Nagoya University, Furo-cho, Chikusa-ku, Nagoya, Aichi Key word : GPGPU, GPU-integrated CPU, Intel HD Graphics, FDTD, BEM, FEM 2) 研究背景と 目的 旧来はグラフィックス処理に特化した演算装置で あった GPU(Graphical Processing Unit)は,その高い並列演算処 理能力が注目されて,汎用的な並列演算処理に応用すること が 近 年 盛 ん に 行 わ れ て い る .こ の 種 の 研 究 開 発 を GPGPU (General Purpose computing on GPU)と 言 う .GPGPU は 2000 年頃の試行錯誤的な段階 を経 て,Nvidia 社が販売した ハードウェア(GeForce 8 シリーズ)と開発環境(CUDA)の 販売を契機として産学官に急速に普及した.今日では多種 多様なアプリケーション が GPU によ っ て加 速さ れて い る. GPU の 主 流 な 形 態 は 外 部 装 置 と し て PC に 装 着 す る も の で あ る( 以 下 , 「 外 付 け GPU」と 呼 ぶ ).一 方 ,GPU の 別 の 形態として,CPU と同じダイ上に備え付けられた GPU(以 下, 「 内 蔵 型 GPU」と 呼 ぶ )が 2010 年 頃 に 登 場 し た .代 表 的な製品は,AMD 社の Accelerated Processing Unit(APU) と Intel 社 の Intel HD Graphics で あ る .こ れ ら 内 蔵 型 GPU は ,CPU と メ モ リ を 物 理 的 に 共 有 し て い る た め ,外 付 け GPU で は パ フ ォ ー マ ン ス 上 の ネ ッ ク と な り 得 る デ ー タ 転 送 が 不 要( 論 理 的 に は 必 要 )で あ る 点 が 特 徴 で あ る .半 面 ,外 付 け GPU と 比 較 す る と ,内 蔵 GPU が 搭 載 し て い る 演算コア数は少ないために演算性能が小さい.また,GPU が 単 独 で 利 用 可 能 な メ モ リ 容 量 が 小 さ い .図 1 は ,Intel 社 の GPU 統 合 型 CPU で あ る Core i7 シ リ ー ズ に つ い て ,そ の CPU 部 と GPU 部(Intel HD Graphics)の 演 算 性 能( 単 精 度 浮 動 小 数 点 演 算 に 関 す る FLOPS 値 )の 推 移 を 示 す 1) .現 状 ,Intel HD Graphcs の 演 算 性 能 は ,外 付 け GPU で あ る Nvidia 社 の GeForce あ る い は Tesla シ リ ー ズ の 10 分 の 1 程 度 で あ る も の の ,CPU 部 と ほ ぼ 同 等 の 性 能 を 有 す る GPU 部 をモニタ出力以外にも有効に活用できれば有意義である. と こ ろ が ,内 蔵 型 GPU を 用 い て GPGPU を 実 践 す る に あ たって,プログラミングのノウハウが十 分蓄 積し てい ると は 言 い 難 い .こ の よ う な 状 況 の 中 で ,著 者 ら は 試 行 錯 誤 の 結 果 ,OS を Windows7 と す る Core i5 を 搭 載 し た PC を 用 い て ,OpenMP と OpenCL を 併 用 す る こ と に よ り ,Core i5 の CPU 部 と GPU 部 を 併 用( オ ー バ ラ ッ プ )で き る こ と を 確 認 し た .リ ス ト 1 は そ の 骨 組 み と な る 擬 似 コ ー ド で あ る . List 1 Parallelisation using OpenMP and OpenCL. および有限要素法(FEM)3) の簡単な場合に対して適用 し ,そ の 有 用 性 を 議 論 し て い る 。本 研 究 の 目 的 は ,当 該 の 併 用 並 列 計 算 手 法 を 3 次 元 時 間 領 域 差 分 法(FDTD 法 )に 適用することである. 104 K80 GTX TITAN Black GTX TITAN GTX680 M2090 103 GFLOPS 1 GTX280 C1060 GTX480 GTX285 8800GTX 8800GTX Ultra 101 2006 L3406 W5590 Core i7 960 2007 Core2 Duo E8600 2008 E7-4890 v2 E5-2678W 8800GTS Core2 Duo E6700K HD Graphics 4000 9800GTX 102 HD Graphics 5200 GTX580 E5-2699 v3 Iris Pro Graphics 6200 2009 Core i7 4770K E7-2870 Core i7 Core i7 2700K 3770K HD Graphics 3000 HD Graphics 2010 2011 2012 2013 E5-2697 v2 Core i7 6700K Intel CPU Intel Xeon Nvidia Geforce Nvidia Tesla Intel GPU 2014 2015 2016 Year Fig. 1 Transition of FLOPS for single precision. FDTD 法の概略と 並列化 2 2.1 概略 本 研 究 で 扱 う FDTD 法 は 標 準 的 な 定 式 化 に 従 う 4) . す な わ ち ,Maxwell 方 程 式 を Yee グ リ ッ ド( 総 セ ル 数 は Nx × Ny × Nz )による空間分割と Leap flog 法による時間積 分を用いて離散化する.開領域における電磁場散乱問題を 解 析 対 象 と し ,Mur の 吸 収 境 界 条 件 を 用 い る . FDTD 法 に お け る 主 要 な 計 算 タ ス ク は ,初 期 化 に 続 き , (i) 内 部 セ ル の 電 磁 場 の 更 新( 以 下 ,「 内 部 更 新 」),(ii) 境 界セルのそれ(「境界更新」),(iii) 電場・磁場ベクトルの出 力(「 ス ナ ッ プ シ ョ ッ ト 」)が 挙 げ ら れ る .こ こ で ,(iii) は 所定の時間ステップ数毎に行う. リ ス ト 2 は ,電 場 の 内 部 更 新 を す る た め の OpenMP 並 列 CPU コ ー ド で あ る .こ こ で ,Ex,Ey,Ez は 電 場 を ,Hx, Hy,Hz は 磁 場 を 格 納 す る float 型 配 列 で あ る .ま た ,float 型 配 列 C,Cx,Cy,Cz は 諸 パ ラ メ ー タ( 誘 電 率 ,透 磁 率 , 電 気 伝 導 率 ,グ リ ッ ド サ イ ズ ∆x,∆y ,∆z ,お よ び ,時 間 ス テ ッ プ 長 さ ∆t)か ら 事 前 に 計 算 す る . List 2 Parallel CPU code to update the electric field. #pragma omp parallel for #pragma omp parallel { for (int k = 1; k < Nz − 1; k ++) { id = omp get thread num() // CPU スレッド番号の取得 for (int j = 1; j < Ny − 1; j ++) { if (id == 0) { for (int i = 0; i < Nx; i ++) { CPU0 が OpenCL により任意の GPU コードを実行 int n = i + Nx ∗ (j + Ny ∗ k); } else { Ex[n] = C[n] ∗ Ex[n] + Cy[n] ∗ (Hz[n] − Hz[n − Nx]) − CPU0 以外が任意の CPU コードを実行 Cz[n] ∗ (Hy[n] − Hy[n − Nx ∗ Ny]); }} }}} 日本機械学会東海支部第 65 期総会・講演会講演論文集(’16. 3. 17-18) No.163-1 // Similarly, Ey[n] and Ez[n] are updated here. 著者らは上記の併用並列計算手法を,境界要素法(BEM) 併用並列化 タ ス ク (iii) の ス ナ ッ プ シ ョ ッ ト は ,書 き 出 す べ き 時 間 ス テ ッ プ の 電 磁 場 を 格 納 し た 配 列 Ex,Ey,Ez,Hx,Hy,Hz が メ モ リ ま た は HDD 上 に 書 き 出 さ れ る 以 前 に 次 の 時 間 ス テ ッ プ の 値 に よ っ て 更 新 さ れ て は な ら な い た め ,(iii) を (i) あ る い は (ii) と オ ー バ ー ラ ッ プ さ せ る こ と は 難 し い . 一方,タスク (i) と (ii) のそれぞれはセル単位で並列性があ る.そこで,素朴に,境界更新は CPU 部,内部更新は GPU 部により行う.各 CPU コアの役割は,使用可能な CPU コア 数が3以上あることを前提(実際,4 コア搭載の PC を使用) として,CPU0 が GPU コードの実行,CPU1 が電場の境界更 新 ,CPU2 が 磁 場 の 境 界 更 新 ,そ の 他 は 未 使 用 ,と 定 め る . 以 上 の よ う な 役 割 分 担 は ,各 タ ス ク の 必 要 算 術 演 算 回 数 ,必 要 メ モ リ ア ク セ ス 回 数 ,各 プ ロ セ ッ サ の 演 算 性 能 等 を 勘 案 し て い な い の で ,必 ず し も 最 良 と は 言 え な い が ,初 期検討としては有意義であろう. リ ス ト 3 は ,電 場 の 内 部 更 新 を 行 う た め の GPU カ ー ネ ル (OpenCL プ ロ グ ラ ム )で あ る .二 つ の float 型 配 列 C と D は 事 前 に 計 算 す る .な お ,CPU コ ー ド と は 異 な り ,四 つ の 配 列 C,Cx,Cy,Cz を カ ー ネ ル に 渡 す 場 合 よ り も 性 能 が 良 い .ま た ,各 GPU コ ア が 一 度 に 64 byte の デ ー タ を 読 み 込 めるようにワークアイテムを構成している. List 3 OpenCL kernel to update the electric field. int i = get global id(0); // 3次元のワークアイテムを使用 int j = get global id(1); int k = get global id(2); int n = i + Nx ∗ (j + Ny ∗ k); float D = D[n]; // D[n]:=1/(2∗Eps[n]−dt∗Sig[n]); Eps は誘電率 float C = C[n]; // C[n]:=2∗Eps[n]−dt∗Sig[n]; Sig は電気伝導率 float Cx = D ∗ ax; // ax:=2∗dt/dx; dt は時間ステップ長 float Cy = D ∗ ay; // ay:=2∗dt/dy; dx, dy, dz はグリッドサイズ float Cz = D ∗ az; // az:=2∗dt/dz Ex[n] = C ∗ Ex[n] + Cy ∗ Hz[n] − Cy ∗ Hz[n − Nx] − Cz ∗ Hy[ n] − Cz ∗ Hy[n − Nxy]; // Similarly, Ey[n] and Ez[n] are updated here. 1. セ ル 数 N が 大 き い 場 合 ,’HYBRID’ は’GPU’ と 同 等 で ある.この理由は,境界更新の計算量が O(N 2 ) である のに対して,内部更新は O(N 3 ) であるため,N が大き く な る と 境 界 更 新 が 全 体 の 計 算 時 間 に寄 与し な くな る た め と 考 え ら れ る .こ れ よ り ,セ ル 数 が 大 き い 場 合 に は ,内 部 更 新 に CPU と GPU を 併 用 す る の が 望 ま し い . 少 な く と も ,使 用 し て い な い CPU3 を 内 部 計 算 の 一 部 に用いるとよいと考えられる。 2. 逆に,N が小さい場合には境界更新の寄 与は小 さく な いので,本併用手法によって高い性能が得られている. 3. い ず れ の 手 法 の 性 能 も ,N ≈ 50 を ピ ー ク と し て 急 激 に 小 さ く な る .こ の 理 由 と し て 考 え ら れ る の は , CPU 部 と GPU 部 が 共 に 使 用 し て い る LLC(Last Level Cache;容 量 6MB;読 み 込 み 速 度 32B/cycle,書 き 込 み 速 度 64B/cycle)5) に ,CPU コ ー ド お よ び GPU カ ー ネ ル で 用 い て い る 六 つ な い し は 八 つ の 配 列(Ex,Ey, Ez,Hx,Hy,Hz,C,お よ び ,Cx,Cy,Cz,ま た は , D)を 格 納 で き る 限 界 が N ∼ 50 で あ る た め ,N > 50 で は 低 速 な メ モ リ(8B/cycle)へ の ア ク セ ス が 頻 発 す るためと考えられる. 4. 上記 1 で言及した N が大きい場合について詳し く見 る と,’HYBRID’ は’GPU’ よりもやや劣っている.この理 由 と し て は ,’HYBRID’ が 境 界 更 新 と 内 部 更 新 を 同 時 に 行 う た め に ,CPU 部 と GPU 部 が LLC を 食 い 合 う こ とが考えられる. 400 HYBRID GPU CPU 350 mega cells per sec 2.2 300 250 200 150 100 50 3 3.1 数値実験 計算条件 グ リ ッ ド サ イ ズ は ∆(= ∆x = ∆y = ∆z ) = 6.11 × 10−3 m と し て ,x,y ,z 方 向 に そ れ ぞ れ N (= Nx = Ny = Nz ) 個 のセルを設けた.誘電率および透磁率は一様に真空の値を 用 い た .電 気 伝 導 率 は 零 と し た .入 射 場 と し て ,計 算 領 域 の xy 断 面 の 中 央 を 通 り , z 軸 に 平 行 な ダ イ ポ ー ル ア ン テ ナ を 配 置 し た .ア ン テ ナ の 駆 動 周 波 数 は 2.45 GHz と し た . ま た ,∆t = 4.08 × 10−12 s と し て ,時 間 ス テ ッ プ 数 は 1000 と し た .な お ,ス ナ ッ プ シ ョ ッ ト は 行 わ な か っ た . 3.3 0 計算環境 本研究では GPU 統合型 CPU である Intel Core i5-4440 を搭 載した PC を使用した.GPU 部は Intel HD Graphics 4600 で ある.単精度浮動小数点数演算性能は,CPU 部が 422,GPU 部 が 352 GFLOPS で あ る .な お ,Intel SDK for OpenCL Application 2013 を OpenCL 開 発 キ ッ ト と し て 使 用 し た . 3.2 0 結果 図 2 は,提案手法(’HYBRID’)の性能結果を,’GPU’(す なわち,CPU 部による境界更新(2 スレッド使用)と,GPU 部 に よ る 内 部 更 新 を 逐 次 的 に 行 う 手 法 ),お よ び ,’CPU’ ( す な わ ち ,CPU 部 の み に よ る 境 界 更 新 と 内 部 更 新 を 逐 次 的 に 行 う 手 法;共 に 4 ス レ ッ ド 使 用 )の 各 結 果 と 比 較 し て い る .次 の よ う に 考 察 し た: 50 100 150 N cells 200 250 Fig. 2 Comparison of performance. 4 結論 本 研 究 は ,GPU 統 合 型 CPU を 活 用 す る た め の OpenMP と OpenCL に 基 づ く 併 用 並 列 計 算 手 法 を 3 次 元 FDTD 法 に 適 用 し ,数 値 実 験 に よ っ て そ の 有 効 性 を 確 認 し た . 参考文献 1) Wikipedia(https://en.wikipedia.org/wiki)の 項 目 List_of_Nvidia_graphics_processing_units,Intel_ HD_Graphics,お よ び ,Xeon よ り デ ー タ を 採 取 し た . 2) 大 澤 ほ か, GPU 統 合 型 CPU を 用 い た 二 次 元 ヘ ル ム ホ ル ツ方程式に対する境界要 素法 の 高速 化, 日本機械学会計 算 力 学 講 演 会 論 文 集, Vol.27, 2014. 3) 延 山 龍 介, GPU 統 合 型 CPU を 用 い た 2 次 元 有 限 要 素 法 の 並 列 計 算, 卒 業 論 文( 名 古 屋 大 学 工 学 部 ), 2015. 4) Allen Taflove. COMPUTATIONAL ELECTRODYNAMICS: The Finite-Difference Time-Domain Method. Artech House: Boston 2005. R Processor Graphics 5) The Compute Architecture of Intel Gen7.5, Version 1.0, 2014.