Visual C ++ AMP итерирует по массивам с различными измерениями

Я использую 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 строк

4

Решение

Если вы работаете над 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]];, Когда вы задаете только один индекс многомерному массиву, он выбирает все данные, хранящиеся в этом измерении. Статья проясняет это.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]