Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen

Motivation

Der neu veröffentlichte Raspberry Pi 2 verfügt über eine 4-Kern-CPU. Es ist eine gute Idee, also möchte ich die verteilte Verarbeitung durchführen und alle 4 Kerne verbrauchen.

Was ich getan habe

Ich habe ein einfaches verteiltes Verarbeitungsprogramm mit dem Distributed Processing Framework Parallel Python ausgeführt und die Verarbeitungsgeschwindigkeiten des alten und des neuen Modells verglichen. Wir haben auch die Nutzungsrate jedes Kerns mit mpstat überprüft.

Fazit

Im Vergleich zum alten Modell ist es bei Verwendung von 4 Kernen ** ungefähr 8,5-mal ** und selbst mit 1 Kern allein ** ungefähr 2,4-mal ** schneller. Wenn 4 Kerne verbraucht waren, war das Ergebnis von mpstat 100% aller Kerne.

Impressionen

Ich bin zufrieden, weil ich 4 Kerne verbraucht habe. Es stellte sich auch heraus, dass auch nur ein Kern schnell genug ist. Es gibt einen Bericht, dass der Desktop-Bildschirm und der Chrome-Browser 2,2- bis 2,6-mal schneller gestartet werden oss & P = 2) Da die Geschwindigkeitsverbesserungsrate nahe ist, hat die Leistungsverbesserung für einen Kern möglicherweise erheblich dazu beigetragen.

Experimentelle Methode und Ergebnisse

Ausführung der verteilten Verarbeitung und Messung der Verarbeitungszeit

Gegebene Verarbeitung

Zählen Sie eine gerade Anzahl natürlicher Zahlen von 1 bis N. Die Zählmethode wird bestimmt, indem der Rest eins nach dem anderen durch 2 geteilt wird. Eine natürliche Zahl von 1 bis N wird in k unterteilt, und jeder wird von k Kernen für die verteilte Verarbeitung geteilt. Es ist ein Problem, das auf einen Schlag zu finden ist, wenn Sie N / 2 machen, aber ich entschuldige mich zuerst bei Razpai, dass ich einen langweiligen Job machen durfte.

Diesmal ist N = 10 Millionen.

Quellcode

pptest.py


# coding: UTF-8

import pp

#Bestimmen Sie, ob n ein Vielfaches von m ist
def ismultiples(n,m):
    return n % m == 0

#von n1 bis n2(Einschließlich n2)Finden Sie heraus, wie viele Vielfache von m zu den natürlichen Zahlen von gehören
def sum_multiples(n1,n2,m):
    cnt = 0
    for x in range(n1,n2+1):
        if ismultiples(x,m):
            cnt += 1
    return cnt

#IP-Adresse des zu verarbeitenden Raspeltorten
ppservers = ("192.168.1.241","192.168.1.241","192.168.1.241","192.168.1.241",) #Verwenden Sie 4 Kerne
# ppservers = ("192.168.1.241",) #1 Kern verwendet

#Maximalwert der natürlichen Zahl
N = 10000000
#Das Vielfache, das Sie zählen möchten
M = 2
#Anzahl der Knoten
num_node = len(ppservers)

#Registrieren Sie den Verbindungszielknoten und generieren Sie ein Serverobjekt
job_server = pp.Server(0, ppservers)
#Aufgabengenerierung
jobs = []
for i in range(num_node):
    #Finden Sie den Bereich der natürlichen Zahlen, die vom i-ten Knoten verarbeitet werden
    indSt = N/num_node*i+1
    if (i==num_node-1):
        indEnd = N
    else:
        indEnd = indSt+N/num_node-1
    #Wirf eine Aufgabe auf einen Knoten
    jobs.append(job_server.submit(sum_multiples, (indSt, indEnd, M), (ismultiples,), ("math",)))
    print("task%d args:(%d,%d,%d)" % (i,indSt,indEnd,M))  

#Sammlungsergebnisse sammeln. sum_mutiples()Bild, um den Rückgabewert von zu erhalten.
#Wenn die Verarbeitung auf dem Knoten noch nicht abgeschlossen ist, wird die Verarbeitung hier blockiert, bis sie abgeschlossen ist..
result = 0;
for i in range(num_node):
    result += jobs[i]()

#Ergebnisse anzeigen
print "%Von natürlichen Zahlen kleiner oder gleich d%Anzahl der Vielfachen von d= %d" % (N, M, result)
job_server.print_stats()

Punkte auf dem Quellcode

In ppservers werden vier gleiche IP-Adressen beschrieben. Auf diese Weise können Sie die in 4 Teile unterteilte Aufgabe in dieselbe Raspeltorte werfen und die 4 Kerne vollständig nutzen. Wenn nur ein Kern verwendet wird, beschreiben Sie nur einen. Wenn Sie die Verarbeitung mit mehreren Rasppies verteilen möchten, können Sie hier die IP-Adresse jedes Raspeye festlegen.

