与这个问题类似,我试图在 GPU 上运行的 cellfun 线程之间共享一个矩阵。
由于 GPU 执行不支持全局变量,我想我可以定义一个句柄类对象数组,并引用共享矩阵,因此句柄将传递给每个 cellfun 实例。
classdef VarByRefContainer < handle
properties
val = [];
end
end
handle = VarByRefContainer;
handle.val = SharedMatrix;
cellfun(@myfun, {handle, handle, handle});
Matlab 似乎接受了这一点,但仍有几个问题:
- 这安全吗?即,如果我为元素 [1,3,5] 和 [2,4] 并行赋值,是否存在赋值冲突的可能性?
- 这有效率吗?即处理程序类可能存储在主机上,而在 GPU 上引用内存可能是一项耗时的操作。我想避免这种情况。