主要内容

来自库调用的内核

GPU Coder™支万博1manbetx持为CUDA优化的库®gpu,如cuBLAS, cuSOLVER, cuFFT, Thrust, cuDNN和TensorRT库。

  • cuBLAS库是基于NVIDIA的基本线性代数子程序(BLAS)的实现®CUDA运行时。它允许您访问NVIDIA GPU的计算资源。

  • cuSOLVER库是基于cuBLAS和cuSPARSE库的高级包。它提供了有用的类似lapack的特性,例如用于密集矩阵的公共矩阵分解和三角形求解例程、稀疏最小二乘求解器和特征值求解器。

  • cuFFT库在NVIDIA gpu上提供了快速傅里叶变换(FFT)算法的高性能实现。cuBLAS, cuSOLVER和cuFFT库是NVIDIA CUDA工具包的一部分。

  • Thrust是一个CUDA的c++模板库。Thrust库随CUDA Toolkit一起提供,允许您利用gpu加速的原语(如sort)来实现复杂的高性能并行应用程序。

  • NVIDIA CUDA深度神经网络库(cuDNN)是一个用于深度神经网络的gpu加速原语库。cuDNN为向前和向后卷积、池化、规范化和激活层等标准例程提供了高度调优的实现。NVIDIA的TensorRT是一个高性能的深度学习推理优化器和运行时库。有关更多信息,请参见基于cuDNN的深度学习网络代码生成而且基于TensorRT的深度学习网络代码生成

GPU Coder不需要一个特殊的pragma来生成对库的内核调用。在代码生成过程中,当您选择使cuBLAS选项在GPU编码器应用程序或使用config_object.GpuConfig。EnableCUBLAS = true在CLI中,GPU Coder用调用cuBLAS库代替了一些功能。当你选择使cuSOLVER选项在GPU编码器应用程序或使用config_object.GpuConfig。EnableCUSOLVER = true属性,GPU Coder代替一些功能调用cuSOLVER库。为了让GPU Coder将高级数学函数替换为库调用,必须满足以下条件:

  • 这些函数必须有特定于gpu的库替换。

  • MATLAB®编码器™必须满足数据大小阈值。

GPU Coder支万博1manbetx持cuFFT, cuSOLVER和cuBLAS库替换表中列出的函数。对于CUDA中没有替换的函数,GPU Coder使用可移植的MATLAB函数映射到GPU。

MATLAB函数 描述 MATLAB编码器LAPACK支万博1manbetx持 cuBLAS, cuSOLVER,袖口,推力支持万博1manbetx

mtimes

矩阵相乘

是的

是的

mldivide(“\”)

解线性方程组Ax = Bx

是的

是的

LU矩阵分解

是的

是的

qr

Orthogonal-triangular分解

是的

部分

依据

矩阵的行列式

是的

是的

胆固醇

柯列斯基分解

是的

是的

rcond

倒数条件数

是的

是的

linsolve

解线性方程组Ax = B

是的

是的

eig

特征值和特征向量

是的

没有

舒尔

舒尔分解

是的

没有

圣言会

奇异值分解

是的

部分

fft、fft2 fftn

快速傅里叶变换

是的

是的

传输线、ifft2 ifftn

快速傅里叶反变换

是的

是的

排序

对数组元素排序

是的,使用gpucoder.sort

当你选择使cuFFT选项在GPU编码器应用程序或使用config_object.GpuConfig。EnableCUFFT = true属性在CLI, GPU Coder映射fft、传输线、fft2 ifft2 fftn.ifftn函数调用在您的MATLAB代码到适当的cuFFT库调用。对于2-D转换和更高,GPU Coder创建多个1-D批量转换。这些批处理变换比单个变换具有更高的性能。GPU编码器只支持异地转换。万博1manbetx如果使cuFFT不勾选时,GPU Coder使用CFFTW库可用或从便携式MATLAB FFT生成内核。支持单精度和双精度数据类型。万博1manbetx输入和输出可以是实值或复值,但实值转换更快。cuFFT库支持输入大小,通万博1manbetx常指定为2的幂或可以分解为小素数乘积的值。一般来说,质因数越小,性能越好。

请注意

使用CUDA库名称,如cufftcublas,cudnn因为你的MATLAB函数的名字会导致代码生成错误。

另请参阅

|||||

相关的话题