并行随机数 - 为不同数量的任务生成SAME结果

时间:2013-06-29 12:51:03

标签: java multithreading mpi openmp

我有许多需要大量随机数的SIMD样式并行应用程序。这些数组是“分布式数组”,在多个任务和节点之间共享,具有重叠以支持空间运算符。我需要的是一个随机数生成器,它将在多个线程上提供与在一个线程上相同的结果。我可以使用一个简单的版本,其中所有任务都查询主任务,但我们会失去可伸缩性。

总而言之,我想要一个可扩展的并行随机数生成器,它可以使用主任务提供相同的结果来提供所有数字。

提前感谢任何建议!

P.S。这是一个简单的序列化版本,我想用可扩展的实现替换它:

import java.util.Random;

public class ParallelRandom {
  int size; // Number of tasks in the parallel context
  int rank; // Rank of this task in the parallel context
  Random r; // Random number generator used by master task

  public ParallelRandom( int numTasks, int taskRank, long seed ) {
    // Store size and rank
    size = numTasks;
    rank = taskRank;
    // initialize Random
    r = new Random(seed);
  }

  // Public method that must be called synchronously by all tasks
  public void nextRandomVector( double[] vector ) {
    int len = vector.length;
    // Loop over all tasks in the context
    for (int itask=0; itask<size; itask++) {
      // Set the return values for this task, otherwise just advance the random number
      if (rank == itask)
         for (int i=0; i<len; i++)
            vector[i] = r.nextGaussian();
      else
         for (int i=0; i<len; i++)
            r.nextGaussian();
    }
  }
}

0 个答案:

没有答案