0

例子:

parallel_for_each(mas.extend,[=](index<1> idx) restrict(amp)
{
...
}

index<1> idx 是如何工作的?假设,在 mas:array_view 的一组数字

4

1 回答 1

0

也许不要将索引视为迭代器,因为这意味着通过容器的顺序迭代,但这是并行世界,所以我们不是从头开始到结束。

index<1> idx

在您的示例中,idx是等级(维度)为 1 的索引对象。因此它索引到一维array_view容器中。即mas也应该是一维的。

array_view<const int, 1> mas;

在 parallel_for_each 主体内部,idx如果需要,可以使用索引来索引mas.

size_t i = idx[0]; 
int value = mas[i];

但是,在 array_view 中的绝对位置不重要的情况下,您不需要使用索引。里面的每一项mas都会被处理。

例如,如果 array_view 是一个二维值矩阵,那么您将拥有一个秩为 2 的索引,然后idx[0]将引用行并idx[1]引用列。

我发现这本免费的在线书籍对于理解这些概念非常有用:Parallel Programming with Microsoft Visual C++

于 2015-05-21T08:10:01.670 回答