与this question类似,我正在尝试在GPU上运行的cellfun线程之间共享矩阵。
由于GPU执行不支持全局变量,我以为我可以通过引用共享矩阵来定义一个句柄类对象数组,因此句柄将传递给每个cellfun实例。
classdef VarByRefContainer < handle
properties
val = [];
end
end
handle = VarByRefContainer;
handle.val = SharedMatrix;
cellfun(@myfun, {handle, handle, handle});
Matlab似乎接受了这一点,但仍有一些问题:
答案 0 :(得分:1)
我将在这里发布与其他问题相同的答案 - 您可以使用上层变量和嵌套函数共享数据:
function result = gpueg()
largeArray = gpuArray.rand(5000);
smallArray = magic(5);
function out = myNestedFcn(in)
element = ceil(in * 25);
out = smallArray(element);
end
result = arrayfun(@myNestedFcn, largeArray);
end