見積依頼

株式会社HPCソリューションズ
2012年11月15日

インテル®MIC(Many Integrated Core、「マイク」と読みます)アーキテクチャーをベースとしたXeon Phi™コプロセッサ―製品は、グラフィックスカードの様なPCI Expressに装着するカードタイプです。 このため、GPUと同じ様に考えがちですが、プログラマーの視点から見るとだいぶ異なります。 この解説では現時点でのXeon Phi™製品の紹介とこれを利用するための開発環境について紹介します。

2012年11月時点ではXeon Phi™として以下の製品ががラインアップされました。

型式 5110P
コア数 60
コア周波数 1.053GHz
理論性能値(倍精度) 1.0108TFLOPS
メモリ GDDR5 8GB
メモリ帯域幅 320GB/s
TDP 225W
冷却機構 パッシブ(FANなし)

Xeon Phiの理論性能値は以下の様に換算します。

16 DP FLOPS/clock/core * 60 cores * 1.053GHz = 1.0108 TeraFlop/s.

Xeon Phiはコア毎に512-bit幅のベクタ実行パイプラインを備えているため、256-bit幅のXeon E5シリーズに比べ、倍の16命令を1クロックで実行できます。

MICの開発環境

インテルソフトウェア開発製品はXeon Phiの開発環境として利用できます。 インテルC++、Fortranコンパイラ、Math Kernelライブラリ(MKL)はインテルMICアーキテクチャに対応しました。 インテルComposer XE for Linux製品の場合、「MPSS package for linking to Intel® Xeon Phi™」というパッケージが同梱されます。 (ファイル名:KNC_gold-2.1.4346-16-rhel-6.3.gzなど。以下、MPSSパッケージと呼びます。) このパッケージはkernel依存性があり、現時点で対応するOSとkernelバージョンは以下の通りです。

  • Red Hat Enterprise Linux 64 ビット 6.0 カーネル 2.6.32-71
  • Red Hat Enterprise Linux 64 ビット 6.1 カーネル 2.6.32-131
  • Red Hat Enterprise Linux 64 ビット 6.2 カーネル 2.6.32-220
  • Red Hat Enterprise Linux 64 ビット 6.3 カーネル 2.6.32-279
  • SUSE Linux Enterprise Server SLES 11 SP1 カーネル 2.6.32.12-0.7-default
  • SUSE Linux Enterprise Server SLES 11 SP2 カーネル 3.0.13-0.27-default

MPSSパッケージにはMIC用ドライバー、MIC用OFED、MIC用GANGLIA、MIC用GDBなどが含まれます。 OFED(OpenFabrics Enterprise Distribution)は業界団体OpenFabrics Alliance (OFA) が開発するインフィニバンドのためのドライバとライブラリのセットです。 CPUとMIC間はPCI Expressで接続されていますが、MIC用OFEDドライバを介することで、従来のインフィニバンド向けに開発されてきたプロトコルを使用することが出来ます。 GANGLIAはPCクラスタシステムではお馴染みのツールで、CPUなどの現在の利用状況をWebモニターするツールです。 GDBはLinuxには標準で付属するデバッガーです。 この他にもMICをコントロールするための様々なツールが付属しています。

MPSSパッケージのインストールが終わると、MICの上ではOSが動き、ユーザはSSHでMICにログインすることが出来ます。 例えば、MICにSCPでプログラムをコピーし、MICの上で実行することが出来ます。 CPUとMICの間は、実際には、PCI Expressで接続されていますが、SSHなどでの接続を許すために仮想的なネットワークが作られます。 IPアドレスは自動的に以下の様に設定されます。

  デバイス IPアドレス
ホスト micbr0 172.31.1.254
MIC 0 mic0 172.31.1.1
MIC 1 mic1 172.31.1.1
MIC 2 mic2 172.31.1.2
MIC 3 mic3 172.31.1.3

マザーボードにもよりますが、Xeon Phi™コプロセッサ―は1台のサーバに8枚まで搭載可能です。上記の表のmic0、mic1というデバイス番号はOSが認識した順番に設定されます。 通常のIPアドレスと同様に/etc/hostsに設定すれば、MICにホスト名を割り当てることが出来ます。

ネットワークが出来たことで、ホストのファイルシステムをMICの上でNFSマウントすることも出来ます。 ホストの上でプログラムを作り、コンパイルした後、MICの上で実行する、という使い方が出来ます。

インテルMPIライブラリのMIC対応

インテルMPIライブラリ バージョン4.1ではインテルMICアーキテクチャに対応しました。 以下のMPI通信モードが追加サポートされました。

  • 1枚のXeon Phi上のコア間通信
  • 同じサーバ上のXeon PhiとCPUの通信
  • 同じサーバ上のXeon Phi同士の通信
  • 複数のサーバ間でXeon Phi、CPUの通信

インテルMPIライブラリはMPSSパッケージに含まれるMIC用OFEDのDAPLプロバイダーを使い、MPI通信を行います。 具体的な例として、ホストとMIC間でMPI通信を行うプログラムを実行する場合を紹介します。 残念ながら、MIC用とCPU用の実行モジュールは別々に作る必要があります。

(host)$ mpiicc test.c -o test 通常のCPUで動くモジュールのコンパイル
(host)$ mpiicc -mmic test.c -o test.mic MIC用のモジュールのコンパイル

これらのモジュールをCPUとMICで並列実行させるには、例えば、以下の様に実行します。

(host)$ mpiexec -n 2 -host ‹ホスト名› ./test : \
-n 2 -host ‹MICのホスト名› ./test.mic

この実行方法は少々面倒なので、インテルMPIライブラリでは新たに環境変数を用意し、もう少し簡単な手続きで実行する方法も用意されています。 例えば、MIC用実行モジュールには「 .mic」をつけていますが、その場合は以下の様に実行することが出来ます。

(host)$ export I_MPI_MIC_POSTFIX=.mic
(host)$ mpiexec -n 4 -hostfile ‹ホストリスト› ./test