Householder vectors $\boldsymbol{v}_{(i,j)}$ are shorter than the eigenvectors $\boldsymbol{X}$, a single transformation $\boldsymbol{Q}^*_{(i,j)}$ only alters a few rows of $\boldsymbol{X}$ where $\boldsymbol{v}_{(i,j)}$ has non-zero values. For instance, the Householder vector $\boldsymbol{v}_{(1,4)}$ at the left bottom corner of Fig. \[fig:step4\] only alters the last four rows of $\boldsymbol{X}$. This leads to another level of parallelism to be exploited within an individual eigenvector.

In ELPA2, the $N_p$ processes are organized in an $N_{pr}$ by $N_{pc}$ grid. The $N_{ev}$ eigenvectors are uniformly distributed across the $N_{pc}$ process columns. Within a process column, the eigenvectors are distributed across the $N_{pr}$ processes in a block manner. Each process applies a series of Householder transformations to its local part of the eigenvector matrix $\boldsymbol{X}$. The colored part in Fig. \[fig:step4\] shows an example of the local computation by a process. This process applies four Householder transformations, $\boldsymbol{Q}^*_{(8,1)}$, $\boldsymbol{Q}^*_{(7,1)}$, $\boldsymbol{Q}^*_{(6,1)}$, and $\boldsymbol{Q}^*_{(5,1)}$, to its local part of the eigenvector matrix, referred to as $\boldsymbol{X}_\text{local}$ hereafter. Apparently, $\boldsymbol{Q}^*_{(4,1)}$, $\boldsymbol{Q}^*_{(3,1)}$, and $\boldsymbol{Q}^*_{(2,1)}$ also modify the top part of $\boldsymbol{X}_\text{local}$. These three transformations are however applied by the upper adjacent process in the same process column. Therefore, the top three rows of $\boldsymbol{X}_\text{local}$ must be exchanged with the upper adjacent 