0

我正在使用带有函数和对象的 GPU 计算对函数中变量的元素执行逐元素函数:arrayfungpuArraygpuArray

[ output ] = MyFunc( element, SharedMatrix )
//
// Process element with Shared Matrix
//
end

我的代码是这样的:

SharedMatrix = magic(5000); %Large Memory Object
SharedMatrix = gpuArray(SharedMatrix);
elements = magic(5);
gpuElements = gpuArray(elements );
//Error on next line, SharedMatrix object must be a scaler.
result = arrayfun(@MyFunc,gpuElements,SharedMatrix); 

我听说全局变量不能用于GPU 计算

有没有办法这样做arrayfun

4

3 回答 3

4

使用最新版本的 Parallel Computing Toolbox,这可以通过结合使用嵌套函数来完成,例如arrayfun

function result = gpueg()

largeArray = gpuArray.rand(5000);

smallArray = magic(5);

    function out = myNestedFcn(in)
    % nested function accesses 'smallArray'    
        element = ceil(in * 25);
        out = smallArray(element);
    end

result = arrayfun(@myNestedFcn, largeArray);

end
于 2013-06-27T14:25:05.943 回答
0

arrayfun当前要求所有输入的大小(或标量)兼容,并且处理以元素方式完成。

另外,Parallel Computing Toolbox在 Matlab 中不支持Global Variables,所以不能使用Parallel Computing Toolbox.

于 2012-12-04T09:53:54.560 回答
0

可能您可以使用句柄类

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

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

另请参阅此问题

于 2013-06-27T13:04:40.853 回答