我在Windows 8上使用C ++ AMP和Visual Studio 2012.我有一个案例,我有2D array_view,experimentData
和1D array_view,experimentFactors
。我想迭代2D array_view的第一维和1D array_view的1维。这就是我所拥有的,但我不断得到错误,说这没有重载。我想迭代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
的1xN部分。 factors
对象应该是experimentFactors
array_view
中的单个项目。
澄清
experimentData
array_view有M行和N列
experimentFactors
array_view有M行
答案 0 :(得分: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
数组的创建方式是如何更改的。我声明它将是int_2
类型的一维数组。然后,我使用本文中讨论的投影技术,用= experimentData[idx[0]];
选择整行数据。当您只为多维数组提供一个索引时,它会选择该维度中保存的所有数据。这篇文章更清楚了。