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,并行多些