准确测试Pypy与CPython性能

问题描述:

我有这个定制的“校验和”功能:

NORMALIZER = 0x10000


def get_checksum(part1, part2, salt="trailing"):
    """Returns a checksum of two strings."""

    combined_string = part1 + part2 + " " + salt if part2 != "***" else part1
    ords = [ord(x) for x in combined_string]

    checksum = ords[0]  # initial value

    # TODO: document the logic behind the checksum calculations
    iterator = zip(ords[1:], ords)
    checksum += sum(x + 2 * y if counter % 2 else x * y
                    for counter, (x, y) in enumerate(iterator))
    checksum %= NORMALIZER

    return checksum

我想在Python3.6和PyPy上进行性能测试。我想看看这个功能是否会在PyPy上表现更好,但是我并不完全确定,最可靠和干净的方法是什么。

我试过的和问题:

目前,我正在使用timeit两者:

$ python3.6 -mtimeit -s "from test import get_checksum" "get_checksum('test1' * 100000, 'test2' * 100000)"
10 loops, best of 3: 329 msec per loop

$ pypy -mtimeit -s "from test import get_checksum" "get_checksum('test1' * 100000, 'test2' * 100000)"
10 loops, best of 3: 104 msec per loop

我的关注是,我不是绝对肯定,由于potential JIT warmup overhead,时间是PyPy工作的正确工具。

此外,PyPy本身在报告测试结果之前报告以下内容:

WARNING: timeit is a very unreliable tool. use perf or something else for real measurements
pypy -m pip install perf
pypy -m perf timeit -s 'from test import get_checksum' "get_checksum('test1' * 1000000, 'test2' * 1000000)"

在这些和其他Python实现中测试相同精确功能性能的最佳和最准确的方法是什么?

您可以使用–repeat参数增加重复次数,以提高计时精度。看到:

https://docs.python.org/2/library/timeit.html

http://stackoverflow.com/questions/42095793/accurately-testing-pypy-vs-cpython-performance

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:准确测试Pypy与CPython性能