Matlab 集群计算使用心得

            相信很多研究人员都和我一样使用Matlab分析和研究各种算法。最近无意之中发现matlab提供的并行工具箱,通过简单地修改(仅仅把for改为parfor,存在依赖关系的变量用新变量代替),就可以让单机matlab并发多个线程运行,并发线程数与本机cpu核数相当。例如:我的机器是Intel i5 2300,有四个物理core,因此最多可并发为4线程。

        目前我正在进行一种算法的训练实验,需要使用大量图片数据,受到内存容量限制,目前采用一张一张从磁盘上读取处理的方式,单线程matlab处理起来速度很慢,通过4线程并发,速度提高了不少。

        其实Matlab的威力远远不止这一点,还可将多台电脑联合起来搭建分布式计算集群。网上有很多教程介绍如何搭建计算集群,大家可参考这些资料:

        http://cnbeta.blog.51cto.com/1234897/1193348

        http://m.oschina.net/blog/102208

       以Matlab R2012b,Windows 7环境为标准,总体来讲,搭建分布式计算集群的关键步骤如下:

        1.在服务器上安装“生产服务器版Matlab”,必须安装配套的MDCE工具。

        2.配置MDCE工具(参考http://cnbeta.blog.51cto.com/1234897/1193348),并在服务管理中将MDCE服务改为当前登录的管理员名称和密码,很多网上资料都讲错了,请注意。

Matlab 集群计算使用心得_第1张图片

        3.设置Admin Center,主要将MATLAB Job Scheduler配置好,因为同一个MJS所管理的服务器要求启动线程都必须一样,因此最好将物理core相同的服务器分在同一个MJS。

Matlab 集群计算使用心得_第2张图片

        3.设置共享文件夹,所有线程都将从该共享文件夹中获取数据。网上有教程说可以将共享文件夹映射为本地文件夹来简化操作,我实验了很多次,无法成功,最可靠的方法还是老老实实按照共享文件夹地址来运行Matlab和访问数据。当然,不怕折腾,想最大化提高运算速度的童鞋也可以在每台服务器上都建立一个位置、名称都相同的目录,把所有数据在每个服务器上都拷贝一编。

Matlab 集群计算使用心得_第3张图片

        目前,我们实验室由3台服务器加入了集群,一台为(INTEL X5675 )×2 处理器,用有12个硬核;另外两台采用(AMD 6376)×2处理器,拥有16个硬核,考虑到有效性,将两个AMD服务器分在一个MJS内,将INTEL服务器单独构成一个MJS,虽然AMD 6376被MATLAB识别为拥有32个硬核,但考虑实际性能,还是只使用了16个线程。

        最后来一个性能对比:

         Matlab 集群计算使用心得_第4张图片

        现在做并行加速的方法有很多:FPGA、CUDA、OpenMP、OpenCL等等,这些技术都是以产品性能研发为核心,需要开发者细致地去调节每个可优化的参数;但对科学实验来说,这样折腾是不合算的,因为我并不能保证当前的科学实验方法一定是正确的,值得我这样去折腾,但另一方面,很多科学实验的过程又极其缓慢。Matlab提供的并行工具箱解决了这个问题。过程简单,也不需要开发者掌握高超的并行优化技能,并行环境也十分宽松,极大地提高了实验效率。

        除了CPU多线程,Matlab貌似也提供了GPU加速工具,感兴趣的童鞋可以去尝试尝试。


你可能感兴趣的:(小技巧,matlab,分布式计算,多线程)