大多数并行算法用于计算平方和?

时间:2014-08-19 14:33:41

标签: multithreading algorithm parallel-processing

说我需要计算一个大数组A [n]的平方和,其中n可以是数百万,我有N个线程可以使用。有人能指出我做一个很好的并行算法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个算法: -

1. divide numbers in n/N blocks 
2. Compute for one block squares in parallel in O(1)
3. addition can be done in O(log(N)) for 1 block using adding pair at time

时间复杂度: -  的 O(日志(N)*(N / N))

注意:这个时间复杂度完全是理论上的,你需要在并行操作结束后等待线程同步,这会增加延迟。

编辑: -

以下伪代码可能会为线程解释O(logN)并行算法: -

void add(i,N) {

  int k = 1;

  while(i+k<N && i%k==0 && (i/k)%2==0) {

      arr[i] = arr[i]+arr[i+k];
      synchronize();
      k = 2*k;
   }


}

注意: - 这是用于处理N大小块的ith索引的线程号i的代码,请注意该循环是 O(logN) as k每次迭代增加2倍, synchronize()函数用于等待其他线程完成迭代,如果它们不同步。尝试解决这个问题,你会得到一个想法,最后的补充答案将在arr[0]