c++ - 数据在 C++ AMP 数组中复制了多少次?
问题描述
我的加速器的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] << " ";
我的四个整数被复制了多少次?构造时是否将它们复制到 RAM 中Concurrency::array
?当循环开始时它们是否再次被复制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甚至是完整的放大器系列。
推荐阅读
- java - 循环给定最大值和范围
- python - 根据列中的值是整数(整数)的条件过滤数据框
- javascript - 动态加载未在 SVG 中呈现
- bash - 高于某个截止值的连续值的数量
- excel - 用于将数据从 DB 提取到 Excel 的 Shell 脚本
- mockito - AndroidViewModel 和单元测试
- django - Django:为 save.method 提取字典
- spring - 如何测试 Spring @EventListener 方法?
- c++ - C++ std::bind 到 std::function,VS2015 出了什么问题?
- c++ - 将十进制值转换为具有相同可见表示的十六进制值