bsxfun
gpuArray 的二进制单例扩展函数
说明
示例
输入参数
输出参量
提示
第一次调用
bsxfun在 GPU 上运行特定函数时,需要一些额外时间来设置该函数以供 GPU 执行。后续使用相同函数调用bsxfun可以运行得更快。输入数组的非单一维度必须彼此匹配。换句话说,参量
A、B等的对应维度必须彼此相等,或者等于一。每当输入数组的维度为单例(等于 1)时,bsxfun就会使用单例扩展。该数组沿单例维度复制,以匹配该维度中其他数组的最大值。当输入数组的某个维度为单例,而另一个参量数组中的对应维度为零时,bsxfun实际上会将单例维度减小为 0。如果大小非零,则输出数组
C的每个维度的大小与该维度中输入数组中最大的一个相同,否则为零。以下代码显示了如何将大小为 1 的维度放大或缩小以匹配其他参量中相应维度的大小。R1 = rand(2,5,4,'gpuArray'); R2 = rand(2,1,4,3,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 5 4 3
R1 = rand(2,2,0,4,'gpuArray'); R2 = rand(2,1,1,4,'gpuArray'); R = bsxfun(@plus,R1,R2); size(R)
2 2 0 4
由于
bsxfun支持的操作是严格逐元素的,并且每个元素的计算都是独立于其他元素进行的,因此施加了某些限制:输入和输出数组不能改变形状或大小。
rand等函数不支持大小规范。随机数数组的每个元素都有独立的流。
与 MATLAB 中的
bsxfun类似,矩阵指数幂、乘法和除法(^、*、/、\)仅执行逐元素计算。不支持改变输入或输出数组(
cat、reshape等)的大小或形状的操作。支持只读索引 (
subsref) 和从嵌套函数内部访问父(外部)函数工作区的变量。您可以在 GPU 上进行评估之前索引函数中存在的变量。不支持在嵌套函数内对这些变量进行赋值或subsasgn索引。有关支持用法的示例,请参阅 GPU 上的模板操作匿名函数无权访问其父函数工作区。
不允许重载支持的函数。
代码无法调用脚本。
没有
ans变量来保存未分配的计算结果。确保将所有计算的结果明确分配给变量。不支持以下语言功能:持久变量或全局变量、
parfor、spmd和try/catch。P 代码文件不能包含对带有 gpuArray 数据的
bsxfun的调用。
版本历史记录
在 R2012a 中推出