然后发现 copy 要关闭服务了, lol….
集群调度系统SGE的安装和配置
SGE(最初为Sun Grid Engine,后来几经易主)算是比较老的一套集群调度系统了,网上可供参考的资料不是很多,但简单好使。集群管理软件Rocks也用SGE来分配任务,很多脑科学领域的软件(如FSL)也默认使用这个。
先来一篇概要的文章,从安装、使用到管理写得很详细。
安装的时候,一步步根据提示走就行了。之后,根据自己集群的情况(集群中机器配置不尽相同),建立多个主机组(hosts group)和多个队列(queue),并逐渐调整参数使集群的运行情况达到较优的水平。
自己建立队列(queue)的时候,修改了以下参数:
- hostlist:放上自己所需的主机组名,如
@allhosts
- seq_no:队列编号,可以用来表示优先级,0 代表最优先
- priority:优先级,默认为0(最优先),可以调大使优先级降低
- slots:表示所使用的主机CPU数,默认为1,可以设置一个统一的值,也可以针对单台主机设定各自的CPU数,如
1,[host1=4],[host2=8]
- shell:默认使用
/bin/csh
,可以改为其他的shell,我改成了/bin/sh
- shell_start_mode:shell的起始模式,默认为
posix_complicant
,我改成了unix_bahavior
,可以识别shell第一行的指定程序(如#!/bin/bash
)
其他的参数设置,可以参考自带的帮助或相关的手册。
GPU计算知识汇总
晚上了解了些GPU并行计算相关的内容,大致对其有了了解,在此记录下自己所搜集的内容:
- 一个介绍CUDA的ppt(Cruz_gpuComputing09.pdf),很好的一个入门材料
- 一个系列博客文章,循序渐进展现具体的编程实践
- NVIDIA的CUDA C 编程指导
- 两篇知乎的问答
NVIDIA CUDA、AMD stream、C++ AMP、OpenCL等GPU计算框架各有什么特点?
和CUDA和OpenCL有什么区别?
- 风辰的一系列CUDA博客文章,讲了CUDA的很多细节,也讲了很多如何进行GPU优化的策略与思考
- Rachel Zhang的一系列CUDA学习笔记,非常务实的一个博客,人气很高
- NVIDIA公司的一个介绍OpenCL的ppt(06-intro_to_opencl.pdf)
- MATLAB上的GPU计算
- MATLAB程序的GPU优化
- 一个比较OpenACC、CUDA和OpenCL的视频及其ppt
MATLAB 的并行计算
MATLAB主要使用两个自带的工具箱来实现并行计算:
- Parallel Computing Toolbox (PCT) 可用来在单台机器上利用多个CPU核心来并行计算
- Distributed Computing Server (DCS) 可以在一个集群上跨机器运行任务
DCS需要根据集群的调度系统(如LSF)来设置一些配置参数,而且需要购买授权来使用。PCT无需授权可直接在单台机器上运行。使用者一般会在单台机器上用PCT来实现并行计算后,再用DCS来进行跨机器的扩展。
自R2013b起,MATLAB使用了新的parpool程序来替换原先的matlabpool程序,用来开启关闭多核计算,详见更新列表。而且从R2014a起,不再限制单台最多12个worker了,可以充分利用服务器多核的优势了。
使用parfor是最简单的一种使用MATLAB并行功能的方法,要求parfor循环中的程序文件可独立,不耦合。相关的用法可以参考这篇文章。
使用PCT的过程中有时会遇到无法打开matlabpool的情况——Failed to locate and destroy old interactive jobs
,通过查找解决方案,可以通过删除local scheduler data
(或local cluster jobs
)来解决。