对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
因为支持的操作金宝apparrayfun
是严格的元素,每个元素的每个计算都是独立于其他元素执行的,施加了某些限制:
输入和输出数组不能改变形状或大小。
数组创建函数,例如兰特
不支持尺寸规格金宝app。随机数数组的每个元素都有独立的流。
就像arrayfun
在MATLAB中,矩阵指数幂、乘、除(^
那*
那/
那\
)仅执行元素 - 明智的计算。
更改输入或输出数组大小或形状的操作(猫
那重塑
,等等)。金宝app
只读索引(子反馈
),并支持从嵌套函数内部访问父(外部)函数工作区的变量。金宝app您可以在对GPU进行评估之前对函数中存在的变量进行索引。转让或者subsasgn.
不支持在嵌套函数中对这些变量进行索引。金宝app有关支持的用法的示例,请参见金宝appGPU上的模板操作。
匿名函数无法访问其父函数工作区。
不允许重载支持的函数。金宝app
代码无法调用脚本。
没有答
变量以保持未分配的计算结果。确保显式分配以变量所有计算的结果。
不支持以下语言功能:持久或全局变量,金宝app议案
那SPMD.
那开关
,试一试
/抓
。
p代码文件不能包含呼叫arrayfun
gpuArray数据。