http://blog.csdn.net/dreampursue/article/details/6278737

Trust 提供了两个vector容器:host_vector 与 device_vector。按照命名规则,host_vector位于主机端,device_vector位于GPU设备端。Trust的vector容器与STL中的容器类似,是通用的容器,可以存储任何数据类型,可以动态调整大小。以下源代码展示如何使用Thrust的vector容器。

[cpp] view plaincopy
  1. # include <thrust / host_vector .h>
  2. # include <thrust / device_vector .h>
  3. # include <iostream >
  4. int main ( void )
  5. {
  6. // H has storage for 4 integers
  7. thrust :: host_vector <int > H (4);
  8. // initialize individual elements
  9. H [0] = 14;
  10. H [1] = 20;
  11. H [2] = 38;
  12. H [3] = 46;
  13. // H. size () returns the size of vector H
  14. std :: cout << "H has size " << H. size () << std :: endl ;
  15. // print contents of H
  16. for ( int i = 0; i < H. size (); i ++)
  17. std :: cout << "H[" << i << "] = " << H[i] << std :: endl ;
  18. // resize H
  19. H. resize (2) ;
  20. std :: cout << "H now has size " << H. size () << std :: endl ;
  21. // Copy host_vector H to device_vector D
  22. thrust :: device_vector <int > D = H;
  23. // elements of D can be modified
  24. D [0] = 99;
  25. D [1] = 88;
  26. // print contents of D
  27. for ( int i = 0; i < D. size (); i ++)
  28. std :: cout << "D[" << i << "] = " << D[i] << std :: endl ;
  29. // H and D are automatically deleted when the function returns
  30. return 0;
  31. }

如这个例子所示,运算符”=”可以用来复制host_vector到

device_vector(反之亦然)。 运算符”=”也可以用来复制host_vector到host_vector或device_vector到device_vector。同样device_vector访问单个元素可以使用标准的括号表示法。但是,由于每次访问需要调用cudaMemcpy,应谨慎使用。下面我们将看看一些更有效的技术。

初始化所有向量的元素为特定值、或从一个vector向另一个拷贝特定值,是非常常用的技术。Thrust提供了一些方法可以完成这些种操作。

[cpp] view plaincopy
  1. # include <thrust / host_vector .h>
  2. # include <thrust / device_vector .h>
  3. # include <thrust / copy .h>
  4. # include <thrust / fill .h>
  5. # include <thrust / sequence .h>
  6. # include <iostream >
  7. int main ( void )
  8. {
  9. // initialize all ten integers of a device_vector to 1
  10. thrust :: device_vector <int > D(10 , 1);
  11. // set the first seven elements of a vector to 9
  12. thrust :: fill (D. begin () , D. begin () + 7, 9);
  13. // initialize a host_vector with the first five elements of D
  14. thrust :: host_vector <int > H(D. begin () , D. begin () + 5);
  15. // set the elements of H to 0, 1, 2, 3, ...
  16. thrust :: sequence (H. begin () , H. end ());
  17. // copy all of H back to the beginning of D
  18. thrust :: copy (H. begin () , H. end () , D. begin ());
  19. // print D
  20. for ( int i = 0; i < D. size (); i ++)
  21. std :: cout << "D[" << i << "] = " << D[i] << std :: endl ;
  22. return 0;
  23. }

这里我们看到了fill、copy、sequence的使用方法。copy函数可以用来拷贝主机端或者设备端的数据到另外一个vector。与STL中的类似,fill用于简单的向一段元素赋特定值。sequence可以用来生成等差数列。

Thrust命名空间

你可能会注意到在我们的例子中使用了thrust::host_vector 或 thrust::copy的字段。其中thrust::告诉编译器在thrust命名空间中查找函数与类。命名空间是一个很好的方式避免命名重复。例如,thrust::copy就可以与STL中的std::copy区别开来。C++的命名空间允许我们使用这两个copy函数。

转载于:https://www.cnblogs.com/Vulkan/archive/2012/11/29/7530195.html

