09/02/13 00:04:13
>>492
PUREもELEMENTALもFortran95で導入されたキーワードで、関数やサブルーチンの
副プログラムの性質をコンパイラに教える修飾語。
PURE FUNCTION unko(x) などのように宣言の頭につけて使う。
PUREというのは、大雑把には副作用がないこと。それゆえ、並列に動作させても
値が変わらないので、コンパイラは並列化など最適化をやれる。
(PUREを満たさねばならない条件はいくつかあるので、kwskはマニュアル見てくれ)
ELEMENTALはPUREの中でさらにいい性質を持ったもの。
本来は1変数で定義してあっても、配列を引数にとって、配列を返すように使ってもいいもの。
たとえば、
REAL :: a(10), b(10)
b = SIN(a)
こういう使い方が組み込み関数では出来るわけだが、自作の関数でもこうやって使っても
いい場合にELEMENTAL (要素毎の意味) をつける。
これもコンパイラが利口なら、最適化をかけてくれるはず。
普通、DO..LOOP内に関数やサブルーチンの呼び出しがあると、呼び出し先で何が
あるかわからないので、最適化が抑止されるが、PUREやELEMENTALがあれば、
安心してコンパイラが最適化できる。(原理的にはw)