Knights Landingプログラマのための実践アドバイス
Tiffany Trader

国立エネルギー研究科学計算センター(NERSC)は次のスーパーコンピュータシステムであるCoriを2016年中頃までに導入する予定で進んでいる。1年以上先の話ではあるが、インテルの次世代Knights Landingアーキテクチャを搭載する30ペタフロップスを超える新しいCrayマシンの準備をするのに早すぎることはない。NERSCのディレクターであるSudip Dosanjhのシニア科学アドバイザーであり、NERSCユーザサービスグループを率いるRichard Gerberはそのように語った。
インテル、クレイ、NERSCおよび他の当事者達がスムーズな移行を目指して働いているが、メニーコア・アーキテクチャへの移行は、すべての並列性を活用するようにコードが書かれて最適化される必要があることを意味している。Gerberの記事はこの並列性の変化に対処し、どのように最大限に活用するのか示している。
「NERSC初のメニーコアシステムであなたのコードをうまく(あるいは少しでも)実行させるには、単にリコンパイルする以上のことが必要です。」とGerberは述べている。
新システムは、Cray XC環境内に収められた次世代Knights Landingアーキテクチャを装備したノードが9,300ノードを超えるだろう。これらの各チップは、倍精度で3テラフロップスを超える性能を提供する能力があり、すべて合わせるとHoper(別名 NERSC-6)の10倍のアプリケーション性能を可能にし、予測される理論最大性能はおおよそ30ペタフロップスだ。
「NERSCがCoriのようなシステムを取得することは不思議ではありません; HPCコミュニティは何が来るのか何年間も知っていました。」とGerberは書いている。「物理と技術の限界だけでなく、電力と冷却のコストに牽引され、未来のHPCシステムはその処理能力をGPUやIntel Xeon Phiのようなエネルギー効率の高いメニーコアプロセッサから得ることになります。これらのチップは数十から数百の相対的に低速なプロセッサコアから出来ており、性能を上げるには、同時にこれらのコアを並列に効率的に使うことができるコードのみが達成可能であることを意味しています。」
メニーコアシステムとなると、あるコードは他のコードよりうまく動くこととなる。
コードが全てのコアを動かし続けるように十分に細粒度な並列性を与えることができなかったり、ホストプロセッサからアクセラレータに動かすデータが多すぎると問題が発生する。アクセラレータによる計算のメリットは、データを移動するペナルティーを上回る必要がある。コードをうまく動かすには多くの努力を必要とするのだ。
オークリッジのGPUベースのTitanのようなメニーコアシステムは今でもしばらくの間動いてきたが、Cori用のプログラミングはIntel Xeon Phi「Knights Landing」部品を持つことで少し異なる、とGerberは説明する。GPUベースのシステムや初期のPhiシステムとは異なり、CoriのKnights Landingノードは「自己ホスト」モードで動作する予定だ。これはホストプロセッサのモデルとは異なる設定となる。オペレーティング・システムを含むすべてがノードの中で動作する。データをコプロセッサに移動することはもはや問題ではなくなり、データの局所性が問題となる、とGerberは説明している:
「データの局所性」は良く耳にすることだ。各KNLプロセッサが最大16GBの「オンパッケージ」もしくは「高帯域幅メモリ」(HBM)を持っており、非常に高速な帯域幅で潜在的に非常に良い性能を持っている。しかし、全てのデータ構造がHBMに収まらない場合、各ノードの従来のDRAMを使う必要があり、データをそこから計算ユニットに持ってくるコストが必要となる。そのため、できるだけHBMに存在するデータを使って計算をしたくなるだろう。
また、60+コアを動かし続けることも問題だ。では何をするのか?MPI実装のハイレベルな粗粒度の並列化から開始し、次にOpenMPを使ってコード中の計算集約ループをスレッド化(並列化)することをGerberは推奨している。ベクトル化はその次で、Phiベースのアーキテクチャでは特に重要であり、性能と効率はベクターユニットの効率的利用に依存している。
ここからはもっと具体的なアドバイスになるので、これがあなたに当てはまるならば、続きを読もう。また、オークランド科学施設で2月25日に開催されるNERSC初の「ハッカソン」も興味があればチェック。
追加のハンデイー・リファレンスとして、インテルがウェブページ上にすべて公的に利用可能なKnights Landingの開示情報をまとめている。