arrayfun
在GPU上应用函数到数组的每个元素
描述
请注意
这个函数的行为类似于MATLAB®函数arrayfun
,除了函数的计算发生在GPU上,而不是CPU上。任何尚未在GPU上的必需数据将被移动到GPU内存中。编译传入求值的MATLAB函数,然后在GPU上执行。所有输出参数都作为gpuArray对象返回。方法检索gpuArray数据收集
函数。
应用函数B
= arrayfun (有趣的
,一个
)有趣的
到gpuArray的每个元素一个
.arrayfun
然后连接来自的输出有趣的
输入输出gpuArrayB
.B
尺寸和一个
而且B(i,j,…)= FUN(A(i,j,…))
.输入参数有趣的
是MATLAB函数的函数句柄,该函数接受一个输入参数并返回一个标量值。有趣的
的元素被调用的次数是多少一个
.
您无法指定其中的顺序arrayfun
计算的元素B
或者依赖于它们以任何特定的顺序完成。
例子
输入参数
输出参数
提示
第一次打电话的时候
arrayfun
为了在GPU上运行一个特定的函数,有一些开销时间来为GPU执行设置函数。后续调用arrayfun
用同样的函数可以运行得更快。输入数组的非单例维度必须相互匹配。换句话说,论点的相应维度
A1,…,一个
,必须彼此相等,或者等于1。当输入数组的维数为单例时(等于1
),arrayfun
使用单例展开。数组沿着单维度进行虚拟复制,以匹配该维度中最大的其他数组。当输入数组的维数为单例,而另一个参数数组中的对应维数为零时,arrayfun
实际上将单例维度减小到0
.输出数组的每个维度
B
对于非零大小,与该维度中最大的输入数组的大小相同,否则为零。下面的代码显示了尺寸的大小1
与其他参数中相应维度的大小相匹配。R1 = rand(2,5,4,“gpuArray”);R2 = rand(2,1,4,3,“gpuArray”);R3 = rand(1,5,4,3,“gpuArray”);R = arrayfun(@(x,y,z)(x+y.*z),R1,R2,R3);大小(R)
2 5 4 3
R1 = rand(2,2,0,4,“gpuArray”);R2 = rand(2,1,1,4,“gpuArray”);R = arrayfun(@plus,R1,R2);大小(R)
2 2 0 4
因为所支持的操作金宝app
arrayfun
是严格的元素,并且每个元素的每次计算都是独立于其他元素执行的,因此施加了某些限制:输入和输出数组不能改变形状或大小。
数组创建函数,例如
兰德
不支持大小规格金宝app。随机数数组的每个元素都有独立的流。
就像
arrayfun
在MATLAB中,矩阵指数幂,乘法和除法(^
,*
,/
,\
)只执行元素计算。更改输入或输出数组的大小或形状的操作(
猫
,重塑
,等等)不受支持。金宝app只读索引(
subsref
),并支持从嵌套函数中访问父(外部)函数工作区的变量。金宝app可以在GPU上对函数中存在的变量进行索引。转让或者subsasgn
不支持从嵌套函数中索引这些变量。金宝app有关受支持的用法示例,请参见金宝appStencil图形处理器的操作.匿名函数不能访问它们的父函数工作区。
不允许重载所支持的函数。金宝app
代码不能调用脚本。
没有
答
变量保存未分配的计算结果。确保将所有计算结果显式地赋值给变量。不支持以下语言特性:持久变量或全局变量,金宝app
parfor
,spmd
,开关
,试一试
/抓
.P-code文件不能包含对
arrayfun
使用gpuArray数据。
版本历史
在R2010b中引入