4

Chapelでは という表記を使って配列を宣言できるよう[][]です。これは他の言語の「配列の配列」に非常に似ているので、各サブ配列がメモリ内で個別に割り当てられた、いわゆる「ギザギザ配列」ではないかと思います。たとえば、次のコードでは、メモリ内で連続しているa[0][..]とは限りませんか? a[1][..](ここでの私の関心は、そのような使用が非連続メモリの[][]場合よりも効率が悪いかどうかです。)[,]

proc test( D1, D2 )
{
    var a: [D1][D2] int;   // "jagged" array?
    var b: [D1, D2] int;   // I assume this is a rectanguar (contiguous) array

    for i in D1 do
    for j in D2 do
        a[i][j] = i * 100 + j;

    for (i, j) in b.domain do
        b[i, j] = i * 100 + j;

    var lo = D1.low, hi = D1.high;

    writeln( "a = ", a );
    writeln( "a[ lo ] = ", a[ lo ] );
    writeln( "a[ hi ] = ", a[ hi ] );
    writeln();
    writeln( "b = ", b );
    writeln( "b[ lo, .. ] = ", b[ lo, .. ] );
    writeln( "b[ hi, .. ] = ", b[ hi, .. ] );
}

test( 0..1, 1..3 );

$ chpl test.chpl
$ ./a.out

a = 1 2 3 101 102 103
a[ lo ] = 1 2 3
a[ hi ] = 101 102 103

b = 1 2 3
101 102 103
b[ lo, .. ] = 1 2 3
b[ hi, .. ] = 101 102 103

関連する質問は次のとおりです。特定の変数または配列要素のメモリ位置 (アドレス) を知る (メモリ割り当てに関する情報を取得する) 方法またはコマンドはありますか?

4

1 に答える 1