1

I need to store shared array inside a struct in UPC. Is it possible to do?

1 Answers1

1

Struct fields cannot be shared-qualified, for the same reason they cannot be declared with static or extern - a struct field does not carry independent storage-class information (ie because the fields of a struct are always stored contiguously, and could be used for example to declare a stack variable).

However, a struct may contain an array field, and the struct can then be used to define a shared object, eg:

struct S {
  int array[100];
  int foo;
};
shared struct S data[THREADS];
...
data[MYTHREAD].array[0] = MYTHREAD;

However note the distribution of data in this example is one struct per thread, the array field is not independently distributed across threads.

A struct may also contain a pointer to a shared array, eg:

#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;

in this case the shared array is distributed across threads, but the storage is not embedded in the struct - the struct field is just a pointer-to-shared (and thanks to C rules can be accessed with array syntax).

Dan Bonachea
  • 2,408
  • 5
  • 16
  • 31