Daily Archives: September 11, 2010

在超算上执行Matlab程序

新发展了一个算法,对MODIS LST进行重建。对象是青藏高原250sq km,共2.7M多个点。工作量十分大。写了Matlab代码。在实验室工作站进行 parallel运行,开了8个labs,每一幅大约花费 3-5小时。希望计算2005年一年的day和night LST。计算时间不能接受。

研究所部署有曙光5000大型机。LSF管理系统。在个人用户下(不一定需要系统权限,一般用户即可)安装了Matlab 2010a,MatlabRoot是 /public1/CAS/wanglx/matlab1。Putty连接到超算后,执行./matlab1/bin/matlab,提示glibc 不支持,当前版本是 glibc 2.4,2010a支持的版本是 2.7,需要用户输入y 才能继续进入到matlab。需要对oscheck.sh进行crack,否则以后的bsub提交系统会有问题。vi $Matlabroot/bin/util/oscheck.sh进去后,注释掉584行 read ans(前面添加 #)。其后插入一行 ans = ‘y’。:w! 保存(加!是因为文件是只读),:q退出 vi。

安装XME,远程连接到超算,启动matlab,在Parallel菜单里配置 default configuration。配置一个合适的叫lsfconfig。设为default。注意在字符界面下是无法配置 defaultParallelConfig的。

使用parallel configuration是为了使用matlabpool 进行自动的分割和管理。否则自己得使用设定scheduler, job, 和task 还得自己管理输入和输出。比较麻烦一些。matlabpool 可以跟 parfor等连接起来使用,对于我们面临的任务简单的for循环十分适用。

退出xme。以 matlab -nodisplay进去,调用 interp_lst2 执行,以high 队列进去,自动连接到 256个labs进行计算。在configuration时配置 submitarguments 为 -qhigh。

interp_lst2的结构如下:

function interp_lst2

%set up some variables and reading data in from files

matlabpool open lsfconfig 64

for i=1:length(lst_data_fns)

decompose2_func(interp_image_fn, lst_dir, ref_dir, output_dir, …
dem, slope, aspect);

end

matlabpool close

function decompose2_func(…)

%set up variables

parfor i=1:interp_count

end

%posterior procedures