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;
}

【CUDA开发】Thrust库的更多相关文章

  1. 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三

    JetPack(Jetson SDK)是一个按需的一体化软件包,捆绑了NVIDIA®Jetson嵌入式平台的开发人员软件.JetPack 3.0包括对Jetson TX2 , Jetson TX1和J ...

  2. 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

    [神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...

  3. 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明

    [神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...

  4. 【CUDA开发】CUDA从入门到精通

    CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追 ...

  5. 2015年10个最佳Web开发JavaScript库

    2015年10个最佳Web开发JavaScript库 现在的互联网可谓是无所不有,有大量的JavaScript项目开发工具充斥于网络中.我们可以参考网上的指导来获取构建代码项目的各种必要信息.如果你是 ...

  6. iOS开发--开源库

    图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩 ...

  7. 移动开发UI库

    参考链接:http://www.cnblogs.com/edobnet/archive/2012/08/17/2643573.html 自己总结: jquery 的移动开发UI库  http://jq ...

  8. Windows平台CUDA开发之前的准备工作

    CUDA是NVIDIA的GPU开发工具,眼下在大规模并行计算领域有着广泛应用. windows平台上面的CUDA开发之前.最好去NVIDIA官网查看说明,然后下载对应的driver. ToolKits ...

  9. 【CUDA开发】CUDA面内存拷贝用法总结

    [CUDA开发]CUDA面内存拷贝用法总结 标签(空格分隔): [CUDA开发] 主要是在调试CUDA硬解码并用D3D9或者D3D11显示的时候遇到了一些代码,如下所示: CUdeviceptr g_ ...

随机推荐

  1. 小猿圈-IT自学人的小圈子 https://book.apeland.cn/details/54/

    笔记链接   https://book.apeland.cn/details/54/ 学习视频   https://www.apeland.cn/python

  2. Codeforces 839E Mother of Dragons

    题 OvO http://codeforces.com/contest/839/problem/E (Codeforces Round #428 (Div. 2) - E) 解 首先,k肯定是要平均分 ...

  3. IT行业常见职位英文缩写

    1.PG                Programer                                                            程序员 2.AA    ...

  4. 《剑指offer》算法题第九天

    今日题目: 整数中1出现的次数 把数组排成最小的数 丑数 第一个只出现一次的字符位置 今天的题目相对比较难,特别是第1题和第3题很考验数学功底,下面我们一题一题来看看. 1.整数中1出现的次数 题目描 ...

  5. Java当中的IO流(上)

    Java当中的IO流 在Java中,字符串string可以用来操作文本数据内容,字符串缓冲区是什么呢?其实就是个容器,也是用来存储很多的数据类型的字符串,基本数据类型包装类的出现可以用来解决字符串和基 ...

  6. Java Web项目案例之---登录注册和增删改查(jsp+servlet)

    登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...

  7. 记一次关于springboot的netty版本冲突问题

    冲突的地放其实很多,大概都是类似,找不到哪个方法了: 类似于: Error starting ApplicationContext. To display the conditions report ...

  8. 0.JQuery学习

    jQuery 教程 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. jQuery 简介 jQuery 库可以通过一行简单的标记被添加到网页中 ...

  9. mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...

  10. window环境下 恢复odoo数据库备份文件时产生的 Database restore error: Command `psql` not found.

    1,首先先查看 PostgreSQL 是否安装在C盘,如果安装在其他盘 则需要配置环境变量 配置完成后重启服务就可以了 2, 如果还不行,只需在odoo.conf中添加一个配置设置.也就是在odoo项 ...