新年早々卒論

新年あけましておめでとうございます。

卒論がやばいす。雑多。

一応卒論でやりたかったプログラムの作成が終了した。ここまで整理。OpenCLのプログラムを作成していくうちにやはり多くの制限があって、結局すべて仕様ということにして終わらせることにするしかない。今後の課題とか。

ぼくがしたかったのは結局「OpenCLによるヘテロジニアス環境の自動並列化」。ライブラリの次元を超えていたらしい。一行でOpenCLを使えちゃうというのはライブラリ開発というより自動並列化プログラムになるらしい。

で、計算機の情報を自動的に取得し、複数デバイス用に並列化をするところまではできたが、プログラムを作成していくうちにデバイス内も並列化する必要があるということがわかった。これは完全に自分の知識不足なのだが、勝手にOpenCLでデバイス内も並列化してくれているものだと思った。あほ。デバイス内も並列化するためにはソースコードの中にglobalidを含めなければならない。つまり、ソースコードを大幅に改変する必要があった(普通に考えれば至極当然のこと)。

具体的に何が問題かというと、ぼくがしたかったのはユーザーが普通に計算処理を書いて(行列和なら2重ループ、行列積なら3重ループみたいな)、それを自動的に並列化してくれるというものなんだが、この処理を並列化しようとしたら2つの並列化が考えられる。複数デバイスにデータを分けて並列化。または1つのデバイスに対する並列化(主にGPU等で使われる並列化)。で、ぼくは1つのデバイスに対する並列化はOpenCLが自動的に並列化してくれると思っていたため、一生懸命複数デバイスで並列化できるように頑張っていたが、実は更にそこから複数デバイス各々で並列化をすることが必要だった。つまり並列化したデバイス内を更に並列化。あほ。今月末の卒論提出なので時間ないけどもう少し頑張ってそこまでやろうかと思ったけど、そのためには、ユーザーが書いた計算処理の部分のソースを読み込んでforを解析しなければならず、さすがにそこまではできないから複数デバイスの並列化までにとどめた。
おそらく、この研究を最後までしつづけると、ユーザー側が計算したい部分を上にOpenMPみたいに一行ちょろっと書いてヘテロジニアスな環境での自動並列化になるんだと思う。

とは言っても複数デバイスの並列化も行列和程度しかできない。これも仕様。配列の簡単な計算しかできない。まぁしょうがない。プログラムが完成したが、いまから月末まではまとめる作業。
データもまだすべてとれてないし、結論をどうまとめるかも考え中。仕様もどこまで書くかも決まっていない。やばす。

新年早々、卒論の記事になってしまったがこんなときもある。毎年今年のまとめと来年の抱負も書いてたのに忘れてしまった。ぐぬ〜。また時間があれば書きます。