我可以在GPU上的cellfun线程之间共享内存吗?

时间:2013-06-27 12:29:20

标签: matlab gpu

this question类似,我正在尝试在GPU上运行的cellfun线程之间共享矩阵。

由于GPU执行不支持全局变量,我以为我可以通过引用共享矩阵来定义一个句柄类对象数组,因此句柄将传递给每个cellfun实例。

classdef VarByRefContainer < handle
    properties
        val = [];
    end
end

handle = VarByRefContainer;
handle.val = SharedMatrix;
cellfun(@myfun, {handle, handle, handle});

Matlab似乎接受了这一点,但仍有一些问题:

  1. 这样安全吗?即如果我并行地为元素[1,3,5]和[2,4]赋值,那么分配是否可能发生冲突?
  2. 这有效吗?即处理程序类可能存储在主机上,并且引用GPU上的内存可能是一项耗时的操作。我想避免这种情况。

1 个答案:

答案 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