2012-12-01 56 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]];選擇整行數據。當您只將一個索引提供給多維數組時,它將選擇該維度內保存的所有數據。這篇文章使這個更清晰。