J'utilise sfApply dans R paquet de chutes de neige pour le calcul parallèle. Il y a 32000 tests à exécuter. Le code fonctionne correctement au démarrage de l'ordinateur, il créera 46 processus Rscript.exe et chaque Rscript.exe aura une utilisation de 2%. L'utilisation globale du processeur est d'environ 100% et les résultats sont continuellement écrit sur le disque. L'informatique prendra habituellement des dizaines d'heures. La chose étrange est que le processus Rscript.exe devient progressivement inactif (cpu usage = 0) un par un, et le cpu correspondant est également inactif. Après deux jours, il n'y a que la moitié du nombre de Rscript.exe qui sont actifs en regardant l'utilisation du processeur, et l'utilisation globale du processeur réduit à 50%. Cependant, le travail est loin de finir. Au fil du temps, de plus en plus de Rscript.exe deviennent inactifs, ce qui rend le travail très long. Je me demande ce qui rend le processus et les noyaux de cpu inactifs?R chute de neige parallèle, Rscript.exe devient inactif un par un avec le temps
Mon ordinateur possède 46 cœurs logiques. J'utilise R-3.4.0 de Rstudio dans Windows 7 64 bits. La variable 'test' suivante est une matrice 32000 * 2. myfunction est la résolution de plusieurs équations différentielles.
Merci.
library(snowfall)
sfInit(parallel=TRUE, cpus=46)
Sys.time()
sfLibrary(deSolve)
sfExport("myfunction","test")
res<-sfApply(test,1,function(x){myfunction(x[1],x[2])})
sfStop()
Sys.time()
Qu'en est-il de l'utilisation de la mémoire? Est-ce que suffisamment de RAM est disponible? Il n'y a pas grand-chose à faire ici, mais vous pourriez essayer d'exécuter seulement quelques tâches à la fois et voir si elles passent. Commencez à augmenter le nombre de tâches jusqu'à ce que vous atteigniez le goulot d'étranglement. –
Merci. La RAM est disponible, seulement 10G (64G au total) est utilisé. Je pourrais essayer cela, mais le problème est que les processus sont progressivement inactifs. Les tâches se poursuivent, avec de moins en moins de cpus. C'est comme si quelque chose pendant le calcul faisait dormir les noyaux un par un. – yan
Désolé, je n'ai plus d'idées.Peut-être pourriez-vous utiliser un autre outil parallèle, comme 'parallel' ou' foreach'? –