我有数千行 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
fork MATLAB 线程是相当麻烦的。我想使用parfor
, 来实现此代码,以获得更好的可维护性和更小的内存使用量。但是有什么办法可以将不同线程/工作者的输出重定向fprintf
(和disp
)到单独的窗口?
谢谢 :)