2012-12-01 27 views
4

我在Windows 8上使用C++ AMP与Visual Studio 2012.我有一个案例,我有2D array_view,experimentData和1D array_view,experimentFactors。我想遍历2D array_view的第一维和1D array_view的1维。这就是我所拥有的,但我经常得到错误,表示这里没有重载。我想要迭代第一维的numberOfTests。我想要行:C++ AMP遍历不同尺寸的array_views

auto test = experimentData[idx]; 

返回整行数据。我认为array_view上的section方法是做到这一点的方法,但我无法弄清楚。

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对象应该是experimentDataarray_view一个1×N个部分。 factors对象应该是来自experimentFactorsarray_view的单个项目。

澄清

experimentData的array_view具有M行和N列

experimentFactors的array_view具有M行

+0

每个的大小是多少?它是MxN和M,还是MxN和M * N? – Borgleader

+0

experimentData是MxN,experimentFactors是M –

+0

为什么从矩阵中提取整行?为什么不反过来呢? – Borgleader

回答

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]];选择整行数据。当您只将一个索引提供给多维数组时,它将选择该维度内保存的所有数据。这篇文章使这个更清晰。