1

私は、他の多くのカスタムメイドのパッケージを使用する MATLAB プログラムに取り組んでおり、多くの場合、同様の名前のファイルが含まれています。そこで、カスタム パッケージ アプローチ ( http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html ) を使用して、さまざまな関数内の特定の関数を参照するときに効果的にドット表記を取得することにしました。私が使用しているパッケージ。たとえば、次のposeファイル構造を持つパッケージがあります。

MATLAB % on the MATLAB path
   --- +pose
          --- detect.m
          --- MORE STUFF
   --- +tracker
          --- MORE STUFF
   --- main.m

私のmain.mファイルには、並列化された for ループがあります。

parfor i=start:stop
    ... BLAH BLAH
    boxes = pose.detect(stuff);
    ... BLAH BLAH
end

しかし、私はエラーが発生し続けます

MATLAB は、「ポーズ」が関数または変数のどちらを参照しているかを判断できません。Parallel for Loops in MATLAB、「明確な変数名」を参照してください。

MATLAB 並列プログラミング ドキュメント ( http://www.mathworks.com/help/distcomp/programming-considerations.html ) を見ると、並列 for ループ内で使用するすべての関数は for ループ内で透過的でなければならないようです。しかし、これは、「parfor ループを実行するすべてのワーカーは、クライアントと同じ MATLAB 検索パスを持つ必要がある」という MATLAB の他の並列プログラミングの原則に直接違反しているようです。

誰もこれを調整する方法を知っていますか?

4

1 に答える 1

1

答えが見つかりました!

この Web ページhttp://www.mathworks.com/help/distcomp/share-code-with-the-workers.htmlから、パス コマンドをワーカー スタートアップ ファイルに入れること で解決策を実行しました。matlabroot\toolbox\local\startup.m

だから私は行を追加しましたpath('/custom_dir/MATLAB/', path);、そしてそれはうまくいきました。

于 2014-09-17T19:19:36.957 に答える