arrayfun
将函数应用于 GPU 上的数组的每个元素
说明
注意
该函数的行为与 MATLAB® 函数 arrayfun 类似,只是该函数的评估发生在 GPU 上,而不是 CPU 上。任何尚未在 GPU 上的所需数据都将移动到 GPU 内存。传入评估的 MATLAB 函数经过编译,然后在 GPU 上执行。所有输出参量都作为 gpuArray 对象返回。
将函数 B = arrayfun(func,A)func 应用于 gpuArray A 的每个元素,然后将 func 的输出连接到输出 gpuArray B。B 的大小与 A 和 B(i,j,...) = func(A(i,j,...)) 相同。输入参量 func 是 MATLAB 函数的函数句柄,该函数接受一个输入参量并返回一个标量。func 的调用次数与 A 的元素数量相同。
示例
输入参数
输出参量
限制
A1,...,An的大小必须匹配或兼容。输出数组B的大小取决于A1,...,An的大小。有关详细信息,请参阅基本运算的兼容数组大小。由于
arrayfun支持的操作是严格逐元素的,并且每个元素的计算都是独立于其他元素进行的,因此施加了某些限制:输入和输出数组不能改变形状或大小。
数组创建函数(例如
rand)不支持大小规范。随机数数组的每个元素都有独立的流。
您无法指定
arrayfun计算输出数组B元素的顺序,也无法依赖它们以任何特定顺序完成。与 MATLAB 中的
arrayfun类似,矩阵指数幂、乘法和除法(^、*、/、\)仅执行逐元素计算。不支持改变输入或输出数组(
cat、reshape等)的大小或形状的操作。支持只读索引 (
subsref) 和从嵌套函数内部访问父(外部)函数工作区的变量。您可以在 GPU 上进行评估之前索引函数中存在的变量。不支持在嵌套函数内对这些变量进行赋值或subsasgn索引。有关支持的用法示例,请参阅 GPU 上的模板操作。匿名函数无权访问其父函数工作区。
不允许重载支持的函数。
代码无法调用脚本。
没有
ans变量来保存未分配的计算结果。确保将所有计算的结果明确分配给变量。不支持以下语言功能:持久变量或全局变量、
parfor、spmd和try/catch。
提示
第一次调用
arrayfun在 GPU 上运行特定函数时,需要一些额外时间来设置该函数以供 GPU 执行。后续使用相同函数调用arrayfun可以运行得更快。