0

我需要将共享数组存储在 UPC 的结构中。有可能吗?

4

1 回答 1

1

结构字段不能被共享限定,出于同样的原因,它们不能用 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;

在这种情况下,共享数组跨线程分布的,但存储没有嵌入到结构中 - 结构字段只是一个指向共享的指针(并且由于 C 规则可以使用数组语法访问)。

于 2017-06-08T01:41:09.433 回答