Может ли структура в UPC иметь общий массив как поле?
Мне нужно хранить общий массив внутри структуры в UPC. Можно ли это сделать?
1 ответ
Поля структуры не могут быть квалифицированы совместно, по той же причине, что они не могут быть объявлены статическими или внешними - поле структуры не несет независимой информации класса хранения (т. Е. Потому что поля структуры всегда хранятся непрерывно и могут использоваться для пример объявления переменной стека).
Однако структура может содержать поле массива, и структура может затем использоваться для определения общего объекта, например:
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;
в этом случае общий массив распределяется по потокам, но хранилище не внедряется в структуру - поле структуры является просто указателем на общий ресурс (и благодаря правилам C можно получить доступ с помощью синтаксиса массива).