クラスタの異なるマシンで簡単なタスクを実行しようとしています。 設定が有効になっています(問題ありません)。 「ローカル」設定でコード を実行すると、そのコードは機能します。しかし、クラスタ の設定を使用すると、次のエラーが発生します。クラスタ上のParfor:関数の認識に失敗しました
parallel_function(行598)を使用しているエラー 入力引数 'double'の未定義関数 'lafunc'。 エラー・スタック:(なしリモートエラー・スタック)petittestで エラー(ライン6) - »(petittestは私のプログラムの名前です) それは1 =のparfor:200
を私は "dfeval" を使用してコードを変更してみてくださいparforループの代わりに しかし、私は同じ種類の結果を得ました(関数lafuncを認識できません)。
手動で定義した関数 関数をクラスター内の他のワーカーに認識させるにはどうすればよいですか?
コードは以下の通りである。lafunc機能が
%%%%%%%%%%%%%%
function [y]=lafunc(x)
y=x*x;
end
%%%%%%%%%%%%%%%%%%%%%%
おかげでたくさんある
%%%%%%%%%%%%%
laconfig='/home/matlab/fred/LACED_DC1.mat';
setmcruserdata('ParallelConfigurationFile',laconfig);
matlabpool open
parfor it=1:200
yo=lafunc(it);
disp(yo)
end
matlabpool close
%%%%%%%%%%%
、情報のすべての部分が私には便利です!
おおよそのクラスターはどのように整理されていますか?ヘッドノードでこのコードを実行していますか? lafuncの代わりに組み込み関数を置くと、parforは機能しますか? –
@IanHincksはい、クラスタのヘッドノードでプログラムを実行しています。 parforは組み込み関数で動作するので、他の作業者がメインノードにある手作業の関数を見ないという事実に関連していると私は信じています。 S.私はdfevalで 'FileDependencies'オプションを使って同様のことをすることが可能であることを発見しましたが、parforでそれを行うことが可能かどうかを知りたいと思います。どうもありがとう! –
私はあなたのノードが共通のファイルシステムを共有していないので、そのパスに関数lafuncがないと推測しています。ですから、何らかの形で各ノードのファイルシステムにその関数を渡すか、inline関数を宣言する必要があります(parforループの上に 'lafunc = @(x)x * x;')。あるいは、parforループを関数の中に置き、lafuncをサブ関数として持つことができます。それらは私が今考えることができるすべてのオプションです。 –