algorithm - 并行处理的计算顺序

标签 algorithm parallel-processing

给定一个未排序的数组,我在一篇文章中读到,可以使用 n 方处理器以 O(1) 复杂度获取数组的最大元素。有人能解释一下其背后的机制吗?

最佳答案

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

这可用于实现并行 AND 和并行 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 .

关于algorithm - 并行处理的计算顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209408/

相关文章:

c++ - 需要在数组中找到唯一的数字

java - 这里正确的架构设计是什么?

algorithm - 最宽路径问题有哪些应用?

performance - 在二维空间中查找矩形

c++ - 具有自定义类的共享内存 C++ 和 Win API 32

java - 如何在 Java 8 中并行读取文件的所有行

r - 如何并行化 while 循环?

java - 如何在java中找到具有相同键的多个记录中的最小值?

c# - 不可靠的并行循环在 400 次中有 4 次失败

php - 并行执行函数