并行处理的计算顺序

时间:2013-10-06 13:31:03

标签: algorithm parallel-processing

鉴于未排序的数组,我在一篇文章中读到,可以使用n平方处理器以O(1)复杂度获得数组的最大元素。任何人都可以解释它背后的机制吗?

2 个答案:

答案 0 :(得分:3)

算法背后的机制基于我只能称之为肮脏的技巧。也就是说,我们允许所有处理器同时写入相同的共享内存位置。如果它们都写入相同的值,则结果被认为是明确定义的。

这可用于实现并行AND和并行OR运算符。这是例如parallel-OR:

result := false
for i in 0 to N-1 parallel do
  if a[i] then
    result := a[i]

我们也允许同时阅读。

这是MAX算法:

N := a.length

for i in 0 to N-1 parallel do
    m[i] := true

for i in 0 to N-1 parallel do
  for j in 0 to N-1 parallel do
    if a[i] < a[j]               /* dirty trick: simultaneous read by many processors */
      then m[i] := false         /* dirty trick: many processors write to m[i] at once */

for i in 0 to N-1 parallel do
    if m[i]
        then max := a[i]         /* dirty trick: many processors write to max at once */

return max

允许这些技巧的抽象体系结构称为CRCW PRAM

答案 1 :(得分:0)

这是| V | ad的答案(已删除)的后续行动,

您使用另一个大小为n的数组(让我们称之为B), 现在,您使用n-1处理器将任何元素a[i], i=0,...,n-1与所有其他元素a[0],...,a[i-1],a[i+1],...,a[n-1]进行比较,找到j={1,...,n-1}的每个处理器a[0] > a[j]都将适用B[i]=B[i]+1,此外,它会检查是否B[i]=n-1,如果是,它会宣布该元素i是最大元素。