Рассмотрим следующий простой класс
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()
не может быть статическим или таким, как предполагается использовать свойства класса.