C++ AMP 迭代具有不同维度的 array_views

标签 c++ visual-c++ visual-studio-2012 gpgpu c++-amp

我在 Windows 8 上将 C++ AMP 与 Visual Studio 2012 结合使用。我有一个案例,其中我有 2D array_view、experimentData 和 1D array_view、experimentFactors。我想遍历 2D array_view 的第一个维度和 1D array_view 的第一个维度。这就是我所拥有的,但我经常收到错误消息,说没有为此重载。我想遍历第一个维度的 numberOfTests。我想要这条线:

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 对象应该是 experimentData array_view 的 1xN 部分。 factors 对象应该是 experimentFactors array_view 中的单个项目。

澄清

experimentData array_view 有 M 行 N 列

experimentFactors array_view 有 M 行

最佳答案

如果您是 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]]; 的整行数据。当您只为多维数组提供一个索引时,它会选择该维度中保存的所有数据。这篇文章使这一点更清楚。

关于C++ AMP 迭代具有不同维度的 array_views,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13664844/

相关文章:

visual-studio-2010 - ClickOnce 先决条件 : Error: published installer may be corrupt

entity-framework - ADO.NET 实体数据模型自动生成的代码违反代码分析 CA2214

c++ - 为什么主函数没有返回值?

c++ - 替换 C 代码宏并在 C++ 代码中定义常量

c++ - 无法消除警告 C4554

c++ - 如何使用函数 : C++ 创建线程

c# - VS中构建和发布的区别?

c++ - OSG地球相机位置

c++ - 使用 acm 将 Ogg 转为 Riff/Wave 编码

c++ - 使用 msvc 时,有没有办法获得有关错误上下文的更好信息? (例如 : C2248)