GPUプログラミング

 大学ではGPUプログラミングをしています。研究もこの分野なのですが、この分野は日本ではまだまだマイナなようで、日本語の文献が少なかったりと、少々苦労しています。

 GPUとは、グラフィックカード上の演算装置のことで、これを上手く使うことで高速な演算ができるかもしれない、というのが研究内容なのですが、このプログラミングがなかなか上手くいきません。

 Cg(C for Graphics)という言語を用いてGPUを制御しているのですが、目下一番の問題は「記述はCライクに行えるが、実行はCライクとは限らない」ことです。

 たとえば、関数内でのreturn文の挙動がCとは違うようです。

if(a<=0) {
	return 0;
}

return 1;

 と書くと、Cでは変数aが0以下のときには0が返ってきますが、Cgでは常に1が返ってくるようです。これはコンパイルされるときに、最もネストされていないreturnを採用しているからではないかと思います。

if(a<=0) {
	return 0;
} else {
	return 2;
}

return 1;

 if文にelseをつけて、そちらでもreturnを使うと、正しく変数aを評価して動いてくれるようです。

 また、より大きな問題として、1つの関数内にreturnを複数書くと、挙動が推測できなくなります。

 上記の内容は、私的経験によるものであって、正規のドキュメントを精読しての発言ではないので、間違っている可能性があります。その可能性も踏まえて、目的のプログラムを完成させられるよう、これからも頑張っていこうと思います。