• トップ
  • G-DEPについて
  • ご購入ガイド
  • サポート
  • お問い合わせ

G-DEPトップ  >  G-DEPの高速演算記  >  高速演算記 第15回 QLogic Limited日本支社 郡司 茂樹様

高速演算記 第15回 QLogic Limited日本支社 郡司 茂樹様

今回の高速演算記 第15回はQLogic Limited日本支社 郡司 茂樹様より
インターコネクト選択で失敗しないためのポイントをご紹介していただきます。
 

GPU搭載ノードをつなぐ技術 
              ~GPUクラスターから性能を引き出すポイント~


最近、性能/電力比の改善をめぐる動きが盛んだ。従来からのGPU、FPGA、Intel MICに加え、低消費電力で知られるARMが64ビットアーキテクチャーARMv8を発表したり、TIがDSPに浮動小数点演算器を載せたりと、HPC界にとっても楽しみなニュースが相次いでいる。スマホやタブレットの進化が、拍車をかけている形だ。

そのなかにあって、ここ数年来のGPGPUの普及は群を抜く。現実的な消費電力で実現できる、完全にプログラミング可能な大規模並列プロセッサー環境として、HPCの世界ではもはや知らない人はいないだろう。

計算作業を分割すれば、GPU に搭載されている膨大な演算資源を活用した並列処理が可能となる。そのGPU を複数基、HPC クラスターに統合すれば、HPC クラスターの性能は大幅に向上する。これがGPUクラスターの基本的な発想だ。そのGPUクラスターから性能を引き出すには、GPUの高い処理能力に見合った「高性能」な通信デバイス、インターコネクトの選択を正しく行うことが重要になる。一見当たり前の話ではあるが、何を持って「高性能」とするかは実はそう単純な話でもない。そこで本稿では、インターコネクト選択で失敗しないためのポイントをご紹介しよう。具体的なキーワードは「NVIDIA GPU Direct」と「オンロード」だ。以下、順を追って解説する。
 

GPU Directの効用

高性能インターコネクトでは、GPUと同様、CPUを介さずにデータ転送を行う「DMA方式」を採用する。DMAを行うには、ホストメモリ上に確保されたバッファが、デバイスから独占的に使用できる必要がある。CUDAではpinnedメモリの名前でお馴染みの領域のことだ。インターコネクト用にも同様のメモリ領域が必要となるが、通常これはpinnedメモリとは独立した領域として確保される。そのためGPUと連携して動かそうとすると、その間でコピーが発生し、効率が悪化してしまう。

そこでNVIDIAが提唱したのがGPUDirectだ。GPU Directに対応したデバイスは、pinnedメモリへ直接アクセスできるようになる。InfiniBand(以下IB)はいち早くGPU Directに対応したインターコネクトであり、NVIDIA GPUとの相性はきわめて高い。

GPU Directの利用は簡単だ。まずはGPUクラスターにパッチを当て、システムをGPU Direct Readyの状態にしておく必要があるが、いったんこの対応を行ってしまえば、あとはMPIの送受信バッファを確保する際、pinnedメモリ上に確保するよう変更してやるだけでよい。 

 
 a_h = malloc(NBYTES);

  …    

 free(a_h);

 
   
 cudaMallocHost( (void **) &a_h, NBYTES);

 …

 cudaFreeHost(a_h);

 


 こうして確保したバッファーへ、GPUメモリから送りたいデータを持っていき、通常どおりMPI関数を使って送受信する。受信ホストでGPUメモリに載せたければ、再びcudaMemcpy()で持っていく。Pinnedメモリの活用により、GPU-ホスト間のデータ転送も速くなり、ホスト-ホスト間通信も速くなる。注意点としては、pinnedメモリの確保/開放は高価な操作となるため、使用頻度を控え、いったん確保したものをなるべく使いまわすといった配慮を行いたい。

上の例はGPU Direct v1でのプログラミング例である。GPU Direct v2ではプログラミングはもっと簡便になるが、実際のデータの流れはv1と変わらない関係上、性能もv1と変わらない。

GPU Directの有効化により、実際にどのくらい性能が向上するのか、分子動力学ソフトウェアAmberを例に見てみよう。Tesla M2050を合計8枚、4ホストに2枚ずつ載せた構成で、各ホストの基本スペックはIntel X5570 2.93 GHz x2 + 24GBメモリ、QLogic TrueScale QDR InfiniBandで接続した環境を用意した。


この比較では、GPU Directを有効化することにより44%性能が向上している。インターコネクト選択の第1のポイントとして「GPU Direct対応」をあげたが、これは外せない要素だろう。

GPU Directを利用するには、あらかじめGPUクラスターにパッチを当てる必要があると書いたが、実際に必要となる作業はインターコネクト・デバイス毎に様々である。QLogicでは、IBソフトウェアを2種類提供している。
QLogicダウンロードページ から落とせる無償の「QLogic OFED+」と、その製品版である有償の「IFS」であるが、そのいずれにも、GPU Directを実現する上で必要な一切合切が付属している。しかもCUDA 3.1、3.2、 4.0での動作確認済みだ。作業自体も簡単で、当てる必要があるのはNVIDIA ドライバーに対するパッチのみ、しかもたった4行の非常にシンプルなパッチで、作業時間もかからない。

GPU Directに対して消極的なユーザーは、このパッチ当て作業に不安を抱えているケースが多いのではないだろうか? 実は他社のIBの場合、NVIDIAドライバーに対するパッチだけではなく、Linux カーネルに対するパッチも・・・

続きを読むには...

この記事は会員限定のため、G-DEP会員登録(無料)が必要となります。
未登録の方は「登録」ボタンをクリックしG-DEP会員登録を行ってください。
※会員登録をされますと記事の閲覧の他、コメント投稿も可能になります。

新規登録  ログイン