Paralleles Python installieren

  1. Laden Sie pp-1.6.4.tar.gz von [Parallel Python Site] herunter und entpacken Sie es (http://www.parallelpython.com/).
  2. Wechseln Sie in den entpackten Ordner
  3. Installation > python setup.py

Skript ausführen

  1. Starten Sie den Server, der die Verarbeitung akzeptiert > ppserver.py &
  2. Führen Sie das geschriebene Skript pptest.py aus > python pptest.py

Ausführungsergebnis

Ausführungsumgebung Verarbeitungszeit[sec] Geschwindigkeitsverbesserungsrate * 1
Altes Modell(Raspberry Pi B+) 48.7 -
Neues Modell(Raspberry Pi 2 B)1 Kern verwendet 20.1 2.4
Neues Modell(Raspberry Pi 2 B)Verwenden Sie 4 Kerne 5.7 8.5

Die Ausgabe des Skripts ist wie folgt

Altes Modell (Raspberry Pi B +)

task0 args:(1,10000000,2) Eine Zahl, die ein Vielfaches von 2 von natürlichen Zahlen ist, die kleiner als 10000000 = 5000000 sind Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 1 | 100.00 | 48.4202 | 48.420249 | 192.168.1.241:60000 Time elapsed since server creation 48.7006518841 0 active tasks, 0 cores

Neues Modell (Raspberry Pi 2 B) verwendet nur 1 Kern

task0 args:(1,10000000,2) Eine Zahl, die ein Vielfaches von 2 von natürlichen Zahlen ist, die kleiner als 10000000 = 5000000 sind Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 1 | 100.00 | 19.6110 | 19.610974 | 192.168.1.241:60000 Time elapsed since server creation 20.0955970287 0 active tasks, 0 cores

Neues Modell (Raspberry Pi 2 B) mit 4 Kernen

task0 args:(1,2500000,2) task1 args:(2500001,5000000,2) task2 args:(5000001,7500000,2) task3 args:(7500001,10000000,2) Eine Zahl, die ein Vielfaches von 2 von natürlichen Zahlen ist, die kleiner als 10000000 = 5000000 sind Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 4 | 100.00 | 20.6152 | 5.153800 | 192.168.1.241:60000 Time elapsed since server creation 5.68198180199 0 active tasks, 0 cores

Lassen Sie uns die CPU-Auslastung jedes Kerns mit mpstat sehen

Installation

sudo apt-get install sysstat

Lauf

Gehen Sie wie folgt vor, wenn Sie 10 Mal im Abstand von 1 Sekunde messen mpstat -P ALL 1 10

Ich habe versucht, das obige Skript auszuführen, während mpstat in einem anderen Terminal ausgeführt wurde.

Ausführungsergebnis

Altes Modell (Raspberry Pi B +)

Da es nur einen Kern gibt, ist die CPU-Nummer nur 0. % usr ist 100.

22:30:56 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 22:30:57 all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:30:57 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Neues Modell (Raspberry Pi 2 B) verwendet nur 1 Kern

Da es 4 Kerne gibt, sind die CPU-Nummern 0 bis 3. Nur CPU3 ist 100% und die anderen sind 0%. Alles ist 1/4, was 25,0% entspricht.

22:35:54 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 22:35:55 all 25.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 75.00 22:35:55 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 22:35:55 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 22:35:55 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 22:35:55 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Neues Modell (Raspberry Pi 2 B) mit 4 Kernen

Alle 4 Kerne sind 100%. Zufrieden.

22:22:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 22:22:12 all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:22:12 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:22:12 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:22:12 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:22:12 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Recommended Posts

Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Verwendung von Raspeye Relay Module Python
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten (Hello World)
Verwendung von Raspeye Pie Camera Python
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Der einfachste Weg, OpenCV mit Python zu verwenden
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Messen Sie die CPU-Temperatur von Raspeye mit Python
Vom Einrichten des Raspberry Pi bis zur Installation der Python-Umgebung
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
[Python] Ich möchte die Option -h mit argparse verwenden
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, die verstümmelten Zeichen im angehängten Dateinamen mit Python zu entschlüsseln
Verbinden Sie Raspberry Pi mit "Python" mit der Alibaba Cloud IoT Platform
Es war großartig, die Python-Datei in Raspberry Pi mit der Remote-Funktion von Atom zu bearbeiten
Python: So verwenden Sie Async mit
Versuchen Sie, Facebook mit Python zu betreiben
Probieren Sie L Chika mit Himbeerpi
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
Verwenden Sie boto3, um zu S3 zu gelangen
[Raspberry Pi] Python wurde standardmäßig in Python3 geändert
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Version September 2020] Erläutert das Verfahren zur Verwendung der Google Mail-API mit Python
Ich möchte Python GUI ausführen, wenn Raspberry Pi startet
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Versuchen Sie, den kürzesten Weg mit Python + NetworkX + Social Data zu lösen
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Versuchen Sie, sich mit Python bei qiita anzumelden
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Verwenden Sie Rasppie, um das Problem einer unzureichenden mobilen Wi-Fi-Verbindung zu lösen
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Python] Runden Sie nur mit dem Operator ab
[Einführung in Python] Verwenden wir foreach mit Python
Versuchen Sie, mit Raspberry Pi nach Wakasagi zu fischen
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Versuchen Sie die Objekterkennung mit Raspberry Pi 4 + Coral
Python Amateur versucht die Liste zusammenzufassen ①
Verwenden Sie einen PIR-Bewegungssensor mit Himbeer-Pi
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks
Der Weg zum Kompilieren zu Python 3 mit Thrift
Arbeiten mit GPS in Python für Raspberry Pi 3
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus (Python-Code) zu lösen.
Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE
Versuchen Sie, ein Objekt mit RaspberryPi zu erkennen ~ Teil 1: Vergleich der Erkennungsgeschwindigkeit ~
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten, wenn es dunkel wird!
Verwenden Sie den analogen Temperatursensor Raspberry Pi Python to TMP36 und den AD-Wandler MCP3008
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen