1 想法
感觉有用就会记下来
背后原理了解个7788,关注点:
- 怎么用的;
- 我能用到哪些功能;
- 不利于性能的操作有。
为什么不写输入输出?太复杂了,本文是为了让我知道,什么操作依赖什么库,矩阵向量怎么表示。看参数直接看手册或者编辑器提示。
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. 向量加法 (cublasSaxpy 和 cublasDaxpy)
2. 矩阵-向量乘法 (cublasSgemv 和 cublasDgemv)
3. 矩阵-矩阵乘法 (cublasSgemm 和 cublasDgemm)
4. 向量内积 (cublasSdot 和 cublasDdot)
5. 向量范数 (cublasSnrm2 和 cublasDnrm2)
6. 矩阵转置 (cublasSgeam 和 cublasDgeam)
2.3 CuRAND
生成伪随机数和准随机数的高性能库,适用于在 GPU 上进行随机数生成
1. 创建和销毁生成器 (curandCreateGenerator 和 curandDestroyGenerator)、
2. 设置种子 (curandSetPseudoRandomGeneratorSeed)
3. 均匀分布 (curandGenerateUniform 和 curandGenerateUniformDouble)
4. 正态分布 (curandGenerateNormal 和 curandGenerateNormalDouble)
5. 伪随机整数 (curandGenerate)
6. 设置准随机数生成器的参数 (curandSetQuasiRandomGeneratorDimensions)
7. 对数正态分布 (curandGenerateLogNormal 和 curandGenerateLogNormalDouble)
8. 泊松分布 (curandGeneratePoisson)
2.4 CuDNN
高性能 GPU 加速深度学习库,广泛应用于深度神经网络的训练和推理,没错,反向传播也就是一个函数的问题。
1. 初始化和管理 cuDNN 句柄 (cudnnCreate 和 cudnnDestroy)
2. 卷积操作cudnnConvolutionForward、cudnnConvolutionBackwardData、cudnnConvolutionBackwardFilter
3. 池化、归一化、激活函数
4. 循环神经网络 (RNN)cudnnRNNForwardInference、cudnnRNNForwardTraining、cudnnRNNBackwardData、cudnnRNNBackwardWeights
5. GNN 和混合精度训练,暂时不涉及,看到再学
3 总结
没有项目、题目指引,硬背是没有意义的。本文旨在搞一种感觉,明白各个库能做什么、做到什么程度就行了。
 Thrust、CuBLAS、CuRAND和CuDNN&spm=1001.2101.3001.5002&articleId=139486315&d=1&t=3&u=8234893fc6f4436bb6297ae62d293d57)
41

被折叠的 条评论
为什么被折叠?



