0

関数とオブジェクトを使用して コンピューティングを使用して、関数の変数の要素に対して要素ごとの関数を実行しています。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 ToolboxMatlabではをサポートしていないため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 に答える