Intelコンパイラはここがスゴい、Xeon Phiで自動オフロード:CPU内蔵のGPUで演算も
「Intel Parallel Studio XE」が「2013 SP1」にバージョンアップした。プラグマを1行書くだけでXeon Phiや、第3世代Coreプロセッサ以降のCPUが備える統合GPUで演算処理を実行するコードを生成する機能を備えた。
米Intelが開発し、エクセルソフトが販売するx86プロセッサ向けソフトウェア開発ツール「Intel Parallel Studio XE」が「2013 SP1」にバージョンアップした。それに含まれるC/C++コンパイラの「Intel C++ Composer」はバージョン14になり、C++11規格やOpenMP 4.0への対応のほか、並列処理を高速実行する機能が追加された。具体的には、Xeon Phiや、第3世代Coreプロセッサ(開発コード名「Ivy Bridge」)以降のCPUが備える統合GPU「Intel HD Graphics」で演算処理を実行するコードを生成する機能である。ここでは、Xeon Phiを利用したオフロード処理に注目したい。今回の新バージョンで、ホストPCのOSとして、従来のLinuxに加え、Windowsにも対応した。
PCIeに接続するボードコンピュータ
Xeon Phiは、PCI Express(PCIe)バスに接続して使う数値演算用の拡張ボードである。「コプロセッサ」と呼ばれているが、実際にはボードコンピュータに近い。ホストとなるPCとは独立したメモリ空間を持ち、機種によって異なるが6G/8G/16Gバイトの独立した主記憶を備える。専用のLinuxが稼働し、ホストPCとは異なるIPアドレスが割り当てられる。ホストPCからはSSHなどでログインでき、プログラムはホストPCと独立して稼働する。
プロセッサについては、1つのコア当たり最大4スレッドを実行可能で、機種によって57/60/61コアを内蔵する。プロセッサコアは、uパイプとvパイプと呼ぶインオーダーのパイプラインを合計2本持つことからPentiumに近いが、32本の512ビットレジスタ(ZMM0〜ZMM31)とそのレジスタを利用する専用SIMD命令を備える。アドレスモードは64ビットのみだ。1クロック当たり2命令を実行可能だが(専用のSIMD演算命令は1クロック当たり1命令)、同一スレッドから連続して命令を発行できない。そのため、1TFLOPS以上というXeon Phiの倍精度浮動小数点演算性能を引き出すには、1コア当たり最低2スレッドを実行させる必要がある。
このような演算性能を備えるXeon Phiで稼働させるプログラムをIntel C++ Composerで開発する場合、大きく分けて2つの実行モデルがある。「オフロード実行モデル」と「ネイティブ実行モデル」だ。いずれのモデルでも、Intel C++ Composerを利用すれば、Xeon Phi向けの特別なコードを記述する必要はない。
プラグマを記述するだけ
オフロード実行モデルでは、そのプログラムの起動はホストPC側で行い、ソースコード上の一部分だけをXeon Phiで実行させる。Xeon Phiで実行させるコードの単位は、関数/メソッドだけでなく、forループなど任意の単位で指定可能だ。専用のプラグマを記述したステートメントがXeon Phiで実行されることになる。中カッコ「{ }」でくくれば、その中のコードがXeon Phiで実行される。
例えば次のコードを見てみよう。πを計算するプログラムである。
#include<stdio.h> #include<stdlib.h> #define INTERVALS 1000000000 int main( void ) { int i; double x; double pi = 0.0; double step = 1.0 / INTERVALS; #pragma offload target(mic) #pragma omp parallel for private(x) reduction(+:pi) for( i=0; i<INTERVALS; i++) { x = step * ((double)i - 0.5 ); pi += 4.0 / (1.0 + x * x ); } pi = step * pi; printf( "PI = %lf\n", pi ); return 0; }
12行目の「#pragma offload target(mic)」が、Xeon Phiで実行させることを指示するプラグマである。このコードではforループがXeon Phiで実行される。変数piの値は、ホストPCとXeon Phiの両方にあらかじめインストールしてあるミドルウェアによって、自動的にやりとりされる。ソースコード上に、ホストPCとXeon Phiとの間でデータをやりとりするためのコードを記述する必要はない。
オフロード実行モデルでは、コンパイラは、ホストPC用とXeon Phi用の2つのオブジェクトを生成する。プログラムを起動するのは、前述の通り、ホストPCである。
もしも、このプログラムを起動したホストPCにXeon Phiが実装されていない場合には、プラグマで指定したオフロード部分もホストPCで実行される。つまり、オフロード部分は、Xeon Phi向けのオブジェクトとともにホストPC向けのオブジェクトも生成されており、実行時にオフロード部分に入る直前でXeon Phiの有無を検知し、存在すればXeon Phiにオブジェクトを転送して実行、なければホストPCで同等の処理を実行する。
標準出力をホストに自動リダイレクト
これに対してネイティブ実行モデルでは、プログラム全体をXeon Phi向けにコンパイルする。生成される実行ファイルは、ホストPCでは動作しない。このモデルのプログラムを実行する方法は2つ用意されている。
1つは、NFSなどを利用してXeon Phiに実行ファイルと必要なライブラリを転送し、ホストPCからSSHなどでXeon Phiにログインした後、起動する方法だ。実行結果を画面(標準出力)に出力すればターミナルに表示されるし、ファイルに出力すればXeon Phiのファイルシステム上にそのファイルができる。
もう1つは、Intel Parallel Studio XEに用意されている「micnativeloadex」コマンドを使う方法だ。ライブラリのパスを環境変数に設定してから、micnativeloadexコマンドの引数に実行したい実行ファイル名を指定すると、このコマンドが必要なライブラリと実行ファイルをXeon Phiに転送し、起動する。ユーザーがXeon Phiにログインすることなく実行できる。この際、標準出力は自動的にホストPCにリダイレクトされる。つまり、Xeon Phiで稼働しているプログラムが標準出力に出力した文字列は、ホストPCのターミナルに表示される。
なお、Intel Parallel Studio XE 2013 SP1はすでに出荷中で、価格は35万9000円。有効なサポートサービスを持っている既存のユーザーは、無償でダウンロードして利用可能である。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 1U当たり48コア:データセンター向け高密度サーバ、日本IBMが発売
日本IBMは、データセンターに向けたx86サーバ「IBM NeXtScale System」を発売すると発表した。ノードは、高さが1U、幅がハーフサイズで、高さ6Uのエンクロージャに最大12台収納できる。 - 独自のI/O処理を実装:NECがXeon Phi搭載ラックサーバを発表
NECがXeon Phi搭載ラック型サーバを発表。最大で520スレッドの並列処理が可能で、旧モデルと比較して最大15倍の処理性能を誇る。 - 初代地球シミュレータを2ラックで:インテルが発表したメニーコア時代のコプロセッサ「Xeon Phi」
インテルが、並列処理向けのコプロセッサを発表。x86アーキテクチャによるメニーコアはGPGPUによる並列処理よりも、既存のソフトウェア資産が活用できるという。