gpt4 book ai didi

C++ AMP 嵌套循环

转载 作者:太空狗 更新时间:2023-10-29 21:00:22 24 4
gpt4 key购买 nike

我正在从事一个需要大量并行计算的项目。然而,棘手的问题是,该项目包含一个嵌套循环,如下所示:

for(int i=0; i<19; ++i){
for(int j=0; j<57; ++j){
//the computing section
}
}

为了获得最高 yield ,我需要并行处理这两级循环。像这样:

parallel_for_each{
parallel_for_each{
//computing section
}
}

我测试发现 AMP 不支持嵌套 for 循环。有人对这个问题有任何想法吗?谢谢

最佳答案

您可以像@High Performance Mark 建议的那样将两个循环合二为一。但是,您不需要使用 C++ AMP 执行此操作,因为它支持 arrayarray_view 上的 2 维和 3 维 extent。您可以使用 index 作为多维索引。

array<float, 2> x(19,57);
parallel_for_each(x.extent, [=](index<2> idx) restrict(amp)
{
x[idx] = func(x[idx]);
});

float func(const float v) restrict(amp) { return v * v; }

您可以使用以下方法访问 idx 中的各个子索引:

int row = idx[0]; 
int col = idx[1];

您还应该考虑计算部分 完成的工作量。如果它相对较小,您可能希望每个线程处理多个数组元素 x

下面的文章也值得一读,就像 CPU 一样,如果您的循环不能有效地访问内存,它会对性能产生很大影响。 Arrays are Row Major in C++ AMP

关于C++ AMP 嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22219669/

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