C++ AMP
首都大学東京 田川研究室
C++ AMP 目次へ

挨拶

こんにちは田川研究室です。今年2013年、田川研究室では3次元流体シミュレーションをやっている方が多く、計算機が使えない状態になってしまいしました。
このままでは卒研に低解像度の動画を載せることになってしまう。悲しい。ということで田川先生がGPUを買ってくれました。ありがとうございます。
GPUはCPUに比べて単純な演算回路しか積まれていませんが、複雑な命令でなければ普通に高速で動作します。流体計算なんかは基本的に同じことを永遠と繰り返すだけなのでとてもGPUに向いています。 しかし利用しようとなるとエクストラなプログラマスキルが求められてしまうということで普及が進んでいません。というわけで簡単に実装できる方法を2013年11月において探してみました。
なお、情報ソースに適当なところがあったり、誤字脱字が多かったりしますがご容赦ください。十分に承知しており、極力減らすように努力はしています。

C++ AMPとは

C++ AMPとはくらいににMicrosoftが提案したGPUDSPなどの演算器をプログラマが使いやすいようにC++言語を拡張したものです。

Microsoftが開発している規格です。 さらにMicrosoftはC++ AMPをオープン規格として仕様を全公開しました。これによりgccなどのコンパイラでも対応がすすめばあらゆる環境で用いれる言語となる可能性があります。 2014年後半になってLinux用コンパイラが提供されたとか。誰か検証してほしいですね。これでついにスパコンへC++ AMPを採用可能か?

つまり現在はほぼWindowsでしか動きません。まあWindowsでしか動かないからといって困る人はそう多くない気がしますが。しかしHPC分野に使用するとなると問題がありまして、Linuxで動いてくれないと話になりません。 今現在Windows上ならIntel,AMD,NVIDIA等どのGPU上でも動くようです。普及してくれるようにちょっと頑張ってみます。
CUDAOpenCLと比べてC++ AMPの知名度はまだ低いですが、その内容を見たところ大変きれいなコーディングができそうで、そして覚えるのが簡単そうでした。

OpenCLはAPI型なので関数をひたすら呼び出して設定をします。なかなかめんどくさいです。しかしどのGPUでも動きます。CUDAはNVIDIA製GPUでしか動きません。コーディング性は良いです。そこでCUDA、OpenCLの利点を兼ね備えたものがないかとひたすら探していたら、C++ AMPを見つけました。


C++ AMP、かなり使いやすそうではあるのですがC++の高度な知識が要求されるようです。しかし、どう見てもC言語などの関数型言語からAPIを駆使してGPUを操作するよりも理に適っている作りでした。お勧めします。

したがって私も普及に協力したいと思い、必要な機能を絞って解説しようと思いました。Micorosoftのページもあり、以外とわかりやすかったです。しかしあちらは言語の機能を述べているので実際に何に使うのかを説明しようと思いました。


そんなわけで調べたことを忘れないため、次調べる人の時間を削るため、および普及したことによる将来の自分のためにC++のフル機能がまだ使えない人でもとっつきやすく書いてみようと思いました。より実用的な内容とする予定です。
高額なGPUも買ってもらっちゃいましたし(笑)学校中に普及させなくては。

引用

田川先生、お礼を申し上げます。