0
我需要在UPC中的一個結構中存儲共享數組。有可能嗎?UPC中的結構是否可以將共享數組作爲字段?
我需要在UPC中的一個結構中存儲共享數組。有可能嗎?UPC中的結構是否可以將共享數組作爲字段?
結構字段不能共享限定,出於同樣的原因,它們不能用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規則可以使用數組語法來訪問)。
非常感謝你的澄清答案!帶有指向共享數組的指針正是我所需要的。 –