
并行/高性能计算
zhuliting
喜欢简单,安静……
展开
-
循环展开(loop unrolling / loop unwinding)
Loop unwinding, also known as loop unrolling, is a loop transformation technique that attempts to optimize a program's execution speed at the expense of its binary size (space-time tradeoff). The transformation can be undertaken manually by the programmer原创 2010-12-13 13:29:00 · 5405 阅读 · 0 评论 -
PETSc函数手册 and FAQ
PETSc是一种可移植可扩展科学计算工具箱,它为大规模应用代码在并行(和串行)计算机上实现提供构造模块。PETSc对所有消息传递通讯均使用MPI标准。 实在不想说什么,官方的用户手册让我很无语很纠结,下面的链接确实挺好http://www.caspur.it/risorse/softappl/doc/petsc_docs/manualpages/singleindex.html 个人觉得,学习PTESc库最好的方法,就是阅读库中的例子程序,遇到不懂的函数,就翻看函数手册。原创 2011-04-13 10:45:00 · 3490 阅读 · 1 评论 -
MPI打包和拆包测试FROTRAN代码
把一个整数数组和一个双精度数组从第0个进程传送到第1个进程,使用打包和拆包的方式实现。 program pack include 'mpif.h' integer maxbuf, len parameter (maxbuf = 200, len = 10) integer myid, p, mycomm, ierr, status(mpi_status_size, 2), & ia(len), count1, count2, i, pos real*8 a(len)原创 2011-04-29 12:45:00 · 2051 阅读 · 0 评论 -
intel 编译器的矢量化测试
/**Name : vectorized.c*Purpose: test the performance of intel compiler*Author: Albert*/#include #include #include const i原创 2011-07-14 15:57:34 · 1483 阅读 · 0 评论 -
用PAPI测试高速缓存命中率和TLB缺失率
program papitest implicit none#include "f90papi.h" integer, parameter::N = 5000 integer x(N,N),y(N,N),z(N,N)原创 2011-07-29 19:13:33 · 3555 阅读 · 4 评论 -
relocation truncated to fit: R_X86_64_PC32
/home_soft/soft/x86_64/compiler/intel/11.0/081/lib/intel64/libifcore.a(for_diags_intel.o): In function `for__message_catalog_close':for_dia原创 2011-09-02 22:12:34 · 7696 阅读 · 0 评论 -
不执行任何任务的进程,有时也不可或缺
又一次相信存在即是合理的!超算中心的x64_blades刀片部分作业队列限制CPU核心数必须大于70,而当我需要10-70个核的时候,不能直接提交作业,于是。。。于是。。。原来空闲的进程也是有它的作用的,正如某些xxxx,这个社会太邪恶了。。。下面的程序会有所启发 pro原创 2011-07-11 19:19:30 · 881 阅读 · 0 评论 -
Hadoop 与MPI
Hadoop设计时有以下的几点假设1、服务器失效是常态事件,而不是意外事件;2、存储和处理的数据是海量的;3、文件不会被频繁写入和修改,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在;4、机柜内的数据传原创 2011-09-27 09:12:45 · 10587 阅读 · 6 评论 -
Jacobi迭代并行算法
Jacobi迭代是一种常见的迭代方法,迭代得到的新值是原来旧值点相邻数据点的平均。串行程序片段如下: 并行化方法之一,可以考虑按列划分,边界点新值的计算需要相邻边界其它块的数据,所以在划分后,每一个数据块的两边各增加一列,用于存放通信得到的数据。如下图: program main implicit none includ原创 2012-03-23 14:57:31 · 10638 阅读 · 9 评论 -
八皇后问题的并行
八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。八皇后问题的串行 为实现八皇后问题,既每行每列放置一个皇后,而且每一条对角线和每一条反对角线上最多只能有一个皇后,主要需要解决放置冲突的问题。冲突主要包括行、列、两条对角线,具体情况如下: (1)列:规定每一列放一个皇后,不会造成列上的冲突; (2)行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态;原创 2011-04-05 13:20:00 · 3440 阅读 · 0 评论 -
共轭梯度法(CG法)
数学上,共轭梯度法是求解特定线性系统的数值解的方法,其中那些矩阵为对称和正定。共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。这种系统在数值求解偏微分方程时相当常见。 共轭梯度法也可以用于求解无约束的最优化问题。 双共轭梯度法提供了一种处理非对称矩阵情况的推广。关于CG方法的详尽阐述,请参考胡家赣的《线性代数方程组的迭代解法》一书第五章。 方法的表述设我们要求解下列线性系统其中n-×-n矩阵A 是对称的(也即,AT = A),正定的(原创 2011-03-20 21:57:00 · 8301 阅读 · 0 评论 -
多级CPU Cache的利用率
CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于二级缓存不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存原创 2011-02-27 11:45:00 · 2146 阅读 · 0 评论 -
内存阶层(Memory hierarchy)
由于硬件技术的限制,我们可以制造出容量很小但很快的存储器,也可以制造出容量很大但很慢的存储器,但不可能两边的好处都占着,不可能制造出访问速度又快容量又大的存储器。因此,现代计算机都把存储器分成若干级,称为Memory Hierarchy,按照离CPU由近到远的顺序依次是CPU寄存器、Cache、内存、硬盘,越靠近CPU的存储器容量越小但访问速度越快,下图给出了各种存储器的容量和访问速度的典型值。原创 2010-12-14 16:12:00 · 2620 阅读 · 0 评论 -
进程的内存布局
Linux内存管理机制 Linux的内存管理主要由两个部分组成,一个部分负责物理内存的申请与释放,物理内存的申请与释放最小单位与Windows一样,都是以"页"为单位,在IA32中页的大小是4 KB;另外一个部分负责处理虚拟内存,虚拟内存的操作主要包括虚拟地址空间与实际存储空间的映射,物理内存页与硬盘页之间的置换等,下面各节分别介绍这几个方面的内容。进程的内存布局 一个32位Linux进程的地址空间为4 GB,与Windows类似,这个4 GB空间并不能全部被一个Linux进程的用户原创 2010-12-21 21:29:00 · 1104 阅读 · 0 评论 -
什么是“内存墙”
内存墙,指的是内存性能严重限制CPU性能发挥的现象。 在过去的20多年中,处理器的性能以每年大约55%速度快速提升,而内存性能的提升速度则只有每年10%左右。长期累积下来,不均衡的发展速度造成了当前内存的存取速度严重滞后于处理器的计算速度,内存瓶颈导致高性能处理器难以发挥出应有的功效,这对日益增长的高性能计算(High Performance Computing,HPC)形成了极大的制约。这种严重阻碍处理器性能发挥的内存瓶颈命名为"内存墙"(Memory Wall)。 在信息科学领域,更多核心原创 2010-12-27 20:35:00 · 5327 阅读 · 0 评论 -
memory wall/Spatial locality/Temporal locality/Memory Latency/
Generally speaking, memory bus bandwidth has not seen the same improvement as CPU performance (an observation sometimes referred to as the memory wall), and with multi-coreand many-core systems, the available bandwidth is shared between all cores. This m原创 2010-12-27 20:57:00 · 1338 阅读 · 0 评论 -
进程工作集
一个进程当前使用的页的集合叫做它的工作集(working set)。如果整个工作集都在内存中,在进入下一个运行阶段之前进程的运行不会引起很多页面故障。如果内存太小无法容纳整个工作集,进程运行将引起大量的页面故障并且速度十分缓慢。一个每隔几条指令就发生一次页面故障的程序被称为是在颠簸。 现代计算机系统中内存的访问速度远远高于外存的访问速度。如果系统中不产生缺页中断,则访问数据的时间约等于内存访问时间。但是如果发生缺页中断,则需要从外存中将该页调入,因此会大大降低系统性能。通过对缺页率的长期研究,Den原创 2011-01-05 19:53:00 · 5855 阅读 · 0 评论 -
SpMV的CSR程序
#include #include //#includeusing namespace std;const int MAXM = 1500000;const int MAXN = 1500000;const int matSize = 30000000;int row, col, nnz;const int TestTime = 100;int row_start[MAXM];long col_idx[matSize];float value[matSize]原创 2011-01-06 16:38:00 · 2645 阅读 · 0 评论 -
多处理器系统MESI cache一致性协议
一致性要求是指,若cache中某个字被修改,那么在主存(以及更高层次)上,该字的副本必须立即或最后加以修改,并确保它者引用主存上该字内容的正确性。 当代多处理器系统中,每个处理器大都有自己的cache。同一主存块的拷贝能同时存于不同cache中,若允许处理器各自独立地修改自己的cache,就会出现不一致问题。解决此问题有软件办法和硬件办法。硬件办法能动态地识别出不一致产生的条件并予以及时处理,从而使cache的使用有很高的效率。并且此办法对程序员和系统软件开发人员是透明的,减轻了软件研制负担,从而普遍原创 2011-02-27 10:47:00 · 7152 阅读 · 3 评论 -
cache的三种写操作工作方式
因为cache的内容是部分主存内容的副本,应该与主存内容保持一致。而CPU对cache的写入更改了cache内容,如何与主存内容保持一致就有几种写操作工作方式可供选择,统称为写策略。 1.写回法(write--back) 当CPU对cache写命中时,只修改cache的内容不立即写入主存,只当此行被换出时才写回主存。这种策略使cache在CPU-主存之间,不仅在读方向而且在写方向上都起到高速缓存作用。对一cache行的多次写命中都在cache中快速完成修改,只是需被替换时才写回速度较慢的主存,减少了访问主原创 2011-02-27 11:26:00 · 32901 阅读 · 0 评论 -
Cache介绍及Cache/主存系统的读操作原理
缓存(cache)大小是CPU的重要指标之一,其结构与大小对CPU速度的影响非常大。简单地讲,缓存就是用来存储一些常用或即将用到的数据或指令,当需要这些数据或指令的时候直接从缓存中读取,这样比到内存甚至硬盘中读取要快得多,能够大幅度提升cpu的处理速度。CPU与cache之间的数据交换是以"字"为单位,而cache与主存之间的数据交换是以"块"为单位,一个块由若干字组成,是定长的,以体现"保存下级存储器刚才被存取过的数据及其邻近小范围的数据"这一概念。CPU进行存储器读操作时,根据主存地址可分成命中和未命中原创 2011-02-27 11:30:00 · 9108 阅读 · 0 评论 -
矩阵乘的MPI并行程序
计算A * B = C, 其中矩阵A, B均为方阵,采用主从式程序设计模式,用户从键盘输入矩阵规模N,然后随机数给矩阵赋值。我的并行化方法很简单,将矩阵A按行划分,由主进程将矩阵A散发给各个子进程,各子进程把计算结果发送给主进程汇总。其中的矩阵都是用一维数组来模拟的,代码附上,欢迎拍砖~毕业了,才发现很喜欢并行计算啊~ #include "mpi.h"#include原创 2012-04-20 22:03:31 · 5559 阅读 · 6 评论