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的场景,就非常有用了。
推荐阅读
- 使用协程爬取网页,计算网页数据大小
- ACSL|ACSL 美国计算机科学联赛 2016-2017 R4 摩天大楼-Skyscraper 题解
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- 首屏时间,你说你优化了,那你倒是计算出给给我看啊!
- ATAN2根据xy坐标计算角度
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)
- 计算机网络基础TCP\HTTP\HTTPS
- 计算机网络|计算机网络——DHCP协议详解
- Nvidia|lxd容器安装cuda11
- android|android today上下卡片,【精品文档】关于计算机专业大学生安卓系统有关的外文文献翻译成品(基于Android(安卓)的考勤管理系统(中英文双语对照)