Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python

Motivation

Le Raspberry Pi 2 nouvellement publié dispose d'un processeur à 4 cœurs. C'est une bonne idée, donc j'aimerais faire un traitement distribué et utiliser jusqu'à 4 cœurs au maximum.

Ce que j'ai fait

J'ai exécuté un programme de traitement distribué simple en utilisant le cadre de traitement distribué Parallel Python et j'ai comparé les vitesses de traitement de l'ancien modèle et du nouveau modèle. Nous avons également vérifié le taux d'utilisation de chaque cœur avec mpstat.

Conclusion

Par rapport à l'ancien modèle, lorsque 4 cœurs sont épuisés, il est ** environ 8,5 fois **, et même avec 1 seul cœur, il est ** environ 2,4 fois ** plus rapide. Lorsque 4 cœurs étaient épuisés, le résultat de mpstat était de 100% de tous les cœurs.

Impressions

Je suis satisfait car j'ai épuisé 4 cœurs. En outre, il s'est avéré que même un noyau est assez rapide. [Selon un rapport, l'écran du bureau et le navigateur Chrome démarrent 2,2 à 2,6 fois plus rapidement](http://itpro.nikkeibp.co.jp/atcl/column/14/565123/020600005/?ST= oss & P = 2) Puisque le taux d'amélioration de la vitesse est proche, l'amélioration des performances d'un cœur peut avoir contribué de manière significative.

Méthode expérimentale et résultats

Exécution du traitement distribué et mesure du temps de traitement

Traitement donné

Comptez un nombre pair d'entiers naturels de 1 à N. La méthode de comptage est déterminée en trouvant le reste divisé par 2 un par un. Un nombre naturel de 1 à N est divisé en k, et k cœurs sont attribués à chacun pour effectuer un traitement distribué. C'est un problème qui peut être trouvé en une seule fois si vous faites N / 2, mais je m'excuse d'abord auprès de Razpai de m'avoir laissé faire un travail ennuyeux.

Cette fois, N = 10 millions.

Code source

pptest.py


# coding: UTF-8

import pp

#Déterminer si n est un multiple de m
def ismultiples(n,m):
    return n % m == 0

#de n1 à n2(Y compris n2)Découvrez combien de multiples de m se trouvent parmi les nombres naturels de
def sum_multiples(n1,n2,m):
    cnt = 0
    for x in range(n1,n2+1):
        if ismultiples(x,m):
            cnt += 1
    return cnt

#Adresse IP de la tarte à la râpe à traiter
ppservers = ("192.168.1.241","192.168.1.241","192.168.1.241","192.168.1.241",) #Utilisez 4 cœurs
# ppservers = ("192.168.1.241",) #1 noyau utilisé

#Valeur maximale du nombre naturel
N = 10000000
#Le multiple que vous voulez compter
M = 2
#Nombre de nœuds
num_node = len(ppservers)

#Enregistrer le nœud de destination de la connexion et générer un objet serveur
job_server = pp.Server(0, ppservers)
#Génération de tâches
jobs = []
for i in range(num_node):
    #Trouver la plage de nombres naturels manipulés par le i-ème nœud
    indSt = N/num_node*i+1
    if (i==num_node-1):
        indEnd = N
    else:
        indEnd = indSt+N/num_node-1
    #Lancer une tâche sur un nœud
    jobs.append(job_server.submit(sum_multiples, (indSt, indEnd, M), (ismultiples,), ("math",)))
    print("task%d args:(%d,%d,%d)" % (i,indSt,indEnd,M))  

#Recueillir les résultats de l'exécution. sum_mutiples()Image pour obtenir la valeur de retour de.
#Si le traitement sur le nœud n'est pas encore terminé, le traitement ici sera bloqué jusqu'à ce qu'il soit terminé..
result = 0;
for i in range(num_node):
    result += jobs[i]()

#Voir les résultats
print "%D'entiers naturels inférieurs ou égaux à d%Nombre de multiples de d= %d" % (N, M, result)
job_server.print_stats()

Points sur le code source

Quatre mêmes adresses IP sont décrites dans ppservers. En faisant cela, la tâche divisée en 4 sera jetée à la même tarte à la râpe, et 4 noyaux pourront être pleinement utilisés. Si un seul noyau est utilisé, décrivez-en un seul. Si vous souhaitez distribuer le traitement avec plusieurs Rasppies, vous pouvez définir l'adresse IP de chaque Raspeye ici.

Installer Parallel Python

  1. Téléchargez et décompressez pp-1.6.4.tar.gz depuis Site Python parallèle
  2. Accédez au dossier décompressé
  3. Installation > python setup.py

Script de lancement

  1. Démarrez le serveur qui accepte le traitement > ppserver.py &
  2. Exécutez le script écrit pptest.py > python pptest.py

Résultat d'exécution

Environnement d'exécution temps de traitement[sec] Taux d'amélioration de la vitesse * 1
Ancien modèle(Raspberry Pi B+) 48.7 -
Nouveau modèle(Raspberry Pi 2 B)1 noyau utilisé 20.1 2.4
Nouveau modèle(Raspberry Pi 2 B)Utilisez 4 cœurs 5.7 8.5

La sortie du script est la suivante

Ancien modèle (Raspberry Pi B +)

task0 args:(1,10000000,2) Un nombre qui est un multiple de 2 parmi les nombres naturels inférieurs à 10000000 = 5000000 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

Le nouveau modèle (Raspberry Pi 2 B) n'utilise qu'un seul noyau

task0 args:(1,10000000,2) Un nombre qui est un multiple de 2 parmi les nombres naturels inférieurs à 10000000 = 5000000 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

Nouveau modèle (Raspberry Pi 2 B) avec 4 cœurs

task0 args:(1,2500000,2) task1 args:(2500001,5000000,2) task2 args:(5000001,7500000,2) task3 args:(7500001,10000000,2) Un nombre qui est un multiple de 2 parmi les nombres naturels inférieurs à 10000000 = 5000000 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

Voyons l'utilisation du processeur de chaque cœur avec mpstat

Installation

sudo apt-get install sysstat

Courir

Lorsque vous mesurez 10 fois à intervalles de 1 seconde, procédez comme suit mpstat -P ALL 1 10

J'ai essayé d'exécuter le script ci-dessus tout en exécutant mpstat dans un autre terminal.

Résultat d'exécution

Ancien modèle (Raspberry Pi B +)

Puisqu'il n'y a qu'un seul cœur, le numéro de CPU n'est que de 0. % usr vaut 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

Le nouveau modèle (Raspberry Pi 2 B) n'utilise qu'un seul noyau

Puisqu'il y a 4 cœurs, les numéros de CPU vont de 0 à 3. Seul CPU3 est à 100% et les autres à 0%. Tout est 1/4, soit 25,0%.

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

Nouveau modèle (Raspberry Pi 2 B) avec 4 cœurs

Les 4 cœurs sont à 100%. Satisfait.

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

Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
Visualisons la pièce avec tarte aux râpes, partie 1
Comment utiliser Raspeye Relay Module Python
Utilisez vl53l0x avec RaspberryPi (python)
Utilisez python sur Raspberry Pi 3 pour éclairer la LED (Hello World)
Comment utiliser Raspeye Pie Camera Python
Essayez de résoudre le diagramme homme-machine avec Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Le moyen le plus simple d'utiliser OpenCV avec python
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Connectez-vous à MySQL avec Python sur Raspberry Pi
Mesurer la température du processeur de Raspeye avec Python
De la configuration du Raspberry Pi à l'installation de l'environnement Python
Essayez de résoudre le livre des défis de programmation avec python3
Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
[Python] Je souhaite utiliser l'option -h avec argparse
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Connectez Raspberry Pi à Alibaba Cloud IoT Platform avec «Python»
C'était génial d'éditer le fichier Python dans Raspberry Pi avec la fonction à distance d'Atom
Python: comment utiliser async avec
Essayez d'exploiter Facebook avec Python
Essayez L Chika avec raspberrypi
Essayez de déplacer 3 servos avec Raspeye
Utilisez boto3 pour accéder à S3
[Raspberry Pi] Changement par défaut de Python en Python3
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
[Version septembre 2020] Explique la procédure d'utilisation de l'API Gmail avec Python
Je veux exécuter l'interface graphique Python au démarrage de Raspberry Pi
[Python] Explique comment utiliser la fonction format avec un exemple
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
À propos de l'erreur que j'ai rencontrée en essayant d'utiliser Adafruit_DHT à partir de Python sur Raspberry Pi
Essayez de vous connecter à qiita avec Python
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Utilisez Rasppie pour résoudre le problème de connexion Wi-Fi mobile insuffisante
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Python] Arrondissez avec juste l'opérateur
[Introduction à Python] Utilisons foreach avec Python
Essayez de pêcher le Wakasagi avec Raspberry Pi
Utiliser le capteur Grove avec Raspberry Pi
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Python amateur tente de résumer la liste ①
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Connectez-vous à s3 avec AWS Lambda Python
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
La route de la compilation vers Python 3 avec Thrift
Travailler avec le GPS en Python pour Raspberry Pi 3
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (code Python)
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Essayez de détecter un objet avec RaspberryPi ~ Partie 1: Comparaison de la vitesse de détection ~
Utilisez python sur Raspberry Pi 3 pour éclairer la LED quand il fait noir!
Utilisez le capteur de température analogique Raspberry Pi Python vers TMP36 et le convertisseur MCP3008 AD
Essayez de résoudre le problème du fizzbuzz avec Keras