Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen

TL;DR

Die numerische Berechnung, die in Python 3 Minuten dauerte ・ Durch das Ersetzen des Schreibvorgangs für Textdateien mit etwa 8 Millionen Zeilen durch Rust wurde der Vorgang etwa fünfmal schneller

Einführung

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

Das obige ist ein Python-Modul, das ein japanisches regionales Netz im .geojsonl-Format generiert, das auch in diesem Artikel eingeführt wurde. Es handelt sich um eine rein numerische Berechnung, die nur mit dem Standardmodul geschrieben werden kann. In einem kubischen Netz beträgt die Anzahl der Polygone jedoch weniger als 8 Millionen, und wie später beschrieben wird, beträgt die erforderliche Zeit etwa 3 Minuten.

Ich habe auch versucht, Rust zu studieren, um zu sehen, wie viel schneller es wäre, wenn ich diesen Python-Prozess durch Rust ersetzen würde. Der Rust-Code ist übrigens auch im obigen Repository enthalten.

Referenz: Erwägen Sie, Python zu beschleunigen

Das Optimieren des Algorithmus führte nicht zu einer dramatischen Geschwindigkeitsverbesserung. Python selbst ist eine Interpretersprache und Sie sollten nicht nach Geschwindigkeit fragen. Wenn Sie numpy verwenden, wird es mit Hilfe der C-Sprache schneller, aber ich habe es gelöscht, weil ich es unabhängig von externen Modulen halten wollte.

Python vs Rust Geschwindigkeitsvergleich

Test-Bedingungen

Kampf!

Python

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

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

166,227 Sekunden

Rust

time ./target/release/japan-mesh 3

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

35,955 Sekunden

Ergebnis

35.955/166.227=21.63006%

Etwa 5 mal schneller!

Über Rust

Warum Rost?

――Es scheint schnell zu sein »Es scheint jetzt heiß zu sein

Ich begann mit einem so leichten Verständnis. Wenn ich jetzt darüber nachdenke, denke ich, dass das Attraktivste die Leichtigkeit ist, die Umwelt aufzubauen. Sie können alle Compiler und Paketmanager mit einem einzigen Befehl eingeben.

Ist Rust nicht schwierig?

Es ist ein bisschen bitter, aber es ist schwieriger als Python. Was Rust jedoch schwierig macht, ist das Konzept des Besitzersystems und der Lebensdauer. Mit nur numerischen Berechnungen wie dieser können Sie etwas erstellen, das auch dann funktioniert, wenn der Compiler wütend wird.

Impressionen

»Ich bin froh, dass Rust, der einen seltsamen Code haben sollte, schnell ist. ―― Natürlich ist der Geschwindigkeitsunterschied des Berechnungsteils offensichtlich, aber es scheint, dass sich das Schreiben der Datei nicht so sehr ändert --Rust wird wütend, wenn der Compiler guten und seltsamen Code schreibt ――Ich denke, der Code bietet Raum für Optimierungen.

Recommended Posts

Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Numerische Berechnung mit Python
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Ich habe mir die Versionen von Blender und Python angesehen
Starten Sie die numerische Berechnung mit Python (mit Homebrew und Pip).
Ich habe Java und Python verglichen!
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe das Windows PowerShell-Kochbuch durch ein Python-Skript ersetzt.
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
[Python] Herons Formelfunktionalisierung und Berechnung der maximalen Fläche
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Ich möchte die Natur von Python und Pip kennenlernen
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Die Geschichte von Python und die Geschichte von NaN
Ich mochte den Tweet mit Python. ..
Ich habe mit PyQt5 und Python3 gespielt
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
[Python] Ich habe die Theorie und Implementierung des Entscheidungsbaums gründlich erklärt
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe Python3 Standard Argparse und Python-Fire verglichen
Überprüfen Sie die Existenz der Datei mit Python
Ich kannte die Grundlagen von Python nicht
Die Geschichte der numerischen Berechnung von Differentialgleichungen mit TensorFlow 2.0
Ich habe Numba mit Python3.5 installiert und verwendet
1. Mit Python 1-3 gelernte Statistiken. Berechnung verschiedener Statistiken (Statistiken)
Die Python-Projektvorlage, an die ich denke.
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe den Akkord des Songs mit word2vec vektorisiert und mit t-SNE visualisiert
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
Zusammenfassung der Unterschiede zwischen PHP und Python
2016 Todai Mathematik mit Python gelöst