当前位置:   article > 正文

C++ AMP 介绍(二)_c++ amp array_view 的参数 必须是容器吗

c++ amp array_view 的参数 必须是容器吗

C++ AMP 介绍(二)

最后更新日期:2014-05-02

阅读前提:《C++ AMP介绍(一)》

环境:Windows 8.1 64bit英文版,Visual Studio 2013 Update1英文版,Nvidia QuadroK600 显卡

内容简介

         介绍C++ AMP的 array、array_view、extent类和平铺的知识。

正文

数据的移动

         array和 array_view两个数据容器(模板类)用于把数据从运行时库(CPU)移到加速器(显卡或通用计算卡)上,array类在构造时建立数据的深拷贝,把数据复制到加速器(GPU)上,而array_view类是个包装类,仅仅当核心函数(kernel function)要用到数据时,才把源数据复制到加速器上。

  1. #include <amp.h>
  2. using namespace concurrency;
  3. //演示array类的使用方式
  4. void test_array()
  5. {
  6. //测试数据
  7. std::vector<int> data(5);
  8. for (int count = 0; count < 5; count++)
  9. {
  10. data[count] = count;
  11. }
  12. //构造array实例
  13. array<int, 1> a(5, data.begin(), data.end());
  14. parallel_for_each(
  15. a.extent,
  16. [=, &a](index<1> idx) restrict(amp)
  17. {
  18. a[idx] = a[idx] * 10;
  19. }
  20. );
  21. //array实例a不需要调用同步方法
  22. //但是需要赋值给data
  23. data = a;
  24. //输出0,10,20,30,40
  25. for (int i = 0; i < 5; i++)
  26. {
  27. std::cout << data[i] << "\n";
  28. }
  29. }


        array_view同array之间几乎有相同的成员,但是它们底层的行为不一样,所以当你建立两个指向同一个数据源的array_view实例时,实际上它们指向同一个内存地址,数据只有当需要的时候才会被复制到加速器中,所以你得注意数据的同步,array_view类的主要好处是数据仅当要被加速器用到的时候才会被移动。

   共享内存是能被CPU和GPU访问的内存,array类可以控制共享内存的存取方式,但是首先我们需要测试加速器是不是支持共享内存,下面是array使用共享内存的示例代码。

  1. int test_sharedMemory()
  2. {
  3. // 一台计算机中可能有多块加速器,取默认加速器
  4. accelerator acc = accelerator(accelerator::default_accelerator);
  5. // 测试默认加速器是否支持共享内存
  6. if (!acc.supports_cpu_shared_memory)
  7. {
  8. std::cout << "The default accelerator does not support s
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/245703?site
推荐阅读
相关标签
  

闽ICP备14008679号