并行编程模型:数据分布与信息交换
在并行编程中,数据分布和信息交换是至关重要的概念。合理的数据分布能够提高并行程序的效率,而有效的信息交换则是保证各个处理器之间协调工作的关键。
1. 数据分布
对于一个 $d$ 维数组 $A$,其索引集为 $I_A \subset N^d$,数组大小为 $n_1 \times … \times n_d$,数组元素表示为 $A[i_1, …, i_d]$,其中索引 $i = (i_1, …, i_d) \in I_A$。这些数组元素会被分配到 $p$ 个处理器上,这些处理器以 $p_1 \times … \times p_d$ 的 $d$ 维网格形式排列,且 $p = \prod_{i=1}^{d} p_i$。
数据分布由分布函数 $\gamma_A : I_A \subset N^d \to 2^P$ 定义,其中 $2^P$ 表示处理器集合 $P$ 的幂集。$\gamma_A$ 的含义是,索引为 $i = (i_1, …, i_d)$ 的数组元素 $A[i_1, …, i_d]$ 会被分配到 $\gamma_A(i) \subseteq P$ 中的所有处理器上,也就是说,一个数组元素可以被分配到多个处理器。如果对于所有的 $i \in I_A$ 都有 $\gamma_A(i) = P$,则这种数据分布称为复制分布;当每个数组元素唯一地分配给一个处理器时,对于所有的 $i \in I_A$ 都有 $|\gamma_A(i)| = 1$,例如前面提到的块循环数据分布。
函数 $L(\gamma_A) : P \to 2^{I_A}$ 可以给出分配给特定处理器的所有元素,即 $i \in L(\gamma_A)(q)$ 当且仅当 $
超级会员免费看
订阅专栏 解锁全文
1777

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



