进程分块和数据布局
对于现在的电脑,在分等级的内存中数据设计布局对于并行化的代码的表现十分重要,scaLAPACK对与数据的储存和进程的设计都有他自己的方案
- 进程网格
一般的并行化代码的进程池都是一维的,但是在这里会从一维映射到二维,映射的顺序可以是以行优先排列或者以列优先排列,但是大多数情况下是使用行优先的规则。程序接口BLACS_GRIDMAP
可以帮助用户定义进程的映射。
0 | 1 | 2 | 3 |
---|---|---|---|
4 | 5 | 6 | 7 |
- 上下文
每一个进程网格都包含在一个上下文(context
) 中,每一个上下文又与全局矩阵联系在一起。每个上下文可以分别通信并且互不影响,而一个上下文也可以包含一个或多个进程,我们可以有一维进程网格、二维进程网格以及一小块进程网格和它周围的网格,因此,上下文可以帮助我们
- 创造任意组合的进程
- 创造不确定数目的重叠的或者是不重叠的进程组合
- 分离线程网格所以他们可以不互相影响
程序的分级
- 这里的程序分为三个等级,每一个等级都对应着不同的问题:
- driver routine :可以解决一个完整的问题,比如说 AX=B A X = B 方程的求解
- compution routine: 解决独立的计算任务,比如说矩阵的因式分解等,一个driver routine 会引用一系列的compution routine 来完成任务,有时候当driver routine 解决一个问题不太方便的时候用户可以直接引用一个compution routine.
- Auxiliary routines:处理更小的操作,矩阵的缩放等
程序命名规则
对于
driver routine
和compution routine
命名采取PXYYZZZ
规则- p是scalapack的缩写,没有特殊意义
- x代表计算精度
如果就取x,那么就代表任意精度 - YY代表对应的矩阵类型
- ZZ代表计算类型
对于
Auxiliary routine
仅仅是YY与上面有一些不同
引用SCALAPACK步骤
初始化 进程网格
CALL SL_INIT( ICTXT, NPROW, NPCOL )
输入二维网格进程的维度,输出上下文CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
获取该进程的对应网格坐标