在 C++ AMP 数组中复制数据多少次?

How many times is data copied in a C++ AMP array?

本文关键字:数据 多少次 复制 C++ AMP 数组      更新时间:2023-10-16

我的加速器的default_cpu_access_type属性是access_type_read_write。假设我运行这个:

std::vector<int> v{ 1, 2, 3, 4 };
Concurrency::array<int, 1> a { 4, v.begin(), v.end() };
parallel_for_each(a.extent, [=, &a](Concurrency::index<1> i) restrict(amp) { ++a[i]; });
for (int i { 0 }; i < 4; ++i) std::cout << a[i] << " ";

我的四个整数被复制了多少次?构建Concurrency::array时,它们是否复制到 RAM 中?它们是在parallel_for_each循环开始时再次复制的,还是我的显卡以某种方式使用了 RAM 中的数据?如果我使用array_view而不是array怎么办 - 这会保存副本吗?

据我所知,当您声明数组并初始化它时,从 CPU 到 GPU 有一个传输。

然后你可以在 GPU 端(parallel_for_each循环内(自由使用它。 数组不包含数据的自动同步机制,所以我不确定当您在 for 循环中选择值时会发生什么。

如果选择array_view则数据的同步是隐式的。一个副本将在初始化时发生,另一个副本用于在选择值时将数据从 GPU 带回 CPU。

我向您推荐这篇博文 http://www.danielmoth.com/Blog/array-And-Arrayview-From-Amph.aspx 甚至是完整的放大器系列。