Thrust快速入门教程(二)——Vector的使用相关推荐

  1. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

  2. Thrust快速入门教程(三)——迭代器与静态调度

    在这节中我们曾使用了这样的表达式,H.begin() .H.end().D.begin() + 7.begin()与end()的返回值在C++中被称为迭代器.vector的迭代器类似于数组的指针,用于 ...

  3. Thrust快速入门教程(一)——简介

    Thrust 是一个类似于STL的针对CUDA的C++模板库.Trust提供与CUDA C完全兼容的接口,可以使我们高效地编写高性能并行程序. Thrust提供了丰富的数据并行算法,例如scan.so ...

  4. ThinkPHP3快速入门教程二:数据CURD

    CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...

  5. sklearn快速入门教程:(二)线性回归

    文章目录 一.从本文起学会快速阅读和学习 二.线性回归的原理回顾及官方文档 三.官方文档的分析 四.举一反三 五.小结 一.从本文起学会快速阅读和学习 本来是想把关于快速阅读的说明写在前一节,但最后还 ...

  6. 新手必备pr 2021快速入门教程「十二」PR导出高清视频

    PR2021快速入门教程,学完之后,制作抖音视频,vlog,电影混剪,日常记录等不在话下!零基础,欢迎入坑! 本节内容 视频剪辑成我们想要的样子后,接下来重要的一步,就是导出!但是"如何导出 ...

  7. ecshop二次开发的简单快速入门教程

    ecshop二次开发的简单快速入门教程,具体请下载文档 ecshop_dwt_lbi_详解.rar (106 KB) 下载次数: 9 转载于:https://my.oschina.net/u/3360 ...

  8. neon 指令 c语言,Neon指令集优化快速入门教程

    Neon指令集优化快速入门教程 Neon指令集优化快速入门教程 文章目录 1. Neon是什么? 2.Neon为什么速度快 3. Neon基础概念 4. Neon的C语言接口 C语言程序中集成Neon ...

  9. Python3数据分析——NumPy快速入门教程(官网教程翻译)

    目录 一.基础篇 1.创建数组 2.打印数组 3.基本运算 4.通用函数(ufunc) 5.索引,切片和迭代 二.形状操作 1.更改数组的形状 2.组合(stack)不同的数组 3.将一个数组分割(s ...

最新文章

  1. Facebook 的AI翻身之战!
  2. 五.获得MYSQL数据库自动生成的主键
  3. 阿里云ECS使用SSH连接CentOS 6.9经常断线的问题解决:OperationTimedOut
  4. 前瞻:Spring Boot 2.4.0 第二个里程碑版本发布
  5. Android Studio 受不了了
  6. OPhone2.0应该重在中文应用体验
  7. VMware Skyline
  8. 表的插入、更新、删除、合并操作_5_通过其它表插入
  9. 基于生命周期理论的农业科学数据中心化管理模式
  10. linux 省内存的桌面,Linux_在Linux中可视化显示内存占用情况的方法,物理内存不足对Linux桌面系统 - phpStudy...
  11. GITHUB来获得UE4源代码
  12. SQL2005数据库连接
  13. opencv-python 鼠标事件和坐标点截图
  14. 微软Windows Hello曝漏洞!外接一个USB摄像头,分分钟破解你的电脑
  15. 千峰python资料下载_千锋Python基础视频教程全集下载
  16. 【IT项目管理】第5章 保障项目进度
  17. Tomcat 弱密码爆破 漏洞复现
  18. 鉴相器 matlab,MATLAB锁相环仿真程序求解
  19. 【零基础学Python】Day7 Python基本数据类型之Set
  20. Android车载技术之蓝牙通讯——如何蓝牙播放音乐

热门文章

  1. 企消互动广告:网络时代广告活动的创新形式——兼谈杜丽反败为胜对企业的启示...
  2. python接口自动化(十四)--session关联接口(详解)
  3. nagios二次开发(一)---开发思想
  4. Entity Framework CodeFirst尝试
  5. Oracle常用系统表
  6. UVA11992不错的线段树段更新
  7. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
  8. 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
  9. 【SeeMusic】音频编辑 ( 进入音频编辑页面 | 音频延迟设置 )
  10. 【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )