【发布时间】:2012-10-25 13:10:04
【问题描述】:
我是 Matlab R2012b 的 Parallel 工具箱的新手,想知道解决以下问题的最佳方法是什么。
我正在分析图像中每个像素的邻域。这是并行化的绝佳案例。但是,我似乎无法让它工作。
问题的主要问题是应该将一些“常量”参数传递给函数。因此,应该为每个像素调用该函数,但是,它还需要访问周围的像素。 (最好将图像作为某种常量参数和要分析的像素坐标传递)。
输出是每个像素一个值。
目前我有这个:
z2 = arrayfun(@(x) analyze(x, image, const1, ...), gpuArray(1:m*n));
其中 x 是虚拟变量,图像是包含图像亮度值的 2D 矩阵,const1(和其他)是函数常数(例如分析窗口的大小)。 m 和 n 是图像的尺寸大小。
但是,我得到了这个错误
使用 gpuArray/arrayfun 时出错 不支持使用功能性工作区。
有什么想法吗?
干杯, 鲁本
【问题讨论】:
-
你能把
analyze的代码贴出来吗? -
消息“不支持使用功能工作区”让我怀疑您无法在对
arrayfun的调用中创建workspace变量。我尝试在本地对此进行测试,但可惜我的视频卡太旧且不受支持。 -
@slayton 感谢您的努力!我不在家 atm,analyze 函数就是一个例子,因为真正的代码非常复杂(尽管它仅存在于算术中)。但是,有效的简化是“计算每个像素及其周围像素的平均值。剩下的我可以算出来。我会尽快发布一些参考代码。
-
@slayton 不同的方法(例如不使用匿名函数)也非常感谢
-
实际上我怀疑匿名函数可能是罪魁祸首,因为它带来了您工作空间的一部分。不过我不能确定,因为我无法在我的机器上执行任何对
gpuArray的调用。
标签: matlab cuda gpu anonymous-function