文档

运行在GPU Element-wise MATLAB代码

MATLAB代码与gpuArray对象

你有选择对GPU进行MATLAB计算:

  • GPU可以转让或创建数据,并使用结果gpuArray作为输入来增强的内置函数,支持他们。万博1manbetx为更多的信息和支持gpuArray作为输入的函数的列表,看看万博1manbetx在GPU上运行内置函数

  • 您可以运行自己的MATLAB对GPU element-wise操作的函数。

你决定采用何种解决方案取决于您需要的功能是增强支持gpuArray,和数据传输的性能影响/ GPU。万博1manbetx

运行您的GPU的MATLAB函数

在GPU执行你的MATLAB函数,调用arrayfunbsxfun与MATLAB函数作为一个函数处理第一个输入参数:

结果= arrayfun (@myFunction __arg1,最长);

后续的参数提供输入MATLAB函数。这些输入参数可以工作区数据或gpuArray。如果任何输入参数是一个gpuArray,函数在GPU上执行,并返回一个gpuArray。(如果没有输入gpuArray,arrayfunbsxfun在CPU执行。)

请注意

arrayfunbsxfun万博1manbetx只支持GPU element-wise操作。

看到arrayfunbsxfun参考页面描述的可用选项。

例如:MATLAB代码运行

在这个例子中,一个小函数修正数据适用于测量数据的数组。文件中定义的函数myCal.m是:

函数c = myCal (rawdata增益,offst) c = (rawdata。*获得)+ offst;

函数执行只有element-wise操作时应用增益系数和偏移量的每个元素rawdata数组中。

创建一些名义上的测量:

量= 1 (1000)* 3;% 1000 -,- 1000矩阵

函数允许将增益和偏移量相同大小的数组rawdata,这样独特的修正可以应用于单个测量。在一个典型的情况下,你可能会让GPU上的校正数据,这样你不需要转移为每个应用程序:

gn =兰德(1000“gpuArray”)/ 100 + 0.995;偏移=兰德(1000“gpuArray”)/ 50 - 0.01;

在GPU上运行校准函数:

量,修正= arrayfun (@myCal gn,关闭状态);

这在GPU上运行,因为输入参数gn走开已经在GPU内存。

检索纠正结果从GPU MATLAB工作区:

结果=收集(纠正);

万博1manbetx支持MATLAB代码

你进入的功能arrayfunbsxfun可以包含以下内置的MATLAB函数和运算符:

abs和治疗作用是acot研究会acsch acoth asec asech最佳作用:量化atanhβbetaln bitand bitcmp bitget bitor bitset bitshift bitxor装天花板复杂连词因为cosh轻便双曲余切csc csch
双eps eq小块土地误差补函数erfcinv erfcx erfinv exp expm1错误修复地板伽马gammaln ge gt函数的图像放大Inf int8 int16 int32 int64 intmax intmin isfinite isinf isnan ldivide日志log2勒
log10 log1p逻辑lt马克斯min - mod南ne不是或者π+ pow2权力兰德randi randn rdivide真正reallog最大浮点数最小正浮点数realpow realsqrt rem一轮秒双曲正割标志罪单身
sinh sqrt tan双曲正切次真正uint8 uint16 uint32 uint64 xor + - * /。\。^ = = ~ = < < = > > = & | ~ & & | |
标量扩展的版本如下:
* / \ ^
分支指令:
打破继续其他elseif如果返回

生成随机数的GPU

传递给这个函数arrayfunbsxfun执行在GPU可以包含随机数字生成器的功能兰德,兰迪,randn。然而,GPU, MATLAB不支持完整的功能。万博1manbetx

arrayfunbsxfun万博1manbetx支持以下功能生成随机矩阵在GPU上:

兰德rand()兰德(单)兰德(双)randn randn () randn(单)randn(双)
兰迪•兰迪()兰迪(IMAX,…) randi兰迪(IMIN IMAX,…) (…,“单身”randi) (…“双”randi) (…,int32 randi) (…,' uint32 ')

你不为随机产生指定数组大小。相反,生成随机值的数量的大小决定了你的函数的输入变量。实际上,会有足够的随机数元素来满足任何输入或输出变量的需要。

例如,假设你的函数myfun.m包含以下代码,包括生成和使用随机矩阵R:

函数Y = myfun (X) R = rand ();Y = r . * X;结束

如果你使用arrayfun运行这个函数的输入变量是gpuArray函数运行在GPU,随机元素的数量R是由大小的吗X,因此您不需要指定它。下面的代码将gpuArray传递矩阵Gmyfun在GPU上。

G = 2 * 1 (4 4“gpuArray”)H = arrayfun (@myfun, G)

因为G是一个4×4 gpuArray,myfun生成随机值16标量元素R,一个用于每个计算的元素G

随机数生成的arrayfunbsxfun在GPU上使用相同的全球流gpuArray随机生成中描述控制gpuArray随机流。关于生成随机数的更多信息在GPU上,和一个比较GPU和CPU的一代,明白了控制随机数流。为例,展示了不同随机发电机,性能比较看看生成随机数GPU

提示和限制

以下限制适用于函数内的代码arrayfunbsxfun正在评估在GPU上。

  • 就像arrayfun在MATLAB矩阵指数的权力,乘法和除法(^,*,/,\)执行element-wise计算。

  • 操作,改变大小或形状的输入或输出数组(,重塑等),不支持。万博1manbetx

  • 当生成随机矩阵兰德,兰迪,或randn,您不需要指定矩阵的大小,和矩阵的每个元素都有自己的随机流。看到生成随机数的GPU

  • arrayfunbsxfun万博1manbetx支持只读索引(subsref)和访问父(外部)函数的变量工作区中嵌套函数,即:之前,这些变量中存在的功能arrayfun/bsxfun评估在GPU上。转让或者subsasgn从内部索引这些变量不支持嵌套的函数。万博1manbetx支持使用看到的一个例子万博1manbetx对GPU模板操作

  • 匿名函数不能访问父函数的工作区。

  • 重载的支持功能是不允许的。万博1manbetx

  • 代码不能调用脚本。

  • 没有变量未赋值的计算结果。一定要明确分配给变量结果的计算,你需要访问。

  • 不支持以下语言特性:持久或全局变量,万博1manbetxparfor,spmd,开关,试一试/

  • 不能包含调用p代码文件arrayfunbsxfungpuArray数据。

这个主题有帮助吗?