2011-03-05 4 views
1

De this paper: Évitez inutilement des algorithmes sérialisation: algorithmes tels que les générateurs de nombres aléatoires qui doivent passer une graine au prochain générateur appel serialize l'algorithme inutilement si le nombre de fois que le générateur sera appelé à l'intérieur un thread ne peut pas être prédit avec précision. Ces algorithmes doivent être remplacés par des versions plus distribuées. Q: Quelqu'un peut-il expliquer "sérialiser l'algorithme inutilement si le nombre de fois que le générateur sera appelé dans un thread ne peut pas être prédit avec précision." En ce qui concerne le nombre aléatoire génération, nous devons passer une graine. Ainsi, comment peut-on éviter la sérialisation?pratiques de programmation automatique amicale de parallélisation

Répondre

1

Si vous avez un RNG qui dépend de sa valeur précédente (plus) et vous écrivez comme ceci:

r = Random.new(); 
for(int i=0; i<100*usersInput; i++) 
    r.rand(); 
} 

Il ne peut pas être automatiquement parallélisé même par un compilateur intelligent. Cependant, si vous écrivez comme ceci:

for(int i=0; i<usersInput; i++) { 
    r = Random.new(); 
    [for(int j=0; j<100; j++) { 
     r.rand(); 
    }] fork 
} 

Un très intelligent compilateur peut faire fonctionner le programme usersInput-nombre-de-threads, chacun ne doit exécuter 100 itérations au lieu de usersInput * 100.

Questions connexes