C++ 数据在C+中复制了多少次+;放大器阵列?

C++ 数据在C+中复制了多少次+;放大器阵列?,c++,c++-amp,C++,C++ Amp,我的加速器的default\u cpu\u access\u type属性是access\u type\u read\u 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) r

我的加速器的
default\u cpu\u access\u type
属性是
access\u type\u read\u 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] << " ";
std::向量v{1,2,3,4};
并发::数组a{4,v.begin(),v.end()};
每个(a.extent,[=,&a](Concurrency::index i)restrict(amp){++a[i];})的并行_;

对于(inti{0};i<4;++i)std::cout,在声明数组并初始化它时,我可以看出有一次从CPU到GPU的传输

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

如果选择阵列视图,则数据同步是隐式的。一个拷贝将在初始化时发生,另一个拷贝将在您选择值时将数据从GPU带回CPU


我向您推荐这篇博文,甚至是amp上的完整系列。

谢谢,这很有用。我现在相信我的最后一行代码不涉及任何副本,因为CPU与加速器共享内存。此外,我认为您错误地认为,在初始化array_视图时复制数据-它会根据需要以特殊方式复制到加速器,并且在执行最后一行代码之前更新基础向量中的数据。