2012-04-04 4 views
2

Je me demande si cela pourrait être pire de paralléliser la génération de nombres aléatoires. J'utilise Qt et QtConcurrent ici. Vaut-il la peine d'utiliser la parallélisation au lieu de générer N nombre d'affilées? Quel pourrait être le nombre critique de nombres générés? Mon code est ici, non parallélisé:Génération de nombres aléatoires et parallélisation C++/Qt

double** sampled = Matrix::allocMatrice(n,m_ndim,true); 

Random* generator_ = new Random(); 
generator_->newSeed(); 

double* temp_; 

for(int k=0;k<n;k++) 
{ 
    for(int j=0;j<m_ndim;j++) 
    { 
     sampled[k][j] = generator_->run(lower[j],upper[j]); 
    } 
} 

whre au hasard est une maison fait générateur aléatoire suivant la méthode de génération Marsaglia.

Merci et salutations.

Répondre

3

Si vous voulez une vraie génération de nombres aléatoires parallèles, vous n'avez presque pas de chance. Je suis conscient de l'absence de véritable algorithme multithread pour générer plusieurs nombres aléatoires en utilisant différents threads sous le capot de manière efficace et déterministe. Ce que j'ai fait avant et je vous suggère de faire maintenant, est mis en place N générateurs différents (avec N graines différentes, évidemment), et étaler la génération sur N thread manuellement. Le résultat sera reproductible et hautement multithread.

Questions connexes