对GPU上阵列的每个元素应用函数
请注意
这个函数的行为类似于MATLAB®函数arrayfun
,除了函数的计算发生在GPU上,而不是在CPU上。GPU上没有的所有数据都被移到GPU内存中。传递给评估的MATLAB函数被编译,然后在GPU上执行。所有输出参数都作为gpuArray对象返回。属性可以检索gpuArray数据收集
函数。
应用函数B
= arrayfun (有趣的
,一个
)有趣的
指向gpuArray的每个元素一个
.arrayfun
然后连接来自的输出有趣的
到输出gpuArrayB
.B
大小是一样的吗一个
和B (i, j,…)=乐趣((i, j,…))
.输入参数有趣的
是一个MATLAB函数的函数句柄,该函数接受一个输入参数并返回一个标量值。有趣的
被调用的次数是多少一个
.
你不能指定顺序arrayfun
计算B
或者依赖于它们以特定的顺序进行。
你第一次打电话时arrayfun
为了在GPU上运行一个特定的函数,有一些开销时间来设置函数的GPU执行。后续调用的arrayfun
用同样的功能可以运行得更快。
输入数组的非单维必须彼此匹配。换句话说,对应的参数维度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
因为支持的操作万博1manbetxarrayfun
是严格的元素,每个元素的每个计算都是独立于其他元素执行的,施加了某些限制:
输入和输出数组不能改变形状或大小。
数组创建函数,例如兰德
不支持尺寸规格万博1manbetx。随机数数组的每个元素都有独立的流。
就像arrayfun
在MATLAB中,矩阵指数幂、乘、除(^
,*
,/
,\
)只执行元素计算。
更改输入或输出数组大小或形状的操作(猫
,重塑
,等等)。万博1manbetx
只读索引(subsref
),并支持从嵌套函数内部访问父(外部)函数工作区的变量。万博1manbetx您可以在对GPU进行评估之前对函数中存在的变量进行索引。转让或者subsasgn
不支持在嵌套函数中对这些变量进行索引。万博1manbetx有关支持的用法的示例,请参见万博1manbetx模板对GPU的操作.
匿名函数不能访问其父函数工作区。
不允许重载支持的函数。万博1manbetx
代码不能调用脚本。
没有答
变量保存未赋值的计算结果。确保显式地将所有计算结果赋值给变量。
以下语言特性不受支持:持久变量或全局变量、万博1manbetxparfor
,spmd
,开关
,试一试
/抓
.
P-code文件不能包含对arrayfun
gpuArray数据。