进度条与parfor和nohup

问题描述 投票:0回答:1

我想使用以下方法来监控一个脚本的进度 parfor. 不幸的是,由于它需要大量的计算能力和时间,我必须在远程多处理器计算机上启动它,使用的是 nohup.

作为第一次尝试,我使用了 fprintf 以使每个并行实例都有一个输出,即

parfor i = 1:N
    fprintf('Computing instance %i out of %i\n', i, N)
    % Other code
end

并计算 "instance "一词在本例中的出现次数。nohup 输出文件,使用 grep. 然而,由于 N 顺序为 ~ 1E8 ~ 一些数以亿计的,输出文件变得巨大,所以我想避免它。

然后,我开始尝试一些 parfor 进度条,我在网上可以找到。但是,大部分都是用图形输出的,其他几个都有一些缺点,如果与 nohup (比如在输出文件中我发现进度条的每一次更新,所以输出文件又会很大)。

我如何有效地监控一个 parfor,而使用 nohup?

matlab parallel-processing nohup parfor
1个回答
0
投票

Q : "我如何才能有效地监测一个 parfor,而使用 nohup?"

我更倾向于使用ZeroMQ JeroMQ-port,并从内部明确发出信号。parfor 任何实际(相关)进展。

import org.zeromq.ZMQ;

aCtx = zmq.Ctx();
ADDR = 'tcp://127.0.0.1:75757';

parfor i = 1:N
     fprintf( 'Computing instance %i out of %i\n', i, N );
     %---------------------------------------------------------------------
                                     aSocket = aCtx.createSocket( ZMQ.PUB );    
                                     aSocket.connect( ADDR );
                                     aMessage = zmq.Msg( 9 );
                                     aMessage.put( unicode2native( 'SIG:START' ) );
                                     aSocket.send( aMessage, 1 );
     %---------------------------------------------------------------------
     % Other code
     %---------------------------------------------------------------------
                                     aMessage = zmq.Msg( 7 );
                                     aMessage.put( unicode2native( 'SIG:END' ) );
                                     aSocket.send( aMessage, 1 );
                                     aSocket.close();
     %---------------------------------------------------------------------

end

为此,您将需要一个 SUB-用户端,收集所有的信号信息,很明显的 .bind() 并在上述规定的 ADDR:PORT 地址,有GUI还是无头,都取决于你喜欢的语言&显示器的需求。


如何安装?

重复使用Will Grant的安装 忠告 以及他或她所提及的链接 此处.


如果一个人从来没有使用过 ZeroMQ在这里,我们可以先看看 "ZeroMQ。原则 不到 五秒" 刨根问底


© www.soinside.com 2019 - 2024. All rights reserved.