主要内容

gpucoder.matrixMatrixKernel

GPU实现的功能包含矩阵与矩阵的操作进行了优化

描述

例子

C= gpucoder.matrixMatrixKernel (有趣的,一个,B)从功能包含GEMM-like操作生成内核。例如,两个图像之间匹配特征点的使用:

  • 绝对差异(SAD)——的总和F () = @ (a, b) abs (a - b)

  • 的平方的总和(SSD)的差异F () = @ (a, b) (a - b)。* (a - b)

C= gpucoder.matrixMatrixKernel (___,取向)有可选参数取向指定的方向一个B矩阵。

C= gpucoder.matrixMatrixKernel (___,vectorizedSim)有可选参数vectorizedSim在MATLAB中指定使用矢量化操作®仿真和CPU代码生成。函数处理有趣的必须支持向万博1manbetx量输入和一个行或列的一个和一个列或行B和输出向量相当于arrayfun(有趣,A, B)

例子

全部折叠

本例中执行一个简单的矩阵与矩阵的乘法和使用matrixMatrixKernel设计模式来生成CUDA®代码。

在一个文件中,写一个入口点函数matMul_nn接受两个矩阵输入f1f2。使用MATLAB函数@timesf1f2元素的元素。符号@创建一个处理函数。插入gpucoder.matrixMatrixKernel ()声明。输入矩阵的转置,因此使用“神经网络”选择。

函数成绩= matMul_nn (f1、f2)分数= gpucoder。matrixMatrixKernel (@times f1, f2,“神经网络”,真正的);结束

使用codegen函数来生成CUDA墨西哥人的功能。

codegen配置coder.gpuConfig(墨西哥人)arg游戏{(1024,1024,“双”),则(1024,1024,“双”)}报告matMul_nn

生成的CUDA代码包含两个内核:matMul_nn_kernel1初始化输出矩阵分数matrixMatrixKernel执行的操作。下面是生成的代码的一个片段。

cudaMemcpy (* gpu_f2 cpu_f2, 8388608 ul, cudaMemcpyHostToDevice);matMul_nn_kernel1 < < < dim3 (2048 u, 1 u, 1 u), dim3 (512 u, 1 u, 1 u) > > > (* gpu_f2, * gpu_B);cudaMemcpy (* gpu_f1 cpu_f1, 8388608 ul, cudaMemcpyHostToDevice);matrixMatrixKernel < < < 1024 u, 64 u > > > (* gpu_f1, * gpu_B, * gpu_scores);cudaMemcpy (cpu_scores * gpu_scores, 8388608 ul, cudaMemcpyDeviceToHost);

输入参数

全部折叠

功能适用于输入数组的元素,指定为一个函数处理。有趣的是一个处理一个用户定义的函数。它需要一个行或列矩阵一个和一个行或列的矩阵B和输出向量具有相同类型作为输入。然后总结输出向量来计算一个标量值C

数据类型:function_handle

数字输入一个B必须是相同的大小或尺寸,是兼容的。例如,如果一个是一个——- - - - - -K矩阵,B是一个K——- - - - - -N矩阵然后C是一个——- - - - - -N矩阵。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|一半

特征向量或两个字符组成的字符串,表示矩阵的操作执行一个B在矩阵乘法。可能的值是正常的(“N”)、转置(“T”),或复杂的共轭转置(“C”)。

可能的值是:

  • “神经网络”——矩阵一个B是正常的。

  • “nt”——矩阵B是转置。

  • tn的——矩阵一个是转置。

  • 的tt——这两个矩阵一个B转置。

指定是否使用在MATLAB仿真和CPU代码生成矢量化操作。

输出参数

全部折叠

产品,作为一个标量返回向量或矩阵。数组D有相同数量的行作为输入一个和相同数量的列作为输入B

版本历史

介绍了R2017b