Intelコンパイラはここがスゴい、Xeon Phiで自動オフロードCPU内蔵のGPUで演算も

「Intel Parallel Studio XE」が「2013 SP1」にバージョンアップした。プラグマを1行書くだけでXeon Phiや、第3世代Coreプロセッサ以降のCPUが備える統合GPUで演算処理を実行するコードを生成する機能を備えた。

» 2013年09月19日 13時12分 公開
[山口哲弘,@IT]

 米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

 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。