主要内容

arrayfun

在GPU上应用函数数组的每个元素

描述

例子

请注意

这个函数的行为类似于MATLAB®函数arrayfun,除了函数的评估发生在GPU上,而不是在CPU上。任何必需的数据没有在GPU上搬到GPU内存。MATLAB函数通过评价被编译,然后在GPU上执行。所有输出参数返回gpuArray对象。您可以检索gpuArray数据使用收集函数。

B= arrayfun (有趣的,一个)应用函数有趣的的每个元素gpuArray一个arrayfun然后连接输出有趣的到输出gpuArrayBB一样的尺寸吗一个B (i, j,…) =乐趣((i, j,…))。输入参数有趣的是一个函数句柄一个MATLAB函数,它接受一个输入参数,并返回标量值。有趣的被称为多少倍的元素吗一个

你不能指定的顺序arrayfun计算的元素B或者依靠他们在任何特定的顺序。

例子

B= arrayfun (有趣的A1,…)适用于有趣的数组的元素A1,…,一个,所以B (i, j,…) =乐趣(A1 (i, j,…),…, (i, j,…))。这个函数有趣的必须采取n输入参数和返回一个标量。nonsingleton维度的输入A1,…,一个都必须匹配,或输入必须标量。任何单维度或标量输入几乎是复制之前的输入功能有趣的

例子

(B1,…,B米] = arrayfun(有趣的,___)返回多个输出数组B1,…, Bm当这个函数有趣的返回输出值。arrayfun调用有趣的每次和尽可能多的输出有电话arrayfun,也就是说,次了。如果你叫arrayfun有更多比支持的输出参数金宝app有趣的,MATLAB生成一个错误。有趣的可以返回输出参数具有不同的数据类型,但是每个输出的数据类型必须相同每次有趣的被称为。

例子

全部折叠

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

函数c = c myCal (rawdata,增益,抵消)= (rawdata。*获得)+偏移量;结束

函数执行只有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内存。输入数组转换为gpuArray之前运行的函数。

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

结果=收集(纠正);

您可以定义一个MATLAB函数如下。

函数[o1、o2] = aGpuFunction (a, b, c) o1 = a + b;o2 = o1。* c + 2;结束

评估这个函数在GPU上。

s1 =兰德(400“gpuArray”);s2 =兰德(400“gpuArray”);s3 =兰德(400“gpuArray”);[o1、o2] = arrayfun (@aGpuFunction、s1、s2、s3);谁
类属性名称大小字节o1 400 x400 1280000 gpuArray o2 400 x400 1280000 gpuArray s1 400 x400 1280000 gpuArray s2 400 x400 1280000 gpuArray s3 400 x400 1280000 gpuArray

使用收集来检索数据从GPU MATLAB工作区。

d =收集(o2);

这个函数myfun.m生成和使用一个随机数R

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

如果你使用arrayfun运行这个函数的输入变量是一个gpuArray,运行在GPU上的函数。的大小X确定数量的随机生成的元素。下面的代码将gpuArray传递矩阵Gmyfun在GPU上。

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

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

输入参数

全部折叠

功能适用于输入数组的元素,指定为一个函数处理。有趣的必须返回标量值。对于每一个输出参数,有趣的每次都必须返回值相同的类调用它。有趣的必须接受数字或逻辑输入数据。

有趣的必须是一个处理函数,用MATLAB语言编写的。你不能指定有趣的作为MEX-function的句柄。

有趣的可以包含以下内置的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 le日志
log2 log10 log1p逻辑lt马克斯min - mod南不不是的或者π+ pow2权力兰德randi randn rdivide真正reallog最大浮点数最小正浮点数realpow realsqrt rem一轮秒双曲正割迹象
罪单一sinh sqrt tan双曲正切次真正uint8 uint16 uint32 uint64 xor /。\ 0 + -。*。^ = = ~ = < < = > > = & | ~ & & | |

标量扩展的版本如下:

* / \ ^
分支指令:
打破继续其他elseif如果返回

函数创建数组(如,,,兰德,兰迪,randn,0)不支持大小规格作金宝app为输入参数。相反,生成的数组的大小是由你的函数的输入变量的大小。生成足够的数组元素来满足你的需要输入或输出变量。您可以指定使用类和数据类型“喜欢”语法。下面的例子展示支持数组创建函数的语法:金宝app

一个=兰德;b =的();c = 0 (“喜欢”,x);d =正(“单身”);e =兰迪([0 9),“uint32”);

当你使用兰德,兰迪,randn生成随机数有趣的从不同的substream生成,每个元素。更多信息生成随机数的GPU,明白了在GPU随机数流

输入数组,指定为标量、向量,矩阵或多维数组。至少一个输入参数必须是一个数组gpuArrayarrayfun在GPU上运行。每个数组存储在CPU内存转换为gpuArray函数之前评估。如果你打算打几个电话arrayfun相同的数组,这是更有效的将这个数组gpuArray。

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

输出参数

全部折叠

输出数组,作为gpuArray返回。

提示

  • 你第一次打电话arrayfun在GPU上运行一个特定的功能,有一些开销GPU执行时间设置功能。后续调用的arrayfun使用相同的函数可以运行得更快。

  • Nonsingleton维度的输入数组必须相互匹配。换句话说,对应的尺寸参数A1,…,一个,必须相等,否则等于1。每当输入数组的维度是单例(等于1),arrayfun使用单例扩张。数组几乎是复制的单维度匹配另一个数组中最大的尺寸。当输入数组的尺寸单和相应的维度在另一个参数数组中为零,arrayfun几乎减少了单维度0

    每个维度的输出数组B是相同的输入数组的大小作为最大的为非零维的大小,或零。下面的代码显示了如何的尺寸大小1上升或下降来匹配相应尺寸的大小在其他参数。

    R1 =兰德(2、5、4、“gpuArray”);R2 =兰德(2,1,4,3,“gpuArray”);R3 =兰德(1、5、4、3、“gpuArray”);R = arrayfun (@ (x, y, z) (x + y。* z), R1, R2, R3);大小(R)
    2 5 4 3
    R1 =兰德(2 2 0 4“gpuArray”);R2 =兰德(2,1,1,4,“gpuArray”);R = arrayfun (@plus、R1、R2);大小(R)
    2 2 0 4
  • 因为支持的操作金宝apparrayfun严格element-wise,每个计算每个元素执行独立于他人,施加一定的限制:

    • 输入和输出数组不能改变形状或大小。

    • 数组创建等功能兰德不支持大小规格金宝app。随机数数组每个元素有独立的溪流。

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

  • 操作,改变大小或形状的输入或输出数组(,重塑不支持等等)。金宝app

  • 只读索引(subsref)和访问父(外部)的变量函数支持工作区中嵌套函数。金宝app你可以索引变量中存在的函数在GPU上的评价。转让或者subsasgn从内部索引这些变量不支持嵌套的函数。金宝app支持使用的一个示例,请参阅金宝app对GPU模板操作

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

  • 重载的支持功能是不允许的。金宝app

  • 代码不能调用脚本。

  • 没有变量未赋值的计算结果。一定要明确分配所有计算变量的结果。

  • 不支持以下语言特性:持久或全局变量,金宝appparfor,spmd,开关,试一试/

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

版本历史

介绍了R2010b