用于并行计算的一对多广播算法是指数级的。这个想法是您从单个节点开始,并希望从该节点获取消息到超立方体中的所有其他节点。超立方体本身是 2^k 个节点。因此,从第一步中的根开始,您将该消息发送到单个其他节点,然后第二步这两个节点都发送到其他 2 个节点,然后第三步,这 4 个节点发送到其他 4 个节点,依此类推。这导致p 节点超立方体的 log2(p) 步骤。
我在《并行计算导论》第二版中遇到了一个问题,它要求读者“修改(算法),使它们适用于任意数量的进程,而不仅仅是 2 的幂”。
这是其中一种算法。如果我没有弄错使这项工作专门针对 2 的幂的部分,则与 mask := mask XOR 2^i 和 (my_id and 2^i) 行有关。
具体来说,为什么我们希望该算法适用于 2 的非幂次方?由于它是一个超立方体,它是 2 个节点的幂次方,它什么时候会发生并且对它是 2 个进程的非幂次方是有益的?