目录
Matlab 并行工具箱学习 (1)
1.简介 (1)
1.1.并行计算 (1)
1.2.并行计算平台 (1)
1.3.Matlab与并行计算 (1)
2.Matlab 并行计算初探 (2)
2.1.并行池 (2)
2.1.1.配置和开启池(parpool) (2)
2.1.2.获取当前池(gcp) (3)
2.1.3.关闭池(delete) (4)
2.2.循环并行parfor (4)
2.2.1.Matlab client 和Matlab worker (4)
2.2.2.并行程序中的循环迭代parfor (4)
2.2.3.利用parfor并行for循环的步奏 (5)
2.3.批处理(batch) (5)
2.3.1.运行批处理任务 (5)
2.3.2.运行批处理并行循环 (6)
2.4.MATLAB的GPU计算 (6)
2.4.1.GPU设备查询与选择 (8)
2.4.2.在GPU上创建阵列 (8)
2.4.3.在GPU上运行内置函数 (9)
2.4.4.在GPU上运行自定义函数 (10)
3.总结 (11)
参考文献 (1)
Matlab 并行工具箱学习
1.简介
高性能计算(High Performance Computing,HPC)是计算机科学的一个分支,研究并行算法和开发相关软件,致力于开发高性能计算机。可见并行计算是高性能计算的不可或缺的重要组成部分。
1.1.并行计算
并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集。通过并行计算集完成数据的处理,再将处理的结果返回给用户[1]。
1.2.并行计算平台
平台是并行计算的载体,它决定着你可以用或只能用什么样的技术来实现并行计算。
多核和集技术的发展,使得并行程序的设计成为提高数值计算效率的主流技术之一。常用的小型计算平台大致分为:由多核和多处理器构建的单计算机平台;由多个计算机组成的集(Cluster)。前者通过共享内存进行数据交互,后者通过网络进行数据通信。
计算正在从CPU(中央处理)向CPU 与GPU(协同处理)的方向发展。
GPU最早主要应用在图形计算机领域,近年来,它在通用计算机领域得到了迅猛的发展,使用GPU做并行计算已经变得越来越重要和高效。
常用的并行计算技术包括多线程技术、基于共享内存的OpenMP技术,基于集的MPI 技术等。但它们都需要用户处理大量与并行计算算法无关的技术细节,且不提供高效的算法库,与数值计算的关联较为松散。
1.3.Matlab与并行计算
Matlab即是一款数值计算软件,又是一门语言,它已经成为数值计算领域的主流工具。Matlab提供了大量高效的数值计算模块和丰富的数据显示模式,便于用户进行快速算法的
研究和科学建模仿真。自Matlab 2009 之后,Matlab推出了并行计算工具箱(Parallel Computing Toolbox,PCT)和并行计算服务(Distributed Computing Server,DCS),通过PCT 和DCS用户可以实现基于多核平台、多处理器平台和集平台的多种并行计算任务。利用PCT和DCS,用户无需关心多核、多处理器以及集之间的底层数据通信,而是将主要精力集中于并行算法的设计。此外,PCT还增加了对GPU(Graphics Processing Unit)的支持。
2.Matlab 并行计算初探
Matlab 并行计算工具箱,使用多核处理器,GPU和计算机集,解决计算和数据密集型问题。高层次的结构并行for循环,特殊阵列类型和并行数值算法,让你在没有而CUDA 或MPI编程基础的条件下并行MA TLAB应用程序。您可以使用带有Simulink的工具箱并行运行一个模型的多个仿真。
该工具箱,通过在本地workers(MATLAB计算引擎)上执行应用程序,来使用多核台式机的全部处理能力。不用改变代码,就可以在计算机集或网格计算服务(使用MA TLAB 分布式计算服务器™)上运行相同的应用程序。可以交互地或批处理地运行并行应用程序。
包含以下特性:
⏹并行for 循环(parfor),可以在多个处理器上运行任务并行算法。
⏹支持CUDA 的NVIDIA GPU。
⏹通过本地workers,充分利用台式机的多核处理器。
⏹计算机集和网格计算支持(通过MATLAB分布式计算服务)。
⏹以交互方式和批量方式执行并行应用程序。
⏹分布式阵列和SPMD(single-program-multiple-data),用于大型数据集的处理和数
据并行算法。
本文仅介绍循环的并行,批处理和GPU并行计算。
2.1.并行池
2.1.1.配置和开启池(parpool)
在使用parfor和spmd之前,首先要配置和开启并行计算池。parpool函数1提供并行池的配置和开启功能,其用法如下表2-1:
1在较早的版本中,是matlabpool,本人实验平台是Matlab 2014a,输入matlabpool,提示在后期版本中会将其移除,并取而代之以parpool,所以本文仅阐述parpool的用法。
表2-1 parpool函数用法
图2-1 输入命令p=parpool时的运行结果
输出参数p为并行池对象,一个池对象有7中属性,上图显示了6种属性。其中,“NumWorkers”代表worker的个数,也就是说开启了两个并行池;“IdleTimeout”指定了池定时关闭的时长,单位为分钟,图中为30分钟;“SpmdEnabled”指定池是否可以运行SPMD 代码,其它属性相见Matlab 并行工具箱手册[2]。
此外,可以通过p.Property 访问和设置属性,如p.IdleTimeout = 10;可以设置定时关闭池的时长为10分钟。
2.1.2.获取当前池(gcp)
如果在启动池时没有设置输出参数p,可以使用gcp函数获取当前池的对象,gcp的用法如下表2-2:
表 2-2 gcp 用法
2.1.
3. 关闭池(delete )
Matlab 中,使用delete 函数关闭或删除池,用法:delete(poolobj),其中poolobj 为要关闭的池对象。
2.2. 循环并行parfor
2.2.1. Matlab client 和Matlab worker
Matlab 并行执行parfor 循环时,采用client
和worker 模式。其中client 指编写和启动并行
代码的Matlab 段,worker 指并行运行代码的
Matlab 端。用户可以将Matlab 软件理解为一
个进程,在同一计算机或网络上的多个计算机
tool工具箱
上可以运行多个Matlab 进程,每个Matlab 进
程之间通过某种方式进行数据传输,用户首先
在client 端编写代码,然后再client 端运行编
写的代码,在运行代码的过程中,如果某个程
序需要并行执行,Matlab client 端根据并行代码的关键字及类型将并行代码分配到本机或网络上的其它Matlab
进程执行,那些最终执行并行代码的Matlab 进程即为worker[3]。右图显示了,Matlab client 对parfor 关键字的处理,它将任务分配到多个Matlab workers 上并行执行程序。假设m 为Matlab worker 的数量,循环次数为n ,若n/m 为整数的话,则循环将被均匀划分到Matlab worker ;否则,循环被非均匀划分,有些Matlab worker 的负载会大些。
2.2.2. 并行程序中的循环迭代parfor
应用parfor 的一个基本前提是循环可以被等效分解,即分解后的循环的执行顺序不会影响最终结果。parfor 的用法与for 类似,其语法如下表 2-3:
图 2-2 Matlab client 分配parfor 并行任务到多个Matlab

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。