Я использую C ++ AMP с Visual Studio 2012 на Windows 8. У меня есть случай, когда у меня есть 2D array_view, experimentData
и 1D array_view, experimentFactors
, Я хочу перебрать первое измерение 2D array_view и 1 измерение 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
объект должен быть разделом 1xN experimentData
array_view
, factors
Объект должен быть одним элементом из experimentFactors
array_view
,
осветление
experimentData
У array_view есть M строк и N столбцов
experimentFactors
Массив_view имеет M строк
Если вы работаете над C ++ и у вас есть вопросы, подобные этому, или если вы имеете дело с проецированием данных в разные измерения, остановитесь и прочитайте эту статью:
http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/17/projections-in-c-amp.aspx
Это решает эту точную проблему красивым способом. Вот как выглядит мой параллельный цикл:
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]];
, Когда вы задаете только один индекс многомерному массиву, он выбирает все данные, хранящиеся в этом измерении. Статья проясняет это.
Других решений пока нет …