Thrust快速入门教程(二)——Vector的使用
http://blog.csdn.net/dreampursue/article/details/6278737
Trust 提供了两个vector容器:host_vector 与 device_vector。按照命名规则,host_vector位于主机端,device_vector位于GPU设备端。Trust的vector容器与STL中的容器类似,是通用的容器,可以存储任何数据类型,可以动态调整大小。以下源代码展示如何使用Thrust的vector容器。
- # include <thrust / host_vector .h>
- # include <thrust / device_vector .h>
- # include <iostream >
- int main ( void )
- {
- // H has storage for 4 integers
- thrust :: host_vector <int > H (4);
- // initialize individual elements
- H [0] = 14;
- H [1] = 20;
- H [2] = 38;
- H [3] = 46;
- // H. size () returns the size of vector H
- std :: cout << "H has size " << H. size () << std :: endl ;
- // print contents of H
- for ( int i = 0; i < H. size (); i ++)
- std :: cout << "H[" << i << "] = " << H[i] << std :: endl ;
- // resize H
- H. resize (2) ;
- std :: cout << "H now has size " << H. size () << std :: endl ;
- // Copy host_vector H to device_vector D
- thrust :: device_vector <int > D = H;
- // elements of D can be modified
- D [0] = 99;
- D [1] = 88;
- // print contents of D
- for ( int i = 0; i < D. size (); i ++)
- std :: cout << "D[" << i << "] = " << D[i] << std :: endl ;
- // H and D are automatically deleted when the function returns
- return 0;
- }
如这个例子所示,运算符”=”可以用来复制host_vector到
device_vector(反之亦然)。 运算符”=”也可以用来复制host_vector到host_vector或device_vector到device_vector。同样device_vector访问单个元素可以使用标准的括号表示法。但是,由于每次访问需要调用cudaMemcpy,应谨慎使用。下面我们将看看一些更有效的技术。
初始化所有向量的元素为特定值、或从一个vector向另一个拷贝特定值,是非常常用的技术。Thrust提供了一些方法可以完成这些种操作。
- # include <thrust / host_vector .h>
- # include <thrust / device_vector .h>
- # include <thrust / copy .h>
- # include <thrust / fill .h>
- # include <thrust / sequence .h>
- # include <iostream >
- int main ( void )
- {
- // initialize all ten integers of a device_vector to 1
- thrust :: device_vector <int > D(10 , 1);
- // set the first seven elements of a vector to 9
- thrust :: fill (D. begin () , D. begin () + 7, 9);
- // initialize a host_vector with the first five elements of D
- thrust :: host_vector <int > H(D. begin () , D. begin () + 5);
- // set the elements of H to 0, 1, 2, 3, ...
- thrust :: sequence (H. begin () , H. end ());
- // copy all of H back to the beginning of D
- thrust :: copy (H. begin () , H. end () , D. begin ());
- // print D
- for ( int i = 0; i < D. size (); i ++)
- std :: cout << "D[" << i << "] = " << D[i] << std :: endl ;
- return 0;
- }
这里我们看到了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的使用相关推荐
- c语言类似于 n的标识符,C语言快速入门教程(二)
C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...
- Thrust快速入门教程(三)——迭代器与静态调度
在这节中我们曾使用了这样的表达式,H.begin() .H.end().D.begin() + 7.begin()与end()的返回值在C++中被称为迭代器.vector的迭代器类似于数组的指针,用于 ...
- Thrust快速入门教程(一)——简介
Thrust 是一个类似于STL的针对CUDA的C++模板库.Trust提供与CUDA C完全兼容的接口,可以使我们高效地编写高性能并行程序. Thrust提供了丰富的数据并行算法,例如scan.so ...
- ThinkPHP3快速入门教程二:数据CURD
CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...
- sklearn快速入门教程:(二)线性回归
文章目录 一.从本文起学会快速阅读和学习 二.线性回归的原理回顾及官方文档 三.官方文档的分析 四.举一反三 五.小结 一.从本文起学会快速阅读和学习 本来是想把关于快速阅读的说明写在前一节,但最后还 ...
- 新手必备pr 2021快速入门教程「十二」PR导出高清视频
PR2021快速入门教程,学完之后,制作抖音视频,vlog,电影混剪,日常记录等不在话下!零基础,欢迎入坑! 本节内容 视频剪辑成我们想要的样子后,接下来重要的一步,就是导出!但是"如何导出 ...
- ecshop二次开发的简单快速入门教程
ecshop二次开发的简单快速入门教程,具体请下载文档 ecshop_dwt_lbi_详解.rar (106 KB) 下载次数: 9 转载于:https://my.oschina.net/u/3360 ...
- neon 指令 c语言,Neon指令集优化快速入门教程
Neon指令集优化快速入门教程 Neon指令集优化快速入门教程 文章目录 1. Neon是什么? 2.Neon为什么速度快 3. Neon基础概念 4. Neon的C语言接口 C语言程序中集成Neon ...
- Python3数据分析——NumPy快速入门教程(官网教程翻译)
目录 一.基础篇 1.创建数组 2.打印数组 3.基本运算 4.通用函数(ufunc) 5.索引,切片和迭代 二.形状操作 1.更改数组的形状 2.组合(stack)不同的数组 3.将一个数组分割(s ...
最新文章
- Facebook 的AI翻身之战!
- 五.获得MYSQL数据库自动生成的主键
- 阿里云ECS使用SSH连接CentOS 6.9经常断线的问题解决:OperationTimedOut
- 前瞻:Spring Boot 2.4.0 第二个里程碑版本发布
- Android Studio 受不了了
- OPhone2.0应该重在中文应用体验
- VMware Skyline
- 表的插入、更新、删除、合并操作_5_通过其它表插入
- 基于生命周期理论的农业科学数据中心化管理模式
- linux 省内存的桌面,Linux_在Linux中可视化显示内存占用情况的方法,物理内存不足对Linux桌面系统 - phpStudy...
- GITHUB来获得UE4源代码
- SQL2005数据库连接
- opencv-python 鼠标事件和坐标点截图
- 微软Windows Hello曝漏洞!外接一个USB摄像头,分分钟破解你的电脑
- 千峰python资料下载_千锋Python基础视频教程全集下载
- 【IT项目管理】第5章 保障项目进度
- Tomcat 弱密码爆破 漏洞复现
- 鉴相器 matlab,MATLAB锁相环仿真程序求解
- 【零基础学Python】Day7 Python基本数据类型之Set
- Android车载技术之蓝牙通讯——如何蓝牙播放音乐
热门文章
- 企消互动广告:网络时代广告活动的创新形式——兼谈杜丽反败为胜对企业的启示...
- python接口自动化(十四)--session关联接口(详解)
- nagios二次开发(一)---开发思想
- Entity Framework CodeFirst尝试
- Oracle常用系统表
- UVA11992不错的线段树段更新
- 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
- 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
- 【SeeMusic】音频编辑 ( 进入音频编辑页面 | 音频延迟设置 )
- 【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )