4

我在 Windows 8 上使用 C++ AMP 和 Visual Studio 2012。我有一个案例,我有 2D array_viewexperimentData和 1D array_view experimentFactors,. 我想遍历 2D array_view 的第一个维度和 1D array_view 的第一个维度。这就是我所拥有的,但我经常收到错误消息,说这个没有重载。我想迭代numberOfTests第一个维度。我想要这条线:

auto test = experimentData[idx];

返回整行数据。我认为上面的section方法array_view是做到这一点的方法,但我不知道怎么做。

array_view<int_2, 2> experimentData(numberOfTests, numberOfSolutions, initialConditionSet);
array_view<float_2, 1> experimentFactors(numberOfTests, factorData);
extent<1> e_size(numberOfTests);

parallel_for_each(e_size, [=] (index<1> idx) restrict(amp) {
    auto test = experimentData.section(idx);
    auto factors = experimentFactors[idx];

    analysisAlgorithm(test, factors);
});

test对象应该是experimentData array_view. 该factors对象应该是experimentFactors array_view.

澄清

experimentDataarray_view 有 M 行和 N列

experimentFactorsarray_view 有 M行

4

1 回答 1

4

如果您是从事 C++ 工作的人,并且您有类似这样的问题或处理将数据投影到不同维度的问题,请停下来阅读这篇文章:

http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/17/projections-in-c-amp.aspx

它以一种优美的方式处理了这个确切的问题。这是我的 parallel_for 循环现在的样子:

parallel_for_each(e_size, [=] (index<1> idx) restrict(amp) {
    array_view<int_2, 1> test = experimentData[idx[0]];
    auto factors = experimentFactors[idx];

    analysisAlgorithm(test, factors);
});

注意test数组的创建是如何改变的。我声明它将是一个 1D 类型的数组int_2。然后我使用文章中讨论的投影技术来选择整行数据= experimentData[idx[0]];。当您只为多维数组提供一个索引时,它会选择该维度中保存的所有数据。这篇文章更清楚地说明了这一点。

于 2012-12-02T05:55:04.467 回答