【CUDA开发】Thrust库

Thrust库从C++的STL中得到灵感,将最简单的类似于STL的结构放在Thrust库中,比如STL中的vector。此外,Thrust库还包含STL中的算法和迭代器。
        Thrust函数库提供了两个向量容器,分别为主机和设备提供了向量类并且分别驻留在主机和设备的全局内存中。向量可以使用数组下标进行读取或者修改。然而,如果向量在设备上,那么对于每个这样的访问,Thrust通过PCI-E总线在后台执行单独的传输,因此,将这样一个结构放在循环里不是一个好的主意。
        Thrust提供了大量的函数类型集合,包括:转换(transformation),规约(reduction),前缀求和(prefix sum),再排序(reordering),排序(sorting)。Thrust并不是传统意义上的函数库,因为它的所有内容都在所包含的头文件中。因此,要避免包含所有的文件。只要包含需要的头文件就行了。
        通过如下代码,我们可以创建对应的host_vector和device_vector向量对象:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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是很容易的,只要添上对应的头文件,并加上命名空间就可以了。Thrust的vector同C++ STL标准库中vector类似,可以动态改变大小。其它的一些操作可以参看官方文档。

        一旦数据在Thrust设备向量或主机向量容器中,我们就可以使用大量Thrust提供的标准函数。比如,Thrust提供了一个简单的排序函数,该函数只需要提供向量开头和结尾的索引。它把任务分配到不同的线程块上并且执行任何规约和线程间的通信操作。下面举个排序函数的例子:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>
#include <thrust/copy.h>
#include <cstdlib>
#define NUM_ELEM (1024 * 1024)
int main(void)
{
    thrust::host_vector<int> host_array(NUM_ELEM);
    thrust::generate(host_array.begin(), host_array.end(), rand);
    thrust::device_vector<int> device_array = host_array;
    thrust::sort(device_array.begin(), device_array.end());
    thrust::sort(host_array.begin(), host_array.end());
    thrust::host_vector<int> host_array_sorted = device_array;
    return 0;
}

转载于:https://www.cnblogs.com/huty/p/8517917.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件:台式机老式键盘知识科普

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

高考填报志愿计算机操作技巧,高考志愿填报技巧经验

高考志愿填报技巧经验2020-12-30 14:43:23文/叶丹填报技巧&#xff1a;在所有科目考试结束后合理估分&#xff0c;提前参考往年录取分数线&#xff0c;明确各项重要的时间节点&#xff0c;搜集目标院校资料&#xff0c;查询目标院校专业近几年的位次情况&#xff0c;有意向的学…

npz文件转为npy_numpy的文件存储 .npy .npz 文件

1)Numpy能够读写磁盘上的文本数据或二进制数据。将数组以二进制格式保存到磁盘np.load和np.save是读写磁盘数组数据的两个主要函数&#xff0c;默认情况下&#xff0c;数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。import numpy as npanp.arange(5)np.save(test…

DML语句

DML语句 DML 操作是指对数据库中表记录的操作&#xff0c;主要包括表记录的插入&#xff08;insert&#xff09;、更新&#xff08;update&#xff09;、删除&#xff08;delete&#xff09;和查询&#xff08;select&#xff09;&#xff0c;是开发人员日常使用最频繁的操作。…

第四十五篇、UITableViewCell高度计算

由于tableView:heightForRowAtIndexPath:方法的调用频率非常高&#xff0c;如果将cell高度的计算过程放在此方法中&#xff0c;那么效率将会非常的低&#xff0c;快速tableview就会出现卡顿 1、通过代码 (在模型当中只计算一次cell高度&#xff0c;然后在方法中直接从模型属性当…

硬件知识:台式电脑主机各种接口介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

两条曲线所围成的面积_三个视频搞定:求曲边梯形面积的思想、微积分基本定理及其几何意义、微积分理论的可视化解读、...

● 本文适合高二下学期、高三一轮复习的同学阅读。先看视频再看文字&#xff0c;看视频时注意利用暂停&#xff0c;想清楚每一步变形的依据。01曲边梯形的面积、微积分基本定理的内容视频讲解1、曲边梯形的概念及面积求法(1)曲边梯形&#xff1a;由直线x&#xff1d;a&#xff…

我国对计算机信息系统安全主要是采取,附录信息网络安全监察法规概述二.doc...

附录信息网络安全监察法规概述二信息网络安全法律法规《计算机信息系统安全保护条例》福建省公安厅网安总队林世科10.2 《计算机信息系统安全保护条例》? 1994年2月18日&#xff0c;《中华人民共和国计算机信息系统安全保护条例》(以下简称《条例》)的颁布实施(国务院令第147号…

