matlab并行运算方法
来源:互联网 发布:数据侠客行txt网盘 编辑:程序博客网 时间:2024/06/10 09:42
matlab并行运算方法
matlab在计算大数据内存以及大矩阵运算时,单核运算显然无法满足高速的运算需求。其实matlab提供多核运算的解决方案,这里先介绍最简单的两种
- parfor
- distributed
- spmd
打开并行运算的方法是parpool(4);或者是左下角的start parallel pool。
- parfor
其实,matlab在计算中比较耗时的运算主要是循环与矩阵分解等操作,for循环一般最为耗时,解决方法就是采用parfor代替for,parfor可以自动将循环任务分配到多个核中,现在matlab的命令行窗口运行parpool(4)查看是否可以并行计算,没有报错则并行已打开。parfor运行时就会有多个matlab进程在计算。计算效率明显提升。
**注意:parfor循环中不能使用迭代或者关联性的赋值语句,因为多个核计算时无法交换数据。**parfor具体可参考help文档,这里只说明一种嵌套循环的解决方法。
因为parfor只支持一层循环,所以下面这种写法是非并行的,并且可能会出错。
parfor(for) i = 1:100 parfor(for) j = 1:100 y(i,j) = i+j; endend
正确的写法是
i = 1:100;j = 1:100;[I,J] = meshgrid(i,j);parfor i = 1:numel(I) Y(i) = I(i)+J(i);endy = reshape(Y,length(i),length(j));
其实最好的解决for循环计算速度慢的问题是用矩阵运算代替循环。
- distributed
对于大矩阵的存储问题以及计算的问题,除了自己分块外,可以使用matlab自带的内存分配解决方法,但需要确保你的电脑内存足够多,计算效率就会大幅提高。不然会有内存溢出的问题。
具体方式是
tic;X = randn(10000);x_dis = distributed(X);clear(X);whosa = svd(x_dis);a_out = gather(a);%distrituted数据类型变为doubletoc;
之后可以采用x_dis代替X进行计算即可。gather函数的作用是把distributed数据类型变为double。
- spmd
spmd老实说实际应用场景感觉并不多,大致上是相当于在没一个worker上运行一遍,比如你可以产生好多数据集,每个数据集在不同的worker上运行以此来实现并行,spmd的基本用法是
spmd statementsend
spmd中的一个重要的参数是labindex,它是指每个worker的索引,用来表示此时正在工作的是哪一个worker。
此外,matlab的大多数工具箱都开始支持并行计算,所以如果该问题可以用自带工具箱解决的可以使用工具箱自带的并行计算方法。
matlab的Parallel Computing Toolbox工具箱就支持并行。
阅读全文
1 0
- matlab并行运算方法
- Matlab并行运算
- Matlab并行运算
- Matlab并行运算
- MATLAB并行运算
- MATLAB 并行for运算
- matlab并行运算(parallel computing)
- Matlab并行编程方法
- matlab中的并行方法
- Matlab并行编程方法
- Matlab并行编程方法
- matlab学习日志之并行运算
- MatLab的多线程(并行运算)
- Matlab 多核 多个CPU 并行运算
- Matlab 2015b 并行运算 SPMD
- Matlab2014b 并行运算开启方法
- matlab并行运算之我是搬运工(一)
- matlab两种不同模式的并行运算
- C++之using namespace std 详解与命名空间的使用
- 分类算法----线性可分支持向量机(SVM)算法的原理推导
- Java实现定时调度的三种方法
- 数据结构(队列--两个栈实现)
- 基于Eclipse的web开发实践之安装spring插件
- matlab并行运算方法
- 数字图像处理——用Java对图像做镜像变换
- docker
- 制作多周期CPU(代码)
- JavaWeb学习随笔(一) id name property相关,以及一般项目的流程
- Android View的绘制过程
- 智能一代云平台(二十四):已安装的Nginx上安装echo
- MQ在分布式系统中的应用于协作
- 避免死锁的进阶指导