考虑以下简单类
classdef A < handle
properties
M;
end
methods
function obj= A(m)
obj.M=m;
end
function foo(obj)
Array = linspace(0,obj.M,100);
arrayfun(@obj.bar,Array);
end
function foo2(obj)
Array = gpuArray.linspace(0,obj.M,100);
arrayfun(@obj.bar,Array);
end
function y = bar(obj,x)
y = x^2/obj.M;
end
end
end
现在跑步
>>
a=A(1);
>>
a.foo();
>>
a.foo2();使用 gpuArray/arrayfun 时出错 作为第一个输入参数传递的函数包含不受支持的“MCOS”语言功能“CLASSDEF”。有关详细信息,请参阅提示和限制。
A/foo2 中的错误(第 20 行)arrayfun(@obj.bar,Array);
请注意,foo()
和foo2()
是相同的函数,唯一的例外foo2()
是,应该运行 GPU 版本的arrayfun
.
是否有任何解决方法或技巧可以使foo2()
上述工作,即在 GPU 上运行的类方法?考虑bar()
不能是静态的,或者它应该使用类属性。