Kein Multithreading mit R unter Linux

1543
Hi I'm Frogatto

Ich mache eine statistische Analyse mit R unter dem Betriebssystem Ubuntu 15.10. Mein R-Skript dauert sehr lange. Ungefähr 2 - 3 Stunden.

Inzwischen habe ich meine CPU-Last geprüft. Mir ist gerade aufgefallen, dass alle CPUs fast leer sind. Wie Sie im Bild unten sehen können, liegt nur die CPU 8 bei 100%.

enter image description here

Warum lastet der Linux-Kernel nicht auf allen CPUs?

2
http://www.glennklockwood.com/data-intensive/r/parallel-options.html choroba vor 8 Jahren 0
klingt, als wäre Ihr R-Skript so geschrieben, dass es Single-Threading ist. Es ist wichtig, dass der Programmierer den Grad der Parallelität seiner Anwendung bestimmt und definiert, um die vielen Fallstricke der Parallelprogrammierung zu vermeiden, sodass kein Betriebssystem nur die Bits eines Prozesses auf einer beliebigen freien Verarbeitungseinheit ausführt. Das Programm muss so geschrieben werden, dass die Bits getrennt ausgeführt werden können. Frank Thomas vor 8 Jahren 1
http://stackoverflow.com/q/10835122/1856738 Run CMD vor 8 Jahren 0
@FrankThomas Scheint R-Skripte können nicht in Multithreading-Natur geschrieben werden. Gibt es eine Problemumgehung, um meine Analyse zu beschleunigen? Hi I'm Frogatto vor 8 Jahren 0
@ HiI'mfrogatto, du irrst dich. Der Link, den choroba bereits gepostet hat, zeigt, wie man R-Skripts mit mehreren Threads schreibt. ChrisInEdmonton vor 8 Jahren 0
@ ChrisInEdmonton Okay, ich checke aus. Hi I'm Frogatto vor 8 Jahren 0
@ HiI'mfrogatto, es sieht so aus, als hätten Sie eine Dokumentation zum Thema Multithread gefunden. Das größere und etwas komplexere Problem besteht darin, zu bestimmen, ob Ihr Algorithmus asynchron gemacht werden kann, wobei kleine Berechnungsabschnitte unabhängig voneinander auftreten, jedoch auf eine Weise, dass die Ergebnisse koordiniert werden können. Das ist kein einfaches Zeug und wir können Ihnen nicht wirklich helfen. Ich würde empfehlen, auf StackOverflow zu posten, wenn Sie weitere Fragen zur Implementierung eines parallelen Algorithmus für Ihre Anforderungen haben. Frank Thomas vor 8 Jahren 0
@FrankThomas Vielen Dank für Ihre Anleitung. Hi I'm Frogatto vor 8 Jahren 0

3 Antworten auf die Frage

4
ChrisInEdmonton

Linux verteilt die Arbeitslast auf alle CPUs. Dazu muss die Workload jedoch Multithreading sein. Es ist nicht möglich, eine Single-Thread-Workload auf mehrere CPUs zu verteilen. Tatsächlich ist es am effizientesten, eine Single-Thread-Aufgabe auf einer einzelnen CPU zu halten.

Das Problem hier ist, dass das fragliche R-Skript nicht als Multithreading geschrieben wurde.

0
tkg

Wenn Ihr Prozess zu mapReduce führt, können Sie das Skript in Teile aufteilen und jeden Teil auf einer anderen CPU ausführen.

-1
amit singh

Es ist nicht kernelderjenige, der über die Verwendung entscheidet CPU. Wenn Ihr Skript für Multithreads ausgelegt ist, werden nur andere Threads verwendet.