プログラミングの既存の基盤とこれから10年の並列処理
Nicole Hemsoth

より深いレベルでの並列処理、より多くのコア、より高いクロック周波数という対立において、HPCのハードウェア能力の利用は、現在ますます問題になっている。この意味において、現在がプログラミングを革命する正しい時期である。問題は、その革命が、既存の基盤の上で「政治的に」つまり平穏に起きるのか、それとも、既存のものをたいまつで焼き払うことになるかである。
計算能力の新しい時代のコードを考えるために「切り裂いて、交換する」アプローチについて騒々しい議論がある中で、Intelソフトウェア・ディレクターであるJames Reinders氏は、並列処理の先へ大きく前進する可能性を伴いながら、古いものと新しいものを混ぜるアプローチを主張している。
これらの結論として、Reiders氏は、新リリースの重要な部分であるOpenMP 4.0の明示的なベクトル・プログラミング機能だけではなく、多くの機能を持つ、 Intel’s Parallel Studio XE 2015を、2014年8月に発表した。
メニーコアの世界へ向けて整合性があるプログラミング・モデルを着実に継続することは、容易に想像できる。しかし、斜面は同じ傾きで登っていくものではない。古いものと新しいものをかみ合わせるIntelの試みの中心は、OpenMP 4.0の内部にある鍵となる要素であり、Reiders氏によると今までHPC業界によって完全には探検されていなかった「隠れた魅力 (hidden charms)」である。より詳しくは、新しいハードウェアの能力を開拓するための3つの鍵となる要素を、彼は指摘する。タスキング、ベクトル化、オフロードである。これは、OpenMP 4.0にまだ存在しない。次世代のコードの基礎となり、プログラミング・モデルを維持する可能性を実現する転回点となるために、それらは共同作業している。
Reinders氏は、「問題点は、新しい時代を切り開くコアとベクトル化が交差する限界に挑戦し続けられるでしょうか。プログラミングの問題を解決できるのでしょうか、それとも、既存の有力なコード基盤を捨てて新しい言語を学ぶ必要があるのでしょうか。」と問いかける。この問題に答えるために、Intelのチームは、世界中の共同作業者と共に、他のIntel特有の数値ライブラリーやツールに加えて、OpenMP 4.0によって可能性を強調していると、彼は指摘する。
現在のOpenMP 4.0によって解決できる問題は、既存のプログラミング環境の目標を達成して、新しい並列性というゴールに到達することではない。新しいリリースという同じ箱に含まれる、タスク、ベクトル化、オフロードという3つの目標は、まだ知識と教育と例題の段階にある。Reinders氏によると、最も多い質問は、一般的な標準の中で、何を解決できるかである。しかし、現在はまだ「タイアを蹴っている」段階である。Xeon Phiによる244並列の時代において、コミュニティーが過去へ戻れればいいのだが。
Reinders氏によると、OpenMP 4.0の隠れた魅力の例は、新しい「collapse」ディレクティブである。これは、本質的に、ベクトル化と同時に複数のコアにまたがるタスキングをコンパイラーが扱えるようにする。別のシナリオでは、タスキングとベクトル化を扱うループのオフロードを可能にする。言い換えると、ユーザーは3種類の問題に潜在的に同時に取り組んでいる代わりに、性能向上のために汚い作業をしている。Reinders氏が長所を強調するが、まだごく初期の実験段階で多くが失われてしまった。
リリースの主要な追加は、Reinders氏が重要性が増すと指摘する、明示的なベクトル・プログラミングである。これは、いくつかのHPCコードにおいて、CPUの電力効率を改善するという、重要な特徴もある。「現在の問題は、新しいベクトル命令セットを持つCPUで、どのようにコードを書き始めるかです。CやFortranのような言語は、そのように設計されていません。これらの言語は、1980年代から1990年代の並列処理のためにハックされてきました。コンパイラーにベクトル化のヒントを与えるディレクティブがあります。」
さて、代わりに自動ベクトル化のためにコンパイラーについて試行錯誤されている目標は、CやFortranのような言語を拡張し、コンパイラーがいかなる場合でもループをベクトル化できるように、ループをベクトル化できるという指示を、言語自体に埋め込むことだが、いくつかの問題点がある。OpenMP 4.0では、これは、コードをベクトル化する際の変更を最小限に抑えるように設計されている、「OMP SIMD」指示行によって達成される。ハック無しで自動ベクトル化できるコンパイラーの代わりの存在である。彼は、性能向上に関連する最小限のコード変更を強調する。
「10年以上前に導入されたSSEについて考えてみましょう。それは、4個の単精度浮動小数点あるいは2個の倍精度浮動小数点演算を同時にでき、クールでした。その後、AVXは、8個の単精度浮動小数点あるいは4個の倍精度浮動小数点演算を同時にできます。PhiのAVX512では、16個の単精度浮動小数点演算あるいは8個の倍精度を同時にできます。これは、途方もない違いです。」
言い換えれば、ハードウェアはより多くのことをする方法を見つけるが、ベクトル化されたコードとそうでないコードの速度の比は、16対1になった。例えば、「私は10年前にベクトル化を習ったが、コードの性能が2倍になって人々は興奮しました。しかし今では、16倍の違いです。これは、無視するには大きすぎます。」
他のコードについてどのように性能が向上するかについては、下図を参照するか、次のURLでParallel Studioのアップデートを調べて欲しい。
https://software.intel.com/en-us/intel-parallel-studio-xe/