Comparaison de vitesse entre CPython et PyPy

Comparaison de la vitesse de traitement pour ajouter des éléments à la liste

supposition

À titre de comparaison de la vitesse de traitement, nous avons comparé le temps d'exécution de CPython, qui est l'implémentation officielle de Python, et PyPy, qui est l'implémentation du compilateur JIT par Python de Python.

Pour les trois fonctions suivantes utilisées dans la Notation d'inclusion de liste Python, Comment mesurer le temps d'exécution avec Python Partie 1 Le décorateur défini dans (: //qiita.com/intermezzo-fr/items/9ac2916a9155d5317ebc) a été utilisé.

Fonction à évaluer

# 1. testfunc1:Préparez une liste vide et ajoutez
@time
def testfunc1(rangelist):
    templist = []
    for temp in rangelist:
        templist.append(temp)

# 2. testfunc2: 1+Objectify append
@time
def testfunc2(rangelist):
    templist = []
    append = templist.append
    for temp in rangelist:
        append(temp)

# 3. testfunc3:Notation d'inclusion de liste
@time
def testfunc3(rangelist):
    templist = [temp for temp in rangelist]

Décorateur pour la mesure du temps

def time(func):
    import functools
    import datetime
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = datetime.datetime.today()
        result = func(*args, **kwargs)
        end = datetime.datetime.today()
        return end - start
    return wrapper

Les versions de CPython et PyPy sont les suivantes.

CPython

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

PyPy

Python 2.7.3 (87aa9de10f9c, Nov 24 2013, 17:46:53)
[PyPy 2.2.1 with MSC :.1500 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information
And now for something completely different: ``PyPy 1.3 released''

résultat

Pour chaque fonction, le processus d'ajout de 10 000 000 éléments à la liste a été effectué 10 fois et le temps d'exécution moyen a été obtenu.

CPython

>>> rangelist = range(1,10000000)
>>> print reduce(lambda x, y: x + y, [testfunc1(rangelist) for temp in range(0,10)])/10
0:00:00.998600
>>> print reduce(lambda x, y: x + y, [testfunc2(rangelist) for temp in range(0,10)])/10
0:00:00.723500
>>> print reduce(lambda x, y: x + y, [testfunc3(rangelist) for temp in range(0,10)])/10
0:00:00.399900

PyPy

>>> rangelist = range(1,10000000)
>>> print reduce(lambda x, y: x + y, [testfunc1(rangelist) for temp in range(0,10)])/10
0:00:00.290300
>>> print reduce(lambda x, y: x + y, [testfunc2(rangelist) for temp in range(0,10)])/10
0:00:00.275500
>>> print reduce(lambda x, y: x + y, [testfunc3(rangelist) for temp in range(0,10)])/10
0:00:00.046300

Pour une comparaison exacte, vous devrez sauter le premier et faire beaucoup de choses, mais nous ne faisons rien ici.

Conclusion

Chaque agrandissement (temps d'exécution CPython ÷ temps d'exécution PyPy) est le suivant. Plus le nombre est élevé, plus PyPy est rapide.

Dans PyPy, testfunc3, la version d'inclusion de liste, est particulièrement rapide. Je pensais étudier Lua lié au compilateur JIT, mais j'ai pensé que je devrais étudier PyPy dans ce cas.

Recommended Posts

Comparaison de vitesse entre CPython et PyPy
Comparaison de vitesse entre CPython et PyPy
Expérience de comparaison de la vitesse d'écriture de fichier entre python 2.7.9 et pypy 2.5.0
Comparaison de vitesse entre la variable de comptage incrémentielle et l'énumération
Différence entre MicroPython et CPython
Fonction pour ouvrir un fichier en Python3 (différence entre open et codecs.open et comparaison de vitesse)
Différence de vitesse entre wsgi, bouteille et flacon
Comparaison de vitesse de murmurhash3, md5 et sha1
Création d'un nouveau fichier [Comparaison entre Bash et PowerShell]
Entre paramétrique et non paramétrique
[Ruby vs Python] Comparaison de référence entre Rails et Flask
Capture d'image / comparaison de la vitesse OpenCV avec et sans GPU
CPython contre PyPy contre Pyston
[Ubuntu] [Python] Comparaison de la détection de visage entre dlib et OpenCV
[Python] Comment définir des noms de variables dynamiquement et comparer la vitesse
La comparaison et l'optimisation des vitesses BASIC et C et assembleur jouent avec IchigoJam
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
Comparaison des performances entre le calcul matriciel bidimensionnel et pour avec numpy
Différence entre processus et travail
Conversion entre unixtime et datetime
Comparaison de vitesse de Python, Java, C ++
Différence entre régression et classification
Coopération entre PTVS et Anaconda
Différence entre np.array et np.arange
Fonctions de tri et de comparaison Python 3
Coopération entre py2exe et les outils de configuration
Comparaison d'Apex et de Lamvery
Frontière entre C et Golang
Différence entre ps a et ps -a
Différence entre return et print-Python
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Histoire de la comparaison de vitesse d'une sorte de valeur numérique et de chaîne de caractères (inachevée))
Rechercher des chaînes de caractères dans les fichiers [Comparaison entre Bash et PowerShell]
Résumé des différences entre Python et PHP (tableau de comparaison des principaux éléments)