私は数千行のMATLABコードを持っており、fMRI脳画像データに対してさまざまな計算集約型の操作を実現しています。操作の多くは複数の並列スレッドで実行できますが、問題は、異なるスレッド/ワーカーのすべてfprintf
の出力が同じウィンドウに出力されることです。disp
unix
Linux環境でコマンドを使用して新しいMATLABインスタンスをフォークするカスタムマルチスレッドコードを作成しました。したがって、最初に.mファイルPreprocessSubj1.m、PreprocessSubj2.m、PreprocessSubj3.m、およびPreprocessSubj4.mを書き出します。これらにはそれぞれ同じ計算が含まれていますが、サブジェクトが異なります。これらの4つのMATLAB関数は、互いに完全に独立しています。
CellArrayOfFunctions = { 'PreprocessSubj1', 'PreprocessSubj2', ...
'PreprocessSubj3', 'PreprocessSubj4' };
CellArrayOfFunctions_i = 1;
while (CellArrayOfFunctions_i <= size(CellArrayOfFunctions, 2))
FunctionToBeRun = CellArrayOfFunctions{CellArrayOfFunctions_i};
unix([ 'matlab -desktop -r ', FunctionToBeRun, ' &' ]);
CellArrayOfFunctions_i = CellArrayOfFunctions_i + 1;
end
unix
MATLABスレッドのフォークに使用するのはかなりの手間だと思います。parfor
保守性を高め、メモリ使用量を減らすために、を使用してこのコードを実装したいと思います。しかし、異なるスレッド/ワーカーの出力を別々のウィンドウにリダイレクトfprintf
(および)する方法はありますか?disp
ありがとうございました :)