多核系统与加速器的LU分解编程
1. 引言
LU分解是一种经典的数值计算方法,在高性能计算中有着广泛的应用,是高性能LINPACK基准测试的主要组成部分。本文介绍了一种针对混合共享内存系统的LU分解算法实现,该系统结合了标准CPU核心和GPU加速器。通过使用四个AMD Magny Cours CPU和四个NVIDIA Fermi GPU,实现了超过1 TeraFLOPS的性能。
2. 背景知识
LAPACK块LU分解是本文的主要参考,遵循LAPACK的命名约定。矩阵M的LU分解形式为M = PLU,其中L是单位下三角矩阵,U是上三角矩阵,P是置换矩阵。LAPACK算法步骤如下:
1. 首先对一组nb列(面板)进行分解,并生成一个旋转模式(DGETF2)。
2. 将面板分解得到的初等变换应用于矩阵的其余部分(尾随子矩阵)。这包括根据旋转模式交换尾随子矩阵的最多nb行(DLASWP),对尾随子矩阵的前nb行应用多右侧三角求解(DTRSM),最后进行矩阵乘法C = C - A × B(DGEMM),其中A是不包括前nb行的面板,B是尾随子矩阵的前nb行,C是不包括前nb行的尾随子矩阵。
3. 重复上述过程,沿矩阵对角线向下进行。
3. 解决方案
主要的混合编程思想基于将工作表示为有向无环图(DAG)和动态任务调度。CPU核心处理关键路径上的复杂细粒度任务,GPU处理关键路径外的粗粒度数据并行任务。部分列(前瞻)分配给CPU,矩阵的其余部分以一维块循环方式分配给GPU。在分解的每一步,CPU分解一个面板并更新其部分尾随子矩阵,而GPU更新其部分尾随子矩阵。每一步后,一列瓷砖从GPU转移到CPU。
<
超级会员免费看
订阅专栏 解锁全文
21

被折叠的 条评论
为什么被折叠?



