nvidia并行计算库thrust测试

【nvidia并行计算库thrust测试】nvidia thrust库的简介:
Thrust is a C++ parallel programming library which resembles the C++ Standard Library.
github地址: https://github.com/thrust/thrust
c++ 并行库,在cuda环境中默认安装了。
在实际业务中,比较有用的是sort和reduce(sum),大家看到这个可能会疑惑,很多库都可以实现sort和sum的操作,但是为什么还要大费周章用thrust呢?
对于一些高性能的应用,cpu的计算能力已经无法满足,就需要用到一些异构计算卡,比如gpu/fpga/npu等,来补全cpu的短板。thrust是nvidia提供的,借助cuda来实现sort和sum操作的一个库。
前期准备 必须有nvidia的显卡,如果是IDC机房的服务器,可能就要上tesla的显卡,有点贵O(∩_∩)O哈!
安装好cuda环境
编程的变化 主要的编程习惯和cuda编程的是一致的,host代表cpu,device代表gpu。内存中的数据分为host数据和device数据,两者数据交换需要显式复制。
验证sort性能 验证一下官网的sort例子

#include #include #include #include #include #include #include #include #include using namespace std; int main(void) { // generate 32M random numbers serially thrust::host_vector h_vec(32 << 20); std::generate(h_vec.begin(), h_vec.end(), rand); clock_t startTime,endTime; startTime = clock(); //计时开始 // transfer data to the device thrust::device_vector d_vec = h_vec; // sort data on the device (846M keys per second on GeForce GTX 480) thrust::sort(d_vec.begin(), d_vec.end()); // transfer data back to host thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin()); endTime = clock(); //计时结束 cout << "The run time second is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl; return 0; }

编译运行
$ nvcc sort.cu -o sort $ ./sort The run time second is: 0.419299s

32M的数据,3200万条数据,400ms就完成了,在cpu上面实现是比较吃力的。对于一些需要实时性要求非常高的sort的场景,就非常有用了。

    推荐阅读