作者:桂。

时间: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并行拆解的更多相关文章

  1. Jacobi并行拆解【补充】

    作者:桂. 时间:2018-04-24  22:04:52 链接:http://www.cnblogs.com/xingshansi/p/8934373.html 前言 本文为Jacobi并行拆解一文 ...

  2. Java并行程序设计模式小结

    这里总结几种常用的并行程序设计方法,其中部分文字源自<Java程序性能优化>一书中,还有部分文字属于个人总结,如有不对,请大家指出讨论. Future模式 一句话,将客户端请求的处理过程从 ...

  3. 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计

    这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...

  4. 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式

    这里的内容主要是都志辉老师<高性能计算之并行编程技术——MPI并行程序设计> 书上有一些代码是FORTAN的,我在学习的过程中,将其都转换成C的代码,便于统一记录. 这章内容分为两个部分: ...

  5. .Net并行编程(一)-TPL之数据并行

    前言 许多个人计算机和工作站都有多个CPU核心,可以同时执行多个线程.利用硬件的特性,使用并行化代码以在多个处理器之间分配工作. 应用场景 文件批量上传 并行上传单个文件.也可以把一个文件拆成几段分开 ...

  6. java8新特性(六):Stream多线程并行数据处理

    转:http://blog.csdn.net/sunjin9418/article/details/53143588 将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法 publi ...

  7. OpenACC 书上的范例代码(Jacobi 迭代),part 1

    ▶ 使用Jacobi 迭代求泊松方程的数值解 ● 原始串行版本,运行时间 2272 ms #include <stdio.h> #include <stdlib.h> #inc ...

  8. 异步与并行~List<T>是线程安全的吗?

    返回目录 题目有点意思,大家都知道Dictionary<K,V>不是线程安全的类型,而List<T>是线程安全的吗?在今天之前大叔没有去测试过,而就在今天也是一个VIP问我,说 ...

  9. Parallel并行之乱用

    关于Parallel我也不细说了,一则微软封装的很好用,二来介绍这个的遍地都是. 我要说的是,要想成为一个优秀的标题党,一定要把重点放到别的地方,为了节省大家阅读时间,我先把结论说了,然后再慢慢从头说 ...

随机推荐

  1. C语言操作Redis总结

    #include "hiredis.h" #define NO_QFORKIMPL #pragma comment(lib,"hiredis.lib") #pr ...

  2. CyclicBarrier的用法

    CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待, ...

  3. Java Runtime.exec

    http://www.cnblogs.com/softidea/p/4287519.html http://www.jianshu.com/p/af4b3264bc5d http://yindingt ...

  4. Mybatis中的延迟加载的使用方法

    Mybatis中的延迟加载的使用方法 在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下 <?xml version="1.0&q ...

  5. Flash和js交互的效率分析

    Flash和js交互的效率分析   AS代码: var time:int = getTimer(); for (var i:int = 0; i < 50000; i++) { External ...

  6. Flash: Event.PASTE Flash获取剪贴板内容 触发paste事件 how to get paste event

    actionscript把文字存放到剪贴板这个就非常简单了,一般网站做点击复制基本都是这么做的. 但是,基本没有人做flash粘贴内容.今天本来想尝试一下,通过flash实现网页编辑器粘贴图片,但貌似 ...

  7. 使用Repository Creation Utility创建档案库并连接

    使用Repository Creation Utility创建档案库 档案库创建方式 1. 使用Repository Creation Utility创建 1.1使用下载的RCU http://www ...

  8. javascript 如何打印、输出数组内容(将数组内容以字符串的形式展示出来)

        1.情景展示 在实际开发过程中,为了调试,有时我们需要看数组中具体包含了哪些数据,但是, 如果我们直接打印该数组对象,显示的结果却不是我们想要的. 如何才能将数组内容打印出来呢?(将数组内容以 ...

  9. centos6.5搭建redmine3.4

    缺陷管理,对问题的持续跟踪!redmine很棒的基于ruby开发 Redmine部署架构  mysql+nginx+ruby+redmine 3.4.x 部署环境 centos 6.5 x64redm ...

  10. RHEL7体验KVM虚拟机

    KVM是基于内核2.6+的虚拟化,前提是硬件须支持虚拟化! Red Hat Enterprise Virtualization-Management,即RHEV-M(管理多个RHEV-H系统) 虚拟化 ...