parallel r mit foreach und mclapply gleichzeitig

Ich implementiere ein Parallelverarbeitungssystem, das irgendwann in einem Cluster implementiert wird, aber ich habe Probleme, das Zusammenspiel der verschiedenen Methoden der Parallelverarbeitung zu untersuchen.

Ich muss eine for-Schleife verwenden, um einen großen Codeblock auszuführen, der mehrere große Listen von Matrizenoperationen enthält. Um dies zu beschleunigen, möchte ich die for-Schleife mit foreach () und die Listenoperationen mit mclapply parallelisieren.

Beispiel Pseudocode:

cl<-makeCluster(2)
registerDoParallel(cl)

outputs <- foreach(k = 1:2, .packages = "various packages") {

    l_output1 <- mclapply(l_input1, function, mc.cores = 2)
    l_output2 <- mclapply(l_input2, function, mc.cores = 2)
    return = mapply(cbind, l_output1, l_output2, SIMPLIFY=FALSE)
}

Dies scheint zu funktionieren. Meine Fragen sind:

1) Ist es ein vernünftiger Ansatz? Sie scheinen bei meinen kleinen Tests zusammenzuarbeiten, aber es fühlt sich ein bisschen klobig an.

2) Wie viele Kerne / Prozessoren werden zu einem bestimmten Zeitpunkt verwendet? Wenn ich es auf einen Cluster hochskaliere, muss ich verstehen, wie viel ich dafür tun kann (die foreach-Schleife wird nur siebenmal wiederholt, aber die mclapply-Listen enthalten bis zu 70 oder so große Matrizen). Es scheint 6 "Kerne" wie geschrieben zu erzeugen (vermutlich 2 für die foreach und 2 für jede mclapply.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage