并行执行多个matlab程序(多组参数)

argument passing in command line

命令行运行一个无参数的函数,如:

function f()
    fprintf("hello world!\n");
end

可以执行 matlab -nodesktop -nosplash -r f。而如果要传参数,如:

function g(alpha)
    disp(alpha);
end

参考 [1],执行 matlab -nodesktop -nosplash -r "g(27)",即用引号括起来。

parallel training

现有一个训练程序,要测试多个参数,硬件足够同时跑多组,就可以把训练函数写成:

% train.m
function train(alpha, beta)
    fprintf("begin\n");
    fprintf("alpha = %.4f, beta = %.4f\n", alpha, beta);
    % training code
    fprintf("end\n");
    exit % 必加,用来退出 matlab 环境,否则会阻塞下面 shell 的循环
end

调用的 shell 脚本:

  • 命令尾加 & 挂子进程并行跑
  • wait 命令等待并行的子进程全部结束(类似多进/线程的 join
#!/bin/bash

set -e

ALPHA=(1 2 3)
BETA=(4 5 6)

for _a in $(seq 0 `expr ${#ALPHA[@]} - 1`); do
    alpha=${ALPHA[_a]}
    for _b in $(seq 0 `expr ${#BETA[@]} - 1`); do
        beta=${BETA[_b]}
        matlab -nodesktop -nosplash -r "train($alpha, $beta)" &
    done
    wait  # 资源不是很够,就在这里 wait,并行少些
done

# wait  # 资源够,就在这里 wait,并行多些

References

  1. run matlab and pass integer parameter from command line
  2. pause

你可能感兴趣的:(机器学习,matlab,命令行,参数,并行,shell)