C++/c++11の環境で疑似乱数生成のメルセンヌ・ツイスターを並列化して動作させる方法をご教示下さい。
boost/random.hppとopenmpの組合せで実装出来るのかとも考えいろいろ試したのですが、
簡単には並列化できないようです。

#include <boost/random.hpp>
#include <omp.h>

using namespace std;
using namespace boost;
mt19937 gen;
uniform_real<> uniform_dst(0,1);//min,max
variate_generator< mt19937,uniform_real<> > uniform(gen,uniform_dst);

void test1(){
  uniform.engine().seed(123);
  int NN=1600000;
  int i;
  double x;
#pragma omp parallel for private(i,x,gen)
  for(i=0;i<NN;++i){
    x=uniform();
    printf("%f in thread:%d\n",x,omp_get_thread_num());
  }
}
int main(){
    test1();
    return 0;
}

乱数生成器のmt19937をベースにしているのですが、openmpのループの中からこの乱数生成器を呼び出しても、乱数生成器自体は並列化されているわけではないようです。uniform()は個別のスレッドから呼び出されているようですが、乱数生成器の部分は共通して動作しており、並列化はされていないようです。この乱数生成器自体を並列化したいと考えています。

よろしくお願い致します。