一、简介
Thrust开源库的概述是“灯光代码速度”。 光速代码的实现可能听起来太夸张了,但thrust在cuda硬件加速方面具有非常强大的功能。
Thrust是并行算法和数据结构的基于GPU CUDA的c库。 Thrust主要通过管理内存访问memory access )和内存分配memory allocation )等系统基础的功能来实现加速,使工程师们在GPU编程的环境下在算法的设计上能够更好地进行focus。
Thrust最主要的特点是实现了一些数据结构和算法的快速并行计算highperformanceheterogeneousparallelcomputing )。 例如sort、reduce、scan等。
安装PS.CUDAtooltik时,thrust头文件将自动添加到标准cuda文件路径中。 因此,应用thrust库不需要其他安装过程。
二、Vectors
vector是标准数据库STL )的类。 C STL还包括例如STD:3360载体的载体容器container )。 Thrust有两种类型的vector container:host _ vector和device_vector。 host_vector存储在host memory中,设备_ vector存储在GPU设备存储器中。
以下NVIDIA CUDA官方网站的示例说明了如何使用vector containers。
# include thrust/host _ vector.h # include thrust/device _ vector.h # includeiostreamintmain {/hasstoragin }/h/H[1]=20; H[2]=38; H[3]=46; //h.size returnsthesizeofvectorhstd 33603360 cout ‘ hha ssize ‘ h.size ) std:endl; //printcontentsofhforintI=0; i H.size ; I ) STD :3360 cout ‘ h [ ‘ I ‘ ]=’ h [ I ] STD 33603360 endl; //resizeh.resize2; STD :3360 cout ‘ hnowhassize ‘ h.size ) std:endl; //copy host _ vectorhtodevice _ vectordthrust :3360 device _ vectorintd=h; //elementsofdcanbemodifiedd [0]=99; D[1]=88; //printcontentsofdforintI=0; i D.size ; I ) STD :3360 cout ‘ d [ ‘ I ‘ ]=’ d [ I ] STD 33603360 endl; //handdareautomaticallydeletedwhenthefunctionreturnsreturn 0; }
三、算法
Thrust提供了很多并行算法。 例如thrust:sort。 所有Thrust算法都有主机什么设备的版本。 唯一的异常是thrust:copy函数,其所有迭代器协议必须位于同一位置。 要么在主机上,要么在设备上。
以thrust:sort为例。
数组的排序可以通过一条指令执行。
# include thrust/sort.h . const intn=6; inta [ n ]={ 1,4,2,8,5,7 }; thrust:3360sorta,A N ); //ai snow { 1,2,4,5,7,8 }此外thrust非常不可思议thrust:sort_by_key和thrust 33603360 stable _ sort _ by _ key
# include thrust/sort.h . const intn=6; int keys [ n ]={ 1,4,2,8,5,7 }; char values[N]={‘a ‘、’ b ‘、’ c ‘、’ d ‘、’ e ‘、’ f’}; thrust :3360 sort _ by _ key keys,keys N,values ); //keys isnow { 1,2,4,5,7,8 }//values isnow { ‘ a ‘、’ c ‘、’ b ‘、’ e ‘、’ f ‘、’ d’}就像c标准库的sort一样
# include thrust/sort.h # include thrust/functional.h . const intn=6; inta [ n ]={ 1,4,2,8,5,7 }; thrust:3360stable_sorta,A N,thrust:greaterint ); //ai snow { 8,7,5,4,2,1 }
参考: http://docs.NVIDIA.com/cuda/thrust/index.html
3359 developer.NVIDIA.com/thrust