gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:31 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com