GCCコンパイラのサポートによってOpenACCの魅力が広がる
Nicole Hemsoth

非営利標準化組織であるOpenACCは、アクセラレータをより簡単に使い、より普及させるために、これからなすべき多くの仕事がある。アナリストが同意するように、アクセラレータの利用が曲線に沿って上昇するためには、プログラム可能性と移植性が鍵である。
この2年間の間、OpenACCは、学界と産業界全体に渡るユーザーグループと共に、アクセラレータがより好まれるために何が必要か理解するために、ワークショップと会議を行い、多くの重要な改良を含む2.0規格を作った。その規格には、手続き呼び出し、入れ子になった並列化、動的なデータ管理などが含まれる。その企画書の冒頭で、OpenACCのエコシステムはPGI、CAPS、Crayによって、さらに詳しく説明され、x86、ARM、もちろん主要アクセラレータベンダーによって支持されている。
もちろん、主要な問題の一つは、OpenACCグループがフリーな実装を提供するかどうか、即ちオープンソースのOpenACCを提供するかどうかである。2013年11月14日に、グループは、要請に応えて次のように発表した。新メンバーであるルイジアナ州立大学、NOAA、Mentor Graphicsが、GCCコンパイラーのメインストリームなサポートとして、OpenACC拡張を開発してきた。
Mentor Graphics のNathan Sidwell氏の話によると、Linuxおよび組み込みシステムへのGCCに基づくツール群を開発してきた歴史に沿ってソースコードを得て、このようになった。MentorはGCCツール群へOpenACC 2.0の実装に取り組んでおり、来年公開の予定で、LinuxユーザーにとってOpenACCのオープンソース実装のひとつになるだろう。Sidwell氏によると、アクセラレーテッド・コンピューティングに対するGCCの既存の基盤技術のいくつかを取り込んではいるが、この時点でどのくらい独自の実装になるかは未確定で、LinuxのディストリビューターがどのようにGCCを構成するかも未確定である。
OpanACCプレジデントのDuncan Poole氏によると、この開発は、OpenACCがニッチな存在を抜け出すためにユーザーが異なる進路を決断する必要があるためであった。「オープン・ソース・プラットフォームの追加は、ソフトウェア開発がエクサスケール・システムへ向けて進歩する基礎となると共に、HPCを次の段階へ成長させるためにも、ヘテロジニアス・プログラミングを普及させるために重大です。」
非営利組織が望むところは、計算機科学分野以外でもクラスターへのアクララレータ利用が普及し、GPUや他のアクララレータについての経験が少ないプログラマーにも普及することである。それらのユーザーに対して、Poole氏は言う。レガシー・アプリケーション、例えば、Fortranで書かれたもの、作者や共同開発者が組織にいなくなってしまったもの、をサポートする必要がある。これらのアプリケーションを持つユーザーは、通常新しい機能をサポートする方法を必要とするが、新機能へ向かうためのカスタム・コードを求めていない。ここに、OpanACCの強力な有用性がある。
OpanACCは、バージョン1.0を2年続け、2013年夏に2.0をリリースした。それ以来、言及されるように、2.0を実装しようとしている。Crayは最近リリースされた8.2、CAPSは2013年12月と予告、PGIは2014年1月リリース予定である。重要な複数の機能に加えて、最も重要な機能は手続き呼び出しである。(最近NVIDIAに買収された) PGIのMichael Wolf氏とOpenACCの事務局によると、いくつかの他の問題に対処するために、フィードバックを使っている。
主要な目的は、ソースコードの読みやすさを保ち、複数のプラットフォームでの移植性を保証することである。そのために、OpanACCはディレクティブ(指示行)を使っている。プログラマーはCUDAあるいはOpenCLを深く理解している必要はない。アクセラレーターへのデータ領域の確保、ホストとアクセラレーターの間のデータ転送、アクセラレーターでの一連の処理、計算結果の転送、これらのことが、以前よりもより透過的に行える。
Wolfe氏によると、「気象、計算化学、流体シミュレーション、燃焼などを含む多くのアプリケーションにおいて、全てのOpenACCベンダーは経験を積んできています。我々はユーザーからとても有用なフィードバックを得ています。それによって、仕様と実装を進化させています。ユーザーの経験が増えると同時に、よりよい性能が導かれるでしょう。」
また、Wolfe氏によると、「C++のクラス、Cの構造体、Fortranの派生型、これらの多数の要素を持つ構造を持つデータ型、に含まれる配列についてのC/C++コードは、最も重要な機能のひとつです。しかし、現在、これらをサポートし実装する標準的な方法について、規格には標準がありません。特に、C++について。C++は規格が膨大な言語で、我々が自然で納得できる方法でサポートするためのフィードバックが難しいことは解っています。」
ワークショップと分析からの最高のフィードバックは本当に驚くことではないと、Wolfe氏は疑いなく語る。「C++について、クラスとテンプレート化されたクラスと配列であるクラス要素について、どのように記述され、本当にサポートする必要があるのでしょうか。C++についてだけでなく、Fortranについてもです。」
ワークショップで得られたものと一致して、ひとつの中心的なOpanACCへの寄与は、オークリッジ国立研究所(ORNL)であり、Titanと、コードを移植しているユーザー集団を持ち、移植しようとしている次の段階のアプリケーションをサポートするために、さらにはエクサスケール・システムへ向けてのテストベッドとなるために、OpenACCの安定性を熱望している。
ORNL所属科学者兼OpanACC開発者採用ディレククターであるOscar Hernandes博士によると、異なるメモリーの仕組みを持つ複数のアーキテクチュアに対して、ひとつのプログラミングモデルによってヘテロジニアス・プログラミングが可能になるから、ORNLにとってOpenACCは極めて重要である。「コードの移植性を保守できると同時に、リーダーシップ級のアクセラレーター・システムを使っている我々にとって、OpenACCは重要です。OpenACCは現在の仕事に解決策を与えると同時に、プログラマーにとって親しみやすいです。オープン・ソースの動きも、現在我々が持っているものより速く動きより多くのアプリケーションを使えるだけでなく、OpanACCのエコシステムを構築するために必要なものを進歩させて理解するために、重要です。」