【发布时间】:2015-05-20 14:31:59
【问题描述】:
示例:
parallel_for_each(mas.extend,[=](index<1> idx) restrict(amp)
{
...
}
index idx 是如何工作的? 假设,在 mas:array_view 处的一组数字
【问题讨论】:
示例:
parallel_for_each(mas.extend,[=](index<1> idx) restrict(amp)
{
...
}
index idx 是如何工作的? 假设,在 mas:array_view 处的一组数字
【问题讨论】:
也许不要将索引视为迭代器,因为这意味着通过容器的顺序迭代,但这是并行世界,所以我们不是从头开始到结束。
index<1> idx
在您的示例中,idx 是等级(维度)为 1 的 index 对象。因此它索引到一维 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++
【讨论】: