J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse

TL;DR

Calcul numérique qui a pris 3 minutes en Python ・ Le remplacement du processus d'écriture de fichier texte d'environ 8 millions de lignes par Rust l'a rendu environ 5 fois plus rapide

introduction

https://github.com/MIERUNE/japan-mesh-tool

Ce qui précède est un module Python qui génère un maillage régional japonais au format .geojsonl, qui a également été introduit dans cet article. C'est un calcul purement numérique qui ne peut être écrit qu'avec le module standard, mais par exemple, dans un maillage cubique, le nombre de polygones est inférieur à 8 millions, et comme cela sera décrit plus loin, le temps requis est d'environ 3 minutes.

J'ai également essayé d'étudier Rust pour voir à quel point ce serait plus rapide si je remplaçais ce processus Python par Rust. À propos, le code Rust est également inclus dans le référentiel ci-dessus.

Référence: pensez à accélérer sur Python

L'ajustement de l'algorithme n'a pas entraîné une amélioration spectaculaire de la vitesse. Python lui-même est un langage d'interprétation et vous ne devriez pas demander de vitesse. De plus, si vous utilisez numpy, ce sera plus rapide avec l'aide du langage C, mais je l'ai laissé tomber parce que je voulais le garder indépendant des modules externes.

Comparaison de la vitesse Python vs Rust

conditions d'essai

Bats toi!

Python

time python main.py 3
initializing...
making meshes...
writing file...
done

real    2m46.227s
user    2m31.846s
sys     0m11.249s

166,227 secondes

Rust

time ./target/release/japan-mesh 3

real    0m35.955s
user    0m34.233s
sys     0m1.272s

35,955 secondes

résultat

35.955/166.227=21.63006%

Environ 5 fois plus vite!

À propos de Rust

Pourquoi Rust?

――Il semble être rapide ――Il semble faire chaud maintenant

J'ai commencé avec une compréhension si légère. Quand j'y pense maintenant, je pense que la chose la plus attrayante est la facilité de construire l'environnement. Vous pouvez entrer tous les compilateurs et gestionnaires de packages avec une seule commande.

La rouille n'est-elle pas difficile?

C'est un peu amer, mais c'est plus difficile que Python. Cependant, ce qui rend Rust difficile est le concept de système de propriété et de durée de vie, et avec juste des calculs numériques comme celui-ci, vous pouvez faire quelque chose qui fonctionne même si le compilateur se met en colère.

Impressions

«Je suis heureux que Rust, qui devrait être un code étrange, soit rapide. ――Bien sûr, la différence de vitesse de la partie calcul est évidente, mais il semble que l'écriture du fichier ne changera pas tellement --Rust se met en colère quand le compilateur écrit du bon et bizarre code «Je pense qu'il y a place pour l'optimisation dans le code.

Recommended Posts

J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Comparez la vitesse d'ajout et de carte Python
Calcul numérique avec Python
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
Visualisez la gamme d'insertions internes et externes avec python
J'ai vérifié les versions de Blender et Python
Démarrer le calcul numérique avec Python (avec Homebrew et pip)
J'ai comparé Java et Python!
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai remplacé le livre de recettes Windows PowerShell par un script python.
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
[Python] Fonctionnalisation de la formule de Heron et calcul de la surface maximale
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai évalué la stratégie de négociation du système boursier avec Python.
Je veux connaître la nature de Python et pip
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
L'histoire de Python et l'histoire de NaN
J'ai aimé le tweet avec python. ..
J'ai joué avec PyQt5 et Python3
Coexistence de Python2 et 3 avec CircleCI (1.0)
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Je veux sortir le début du mois prochain avec Python
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de la régression logistique
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de l'arbre de décision
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai comparé argparse standard python3 et python-fire
Vérifier l'existence du fichier avec python
Je ne connaissais pas les bases de Python
L'histoire du calcul numérique des équations différentielles avec TensorFlow 2.0
J'ai installé et utilisé Numba avec Python3.5
1. Statistiques apprises avec Python 1-3. Calcul de diverses statistiques (statistiques)
Le modèle de projet Python auquel je pense.
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai vectorisé l'accord de la chanson avec word2vec et je l'ai visualisé avec t-SNE
J'ai 0 ans d'expérience en programmation et je défie le traitement des données avec python
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
Préparer l'environnement d'exécution de Python3 avec Docker
Résumé des différences entre PHP et Python
Mathématiques Todai 2016 résolues avec Python