1

私は数千行のMATLABコードを持っており、fMRI脳画像データに対してさまざまな計算集約型の操作を実現しています。操作の多くは複数の並列スレッドで実行できますが、問題は、異なるスレッド/ワーカーのすべてfprintfの出力が同じウィンドウに出力されることです。disp

unixLinux環境でコマンドを使用して新しい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

unixMATLABスレッドのフォークに使用するのはかなりの手間だと思います。parfor保守性を高め、メモリ使用量を減らすために、を使用してこのコードを実装したいと思います。しかし、異なるスレッド/ワーカーの出力を別々のウィンドウにリダイレクトfprintf(および)する方法はありますか?disp

ありがとうございました :)

4

1 に答える 1

2

おそらく/dev/ pts /#に書き込みたいと思うでしょう。ここで、#はウィンドウを示します。これは次の方法で実行できます。

output1 = fopen('/dev/pts/0', 'w');
output2 = fopen('/dev/pts/1', 'w');
fwrite(output1, 'Data to window 1');
fwrite(output2, 'Data to window 2');

ただし、どういうわけか/ dev /pts/の後に置く番号を決定する必要があります。新しい端末を開くたびに、その端末に対応する新しいファイルが表示されるので、で使用できる端末を確認できます!ls /dev/pts

于 2012-04-09T15:23:14.997 に答える