SQLServer基础:Apply关键字用法介绍

1、概念介绍APPLy关键字是SQLServer版本中开始提供的一个系统关键字。APPLY的功能同联接很类似&#xff0c;APPLY运算分左右两个部分&#xff0c;APPLY的右表达式&#xff1a;左表达式的每一行都和右表达式进行一次计算,即右表达式需要根据左表达式提供的值进行相关计算来获取相…

asp命令执行语句】_2分钟教你使用ASP.NET CORE创建并发布网页应用

>> 点击上方 懒人MES 关注我们准备环境: 只需要下载并安装 .NET CORE SDK 3.1(推荐3.1)微软官方下载地址: https://dotnet.microsoft.com/download/dotnet-core不需要Visual Studio, 也不需要VS Code, 一切操作都只在CMD命令行中完成, 而且只需要执行5条命令&#xff0c;…

苹果计算机磁盘格式,苹果电脑如何完全写入NTFS格式磁盘

很多在使用Mac的用户可能都发现了&#xff0c;Mac有时候不能正常使用NTFS格式磁盘。无论是U盘、硬盘、软盘还是其他的NTFS格式分区&#xff0c;mac在使用它们的时候只能有访问读取的权限&#xff0c;但想要修改、删除、存在文件则无法实现。为解决这一问题&#xff0c;小编今天…

事物与数据库底层数据

事物与数据库底层数据 在事物进行过程中&#xff0c;未结束之前&#xff0c;DML语句是不会更改底层数据&#xff0c;只是将历史操作记录一下&#xff0c;在内存中完成记录。只有在事物结束的时候&#xff0c;而且是成功的结束的时候&#xff0c;才会修改底层硬盘文件中的数据

电脑知识:分享几款常用的截屏方法,欢迎收藏

目录 1、Windows系统自带截图工具 2、截屏软件 3、聊天软件 4、Windows系统自带有截屏的快捷键 5、浏览器截屏 6、手机拍照 今天小编给大家介绍几个常用截屏的方法&#xff0c;希望对大家的日常办公能有所帮助&#xff01; 1、Windows系统自带截图工具 点击左下角开始菜单在“…

R语言-排序

1 > c 2 [1] 1 2 3 4 5 6 1 3 3 > sort(c) 4 [1] 1 1 2 3 3 4 5 6 5 > order(c) 6 [1] 1 7 2 3 8 4 5 6 sort与order都是对向量排序&#xff0c;sort返回的是向量排序后的值&#xff08;小-大&#xff09;&#xff0c;order是对向量排序&#xff0c;然后返回向量的索引…

eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...

点击上方蓝字&#xff0c;关注本公众号&#xff0c;获得更多资源上一篇文章介绍了四元数、欧拉角、旋转矩阵、轴角如何相互转换&#xff0c;本篇文章介绍如何用eigen来实现。旋转向量1&#xff0c;初始化旋转向量&#xff1a;旋转角为alpha&#xff0c;旋转轴为(x,y,z)Eigen::A…

火炬之光2找不到服务器,火炬之光2无法运行解决办法详细介绍

火炬之光2无法运行解决办法详细介绍2012-09-28 15:23:07来源&#xff1a;游戏下载编辑&#xff1a;评论(0)不少玩家在安装了火炬之光2游戏后无法运行&#xff0c;小编特此为你找了几种的解决办法&#xff0c;下面一起来看一下火炬之光2无法运行的问题及解决办法&#xff1a;如果…

Spring AOP / AspectJ AOP 的区别?

Spring AOP / AspectJ AOP 的区别&#xff1f; Spring AOP属于运行时增强&#xff0c;而AspectJ是编译时增强。 Spring AOP基于代理&#xff08;Proxying&#xff09;&#xff0c;而AspectJ基于字节码操作&#xff08;Bytecode Manipulation&#xff09;。 AspectJ相比于Spr…

硬件知识:独立显卡和集成显卡的区别

目录 1、独立显卡 2、集成显卡 3、独立显卡与集成显卡性能上的区别 今天给大家介绍一下独立显卡和集成显卡的区别&#xff0c;希望对大家能有所帮助&#xff01; 1、独立显卡 独立显卡是将显示芯片及相关器件制作成一个独立于电脑主板的板卡&#xff0c;成为专门的图像处理硬件…

『OPEN3D』1.1 点云处理

目录 1.open3d中的点云IO 2.点云的可视化 3 点云voxel下采样 4. 顶点法线估计 5.最小外界矩 6. 凸包计算 7. 点云距离计算 8. DBSCAN clustering聚类 9. RANSAC(Random Sample Consensus) 10. 点云平面分割 11. 隐藏点移除 12.outliers移除 13 最远点采样&#xf…