Jacobi并行拆解
作者:桂。
时间:2018-04-23 21:12:02
链接:http://www.cnblogs.com/xingshansi/p/8921815.html
前言
本文主要是复数矩阵分解的拆解思路(矩阵求逆/特征值分解)一文的补充。
一、并行拆解思路
回顾前文,对于8X8的实数矩阵:

仿真:
clc;clear all;
X = rand(8);
R = X+X';
Iteration = 20;
[D,U] = Jac_sweep(R,Iteration);
[u,s,v] = svd(R);
[sort(diag(s)),sort(abs(diag(D)))]
Jac_sweep并行代码:
function [D,U] = Jac_sweep(A,Iteration)
iter = 0;
n = size(A,1);
U = eye(n);
A_c = [1,2;3,4;5,6;7,8;...
2,3;4,5;6,7;1,8;...
1,3;2,4;5,7;6,8;...
3,5;4,6;1,7;2,8;...
1,4;3,6;5,8;2,7;...
2,5;4,7;1,6;3,8;...
1,5;2,6;3,7;4,8]; while iter <Iteration
iter = iter+1;
for flag = 1:size(A_c,1)/4
T = eye(n);
for t = 1:4
p = A_c((flag-1)*4+t,1);q = A_c((flag-1)*4+t,2);
y = 2*A(p,q);
x = A(p,p)-A(q,q);
phi = atan2(y,x)/2; T(p,p) = cos(phi);
T(q,q) = cos(phi);
T(p,q) = -sin(phi);
T(q,p) = sin(phi);
end
D = T'*A*T;
U = U*T;
A = D;
end
end

打印结果与SVD分解的结果一致,并行思路可行。其他维度依次类推。对于维度N的矩阵,
- N为偶数,可并行N/2路;
- N为奇数,可并行[N-1]/2路;
二、改进思路
每一次sweep,需要1次Cordic:phi = atan2(y,x)/2,和两次Cordic(两次可并行):cos(phi) / sin(phi),二者串行。对于atan2操作,可借鉴复数相位近似估计一文的思路,即对于atan的计算,考虑到CORDIC耗时较长,内存资源充足的情况下,1)直接查表;若内存相对紧张,2)多项式逼近。二者较CORDIC均减少运算时间。
另外,关于定点仿真可调用fi工具包,其中CORDIC对应指令:cordicatan2、cordiccos......
Jacobi并行拆解的更多相关文章
- Jacobi并行拆解【补充】
作者:桂. 时间:2018-04-24 22:04:52 链接:http://www.cnblogs.com/xingshansi/p/8934373.html 前言 本文为Jacobi并行拆解一文 ...
- Java并行程序设计模式小结
这里总结几种常用的并行程序设计方法,其中部分文字源自<Java程序性能优化>一书中,还有部分文字属于个人总结,如有不对,请大家指出讨论. Future模式 一句话,将客户端请求的处理过程从 ...
- 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...
- 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式
这里的内容主要是都志辉老师<高性能计算之并行编程技术——MPI并行程序设计> 书上有一些代码是FORTAN的,我在学习的过程中,将其都转换成C的代码,便于统一记录. 这章内容分为两个部分: ...
- .Net并行编程(一)-TPL之数据并行
前言 许多个人计算机和工作站都有多个CPU核心,可以同时执行多个线程.利用硬件的特性,使用并行化代码以在多个处理器之间分配工作. 应用场景 文件批量上传 并行上传单个文件.也可以把一个文件拆成几段分开 ...
- java8新特性(六):Stream多线程并行数据处理
转:http://blog.csdn.net/sunjin9418/article/details/53143588 将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法 publi ...
- OpenACC 书上的范例代码(Jacobi 迭代),part 1
▶ 使用Jacobi 迭代求泊松方程的数值解 ● 原始串行版本,运行时间 2272 ms #include <stdio.h> #include <stdlib.h> #inc ...
- 异步与并行~List<T>是线程安全的吗?
返回目录 题目有点意思,大家都知道Dictionary<K,V>不是线程安全的类型,而List<T>是线程安全的吗?在今天之前大叔没有去测试过,而就在今天也是一个VIP问我,说 ...
- Parallel并行之乱用
关于Parallel我也不细说了,一则微软封装的很好用,二来介绍这个的遍地都是. 我要说的是,要想成为一个优秀的标题党,一定要把重点放到别的地方,为了节省大家阅读时间,我先把结论说了,然后再慢慢从头说 ...
随机推荐
- Aerospike系列:8:集群宕机演练
1:初始的集群状态 2:关掉192.168.91.133:3000 3:再关掉192.168.91.135:3000 3:再关掉192.168.91.144:3000 5:恢复192.168.91.1 ...
- css 进度条
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- webpack4 css 文件提取 压缩 MiniCssExtractPlugin optimize-css-assets-webpack-plugin
1.使用的插件 MiniCssExtractPlugin:https://webpack.js.org/plugins/mini-css-extract-plugin/#src/components/ ...
- XML的四种解析方法
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6646572.html XML文档以层级标签的形式来组织数据,多用于配置文件.存储静态数据.交换数据. ...
- 【leetcode】solution in java——Easy2
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6410409.html 6:Reverse String Write a function that takes ...
- sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表
先创建一个分割表名的分割函数 --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [Split](@text NVARCHAR(max)) ) ...
- 〖Linux〗git push orgin master不能解析域名的解决方法
错误信息: $ git push origin master ssh: Could not resolve hostname bitbucket.org: Name or service not kn ...
- springMVC加载远程freemarker模板文件
在一个大网站里,有很多子域名,也就是有很多子系统,这些子系统由不同的团队负责,对整个网站的风格的风格至少得要是一致的(最基本的页头.页尾必须一致),这个时候得提供一份统一的页头.页尾以及公共的JS.c ...
- 【note】EtherCAT Configurator 使用之主菜单介绍
EtherCAT配置器是一个工具,用于配置EtherCAT总线. 工具管理一个或多个EtherCAT主设备和连接到该主站的EtherCAT从站.配置的设备能够脱机或能够通过扫描EtherCAT现场总线 ...
- ios中ASIHTTPRequst的封装
#import <Foundation/Foundation.h> #import "ASIHTTPRequest.h" #import "ASIDownlo ...