UPC中的结构可以将数组共享为字段吗?

时间:2017-06-06 11:31:12

标签: parallel-processing upc

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

1 个答案:

答案 0 :(得分:1)

结构字段不能被共享限定,因为它们不能用static或extern声明 - 结构字段不带有独立的存储类信息(即因为结构的字段总是连续存储,并且可能用于举例说明堆栈变量。)

但是,struct可能包含一个数组字段,然后该struct可用于定义共享对象,例如:

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中 - struct字段只是一个指向共享的指针(并且由于C规则可以是使用数组语法访问。)