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
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.
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.
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
35.955/166.227=21.63006%
Environ 5 fois plus vite!
――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.
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.
«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.