In this paper, we consider two fundamental symmetric kernels in linear algebra: the Cholesky factorization and the symmetric rank-$k$ update (SYRK), with the classical three nested loops algorithms for these kernels. In addition, we consider a machine model with a fast memory of size $S$ and an unbounded slow memory. In this model, all computations must be performed on operands in fast memory, and the goal is to minimize the amount of communication between slow and fast memories. As the set of computations is fixed by the choice of the algorithm, only the ordering of the computations (the schedule) directly influences the volume of communications.We prove lower bounds of $\frac{1}{3\sqrt{2}}\frac{N^3}{\sqrt{S}}$ for the communication volume of the Cholesky factorization of an $N\times N$ symmetric positive definite matrix, and of $\frac{1}{\sqrt{2}}\frac{N^2M}{\sqrt{S}}$ for the SYRK computation of $\mat{A}\cdot\transpose{\mat{A}}$, where $\mathbf{A}$ is an $N\times M$ matrix. Both bounds improve the best known lower bounds from the literature by a factor $\sqrt{2}$.In addition, we present two out-of-core, sequential algorithms with matching communication volume: \TBS for SYRK, with a volume of $\frac{1}{\sqrt{2}}\frac{N^2M}{\sqrt{S}} + \bigo{NM\log N}$, and \LBC for Cholesky, with a volume of $\frac{1}{3\sqrt{2}}\frac{N^3}{\sqrt{S}} + \bigo{N^{5/2}}$. Both algorithms improve over the best known algorithms from the literature by a factor $\sqrt{2}$, and prove that the leading terms in our lower bounds cannot be improved further. This work shows that the operational intensity of symmetric kernels like SYRK or Cholesky is intrinsically higher (by a factor $\sqrt{2}$) than that of corresponding non-symmetric kernels (GEMM and LU factorization).
翻译:本文中, 我们考虑两个基本对称内核 { 线性代数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 基数 { 和 基数 更新 (S) 基数) (S) 的排序直接影响通信量。 此外, 我们还认为一个快速内存美元=1美元和无限制内存数的机器模型 。 基数== 基数== 基数 基数 == 基数 基数 === 基数 以内存数 == 以内核数 以内核数 == 以内核数 以内核数 以内核数 立數 = ========= 以内 以内, 基数 以内 以内, 以内 以内, 以内 立數====== 以内, 基數 以内 以内 立數 =====