この例が有効なのは、-xalias=craypointer (デフォルト) を使用してコンパイルした場合だけです。
parameter (n=20) integer a(n) integer v1(*), v2(*) pointer (p1,v1) pointer (p2,v2) p1 = loc(a) p2 = loc(a) a = (/ (i,i=1,n) /) ... v1(2:n) = v2(1:n-1) コンパイラは、これらの場所がオーバーラップしている可能性があることを前提とす る必要があります。 |
次に、オーバーラップしない Cray ポインタの例を示します。この場合は、-xalias=no%craypointer を使用してコンパイルします。この方が、より良いパフォーマンスを期待できます。
parameter (n=10) integer a(n+n) integer v1(n), v2(n) pointer (p1,v1) pointer (p2,v2) p1 = loc(a(1)) p2 = loc(a(n+1)) ... v1(:) = v2(:) Cray ポインタは、オーバーラップしたメモリー領域を指していません。 |