2016-06-30 6 views
0

Ich benutze foreach-Paket in R. Ich tun cl<-makeCluster(no_cores,outfile='log.txt') registerDoParallel(cl), um die Sockets zu öffnen, und ich verwende 10 Kerne, weil ich 10 unabhängige Berechnungen in meiner Schleife ausführen . Ich kann sehen, dass die Steckdosen geöffnet sind, bekomme ich von htop:makecluster in R öffnet parallele Buchsen aber nicht alle

32315 elise 20 0 205M 32404 3612 S 0,0 0,0 0: 00.18 ├─/usr/lib64/R/bin/exec/R --slave --no-restore -e parallel :::. slaveRSOCK() --arg MAST

32301 elise 20 0 1154M 964M 4168 R 100. 0,7 0: 08.16 us─/usr/lib64/R/bin/exec/R --slave --no-restore -e parallel :::. SlaveRSOCK() --arg MAST

32289 elise 20 0 2793M 2591M 4332 S 0.0 2.0 0: 36.99 us/usr/lib64/R/bin/exec/R --lave --no-restore -e parallel :::. slaveRSOCK() --arg MAST

...

für jede der 10 Buchsen. Mein Problem ist, dass während der Berechnung nur eine oder zwei der Kerne anstelle der 10 verwendet werden, auch wenn die 10 Berechnungen unabhängig sind. Mein R Code:

output=foreach (i=1:nb_sets, 
     .combine=list, 
     .multicombine=TRUE, 
     .export=c(...), 
     .packages = c("e1071","ROCR")) %dopar% {...} 

und nb_sets = 10. Was noch seltsamer ist, ist, dass dieser Code früher gut funktionierte (Berechnungen auf den 10 Kernen wurden ziemlich schnell ausgeführt), also denke ich, dass es auf der Serverseite ein Problem geben könnte, aber ich habe keine Ahnung, was es sein könnte.

Hat jemand eine Idee von was könnte das Problem verursachen und wie es zu beheben?

Vielen Dank im Voraus!

Antwort

0

So, nachdem dieses Problem mehrmals Treffen Ich glaube, ich habe eine Antwort:

  1. Der Grund, warum gehen parallel langsam war, da, glaube ich, wurde der Speicher (wegen der unterschiedlichen Jobs überlastet zu werden, dass waren zur gleichen Zeit). Tatsächlich hat rparallel keinen sicheren Modus, um gc() auszulösen, wenn der Speicher überlastet ist.

  2. Allerdings konnte ich bei htop nicht sehen, wie der Speicher überlastet wurde (was seltsam ist).

  3. Der Server hat möglicherweise weniger Arbeitsspeicher als zuvor.

Lösung: ich die Daten geteilt.