J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python

J'ai comparé la vitesse de Hash en utilisant Topaz, une implémentation de Ruby qui serait plus rapide avec RPython.

Il a été souligné que Ruby's Hash est plus lent que les autres langues. On dit que plus la taille est grande, plus elle est lente que Perl ou Python. (J'ai oublié où était la comparaison avec Perl)

Donc, j'ai fait une comparaison avec une faible espérance que ce serait plus rapide si Topaz était utilisé.

Pour l'introduction de Topaz, je me suis référé à Jouer avec Topaz, un système de traitement Ruby écrit dans le journal de gestion wktk de RPython-Gnyara-kun.

Le code utilisé pour la comparaison peut être trouvé sur Github. Cette fois, j'ai coupé les coins ronds et je n'ai pas fait la moyenne. Comme valeur de référence.

L'environnement est MacOS X 10.8.2 Intel Core i5 2.5GHz 8GB RAM

python


$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin12.2.1]
$ python --version
Python 2.7.3
$ bin/topaz -v
topaz (ruby-1.9.3p125) [x86_64-darwin]

Vitesse de création de hachage séquentiel

L'unité est en secondes

size Ruby1.9.3(int) Ruby1.9.3(string) topaz(int) topaz(string) Python2.7.3(int) Python2.7.3(string)
5000000 4.617856 8.087801 2.649405 11.485846 0.702034 2.473861
10000000 10.74621 19.092902 8.377534 36.823358 1.361577 5.112283
15000000 17.081968 29.101156 18.608418 80.467088 2.262289 8.392108
20000000 24.308324 39.974923 29.239815 129.432628 2.712998 10.639115
25000000 31.778632 51.38185 49.467747 303.785251 4.048304 15.097062
30000000 39.180657 60.673959 67.91127 342.049215 4.510771 17.036763

Le graphique ressemble à ceci. Creating Hash(int)

Creating Hash(string)

Eh bien, Topaz n'est pas plus rapide que ce à quoi je m'attendais. .. ..

Vitesse de recherche

L'unité est en secondes

size Ruby1.9.3(int) Ruby1.9.3(string) topaz(int) topaz(string) Python2.7.3(int) Python2.7.3(string)
5000000 0.600543 0.908508 0.442561 0.678826 0.164233 0.456206
10000000 0.631404 1.027941 0.49407 0.738537 0.165629 0.457019
15000000 0.665743 0.913473 0.585652 0.883217 0.157661 0.462758
20000000 0.72521 1.288778 0.599958 0.93315 0.19554 0.452863
25000000 0.561795 0.877556 0.780173 1.232231 0.163047 0.478319
30000000 0.657025 1.296413 0.783736 1.353858 0.160251 0.456952

Cliquez ici pour le graphique Lookup Hash(int)

Lookup Hash(string)

Ce que j'ai pensé faire

J'attends avec impatience Topaz car il sera peut-être plus rapide à l'avenir, mais pour le moment

Il existe également divers points stricts tels que. J'attends avec impatience le développement futur.

Recommended Posts

J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
J'ai comparé la vitesse des expressions régulières en Ruby, Python et Perl (version 2013)
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 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
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Spécification de la plage des tableaux ruby et python
Comparez la vitesse d'ajout et de carte Python
Visualisez la gamme d'insertions internes et externes avec python
J'ai comparé Java et Python!
J'ai vérifié les versions de Blender et Python
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
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.
Résumé de la prise en charge des opérations de hachage (dictionnaire) pour Ruby et 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
Scraping avec Node, Ruby et Python
J'ai aimé le tweet avec python. ..
J'ai personnellement comparé Java et Ruby
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
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
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
J'ai installé et utilisé Numba avec Python3.5
Le modèle de projet Python auquel je pense.
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
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é des centaines de millions de SQLite avec python