CUDA编程练习(十四) Thrust、CuBLAS、CuRAND和CuDNN

1 想法

感觉有用就会记下来

背后原理了解个7788,关注点:

  1. 怎么用的;
  2. 我能用到哪些功能;
  3. 不利于性能的操作有。

为什么不写输入输出?太复杂了,本文是为了让我知道,什么操作依赖什么库,矩阵向量怎么表示。看参数直接看手册或者编辑器提示。

2 汇总

2.1 Thrust

所有的函数名和对象名我都省略了thrust::命名空间限定。

支持很多STL容器!🆗,那就很好用了。相见恨晚。

不要把设备端的数组放在主机端循环执行。否则取一次值,就PCIE传输一次。

无法改变使用哪个流(骗你的,现在可以了)。

数组:host_vector<>, device_vector<>,初始化方式同vector,可以跨设备初始化;

移动数组:使用copy移动数据;

生成数组:generate,可以随机初始化;

排序:背后是鸡排+合并排序;

一些重要操作

  •  二分查找;
  • 归约;reduce
  • 归并;merge
  • 重排;reverse、rotate、shuffle
  • 前缀和;inclusive_scan、exclusive_scan
  • 集合操作;unique1、count
  • 变换;transform

2.2 CuBLAS

是高性能 GPU 线性代数库,用于加速矩阵和向量操作。

其中S和D分别代表单双精度浮点数。

1. 向量加法 (cublasSaxpycublasDaxpy)

2. 矩阵-向量乘法 (cublasSgemvcublasDgemv)

3. 矩阵-矩阵乘法 (cublasSgemmcublasDgemm)

4. 向量内积 (cublasSdotcublasDdot)

5. 向量范数 (cublasSnrm2cublasDnrm2)

6. 矩阵转置 (cublasSgeamcublasDgeam)

2.3 CuRAND

生成伪随机数和准随机数的高性能库,适用于在 GPU 上进行随机数生成

1. 创建和销毁生成器 (curandCreateGeneratorcurandDestroyGenerator)、

2. 设置种子 (curandSetPseudoRandomGeneratorSeed)

3. 均匀分布 (curandGenerateUniformcurandGenerateUniformDouble)

4. 正态分布 (curandGenerateNormalcurandGenerateNormalDouble)

5. 伪随机整数 (curandGenerate)

6. 设置准随机数生成器的参数 (curandSetQuasiRandomGeneratorDimensions)

7. 对数正态分布 (curandGenerateLogNormalcurandGenerateLogNormalDouble)

8. 泊松分布 (curandGeneratePoisson)

2.4 CuDNN

高性能 GPU 加速深度学习库,广泛应用于深度神经网络的训练和推理,没错,反向传播也就是一个函数的问题。

1. 初始化和管理 cuDNN 句柄 (cudnnCreatecudnnDestroy)

2. 卷积操作cudnnConvolutionForward、cudnnConvolutionBackwardData、cudnnConvolutionBackwardFilter

3. 池化、归一化、激活函数

4. 循环神经网络 (RNN)cudnnRNNForwardInference、cudnnRNNForwardTraining、cudnnRNNBackwardData、cudnnRNNBackwardWeights

5. GNN 和混合精度训练,暂时不涉及,看到再学

3 总结

没有项目、题目指引,硬背是没有意义的。本文旨在搞一种感觉,明白各个库能做什么、做到什么程度就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值