0
UPCの構造体内に共有配列を格納する必要があります。それは可能ですか?UPCの構造体がフィールドとして配列を共有できますか?
UPCの構造体内に共有配列を格納する必要があります。それは可能ですか?UPCの構造体がフィールドとして配列を共有できますか?
structフィールドは、staticまたはexternで宣言することができないのと同じ理由で、共有修飾することはできません。構造体フィールドは独立したストレージクラス情報を持ちません(構造体のフィールドは常に連続して格納されるためです)。例えば、スタック変数を宣言するために使用することができます)。
しかし、構造体は、配列フィールドを含んでいてもよい、及び構造体は、共有オブジェクトを定義するために使用することができ、例えば:
struct S {
int array[100];
int foo;
};
shared struct S data[THREADS];
...
data[MYTHREAD].array[0] = MYTHREAD;
しかし、この例では、データの分布を注意スレッドごとに構造体であります配列フィールドはスレッド間で独立して分散されません。
構造体はまた、例えば、共有配列へポインタを含んでいてもよい:この場合
#include <upc.h>
struct R {
shared int *sa;
int bar;
};
...
struct R r;
r.sa = upc_all_alloc(THREADS, sizeof(int));
r.sa[MYTHREAD] = MYTHREAD;
共用アレイスレッドに分散されているが、ストレージは、構造体中に埋め込まれていません - structフィールドはちょうどポインタと共有されています(Cルールのおかげで配列構文でアクセスできます)。
このような明確な回答をいただきありがとうございます。共有配列へのポインタを持つソリューションは、まさに私が必要としていたものです。 –