【问题标题】:C++AMP:How does the iterator workC++AMP:迭代器是如何工作的
【发布时间】:2015-05-20 14:31:59
【问题描述】:

示例:

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

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

【问题讨论】:

    标签: c++-amp parallel-foreach


    【解决方案1】:

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

    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++

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多