设计模式
GPU Coder™支持一些有效映射到GPU结构的设计模式。
模板处理
模板内核操作将输出数组的每个元素作为输入数组的一个小区域的函数来计算。您可以将许多筛选操作表示为模板操作。例子包括卷积、中值滤波和有限元方法。
在模板内核的GPU Coder实现中,每个线程计算输出数组中的一个元素。由于给定的输入元素被重复访问以计算多个相邻的输出元素,GPU Coder使用共享内存来提高内存带宽和数据局部性。
使用stencilfun
函数和创建CUDA®模板函数的代码。有关演示模板预处理的示例,请参见图形处理器上的模板处理.
请注意
从R2022b开始,通过使用生成模板类操作的CUDA内核stencilfun
函数。gpucoder.stencilKernel
不建议使用。
对于非常大的输入尺寸,stencilfun
函数可能会产生与MATLAB数值不匹配的CUDA代码®模拟。在这种情况下,考虑减少输入的大小以产生准确的结果。
矩阵与矩阵的处理
许多科学应用包含矩阵-矩阵运算,包括一般矩阵到矩阵乘法(GEMM)的形式C = ab
你可以选择转置一个
而且B
.这种矩阵-矩阵运算的代码通常采用以下模式:
为x = 1:M为y = 1:N为z = 1:K (x,y) = F(A(x,z),B(z,y));结束结束结束
在哪里F ()
用户定义的函数。在这些操作中,来自一个输入矩阵的一行和来自第二个输入矩阵的一列用于计算输出矩阵的相应元素。每个线程重新加载行和列。这种设计模式允许通过重用数据和使每个线程计算多个输出元素来优化该结构。
例如,F ()
可以是一个正则矩阵的乘法,F () = @mtimes
.对于这种模式,GPU Coder提供了MatrixMatrix
内核创建一个高效,快速的实现矩阵-矩阵运算的GPU。
使用gpucoder.matrixMatrixKernel
函数和创建CUDA代码执行矩阵-矩阵类型的操作。
另请参阅
coder.gpu.kernel
|coder.gpu.kernelfun
|gpucoder.matrixMatrixKernel
|coder.gpu.constantMemory
|gpucoder.stencilKernel