【发布时间】:2019-10-17 09:17:47
【问题描述】:
考虑下面这个简单的类
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() 应该运行arrayfun 的GPU 版本。
是否有任何解决方法或技巧可以使上述foo2() 正常工作,即类方法在 GPU 上运行?考虑bar() 不能是静态的,或者它应该使用类属性。
【问题讨论】:
标签: matlab oop gpu matlab-gpu