例子:
parallel_for_each(mas.extend,[=](index<1> idx) restrict(amp)
{
...
}
index<1> idx 是如何工作的?假设,在 mas:array_view 的一组数字
例子:
parallel_for_each(mas.extend,[=](index<1> idx) restrict(amp)
{
...
}
index<1> idx 是如何工作的?假设,在 mas:array_view 的一组数字
也许不要将索引视为迭代器,因为这意味着通过容器的顺序迭代,但这是并行世界,所以我们不是从头开始到结束。
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++