| PYTHONPERFORMANCEBENCHMARKSUITE(1) | Python Performance Benchmark Suite | PYTHONPERFORMANCEBENCHMARKSUITE(1) |
نام (NAME)
pythonperformancebenchmarksuite - مستندات مجموعه بنچمارک عملکرد پایتون
پروژهٔ pyperformance با این هدف طراحی شده است که مرجعی معتبر برای سنجش عملکرد (بنچمارک) تمامی پیادهسازیهای Python باشد. تمرکز اصلی آن بر بنچمارکهای دنیای واقعی بهجای بنچمارکهای ساختگی (synthetic) است و در صورت امکان از برنامههای کامل استفاده میکند.
- مستندات pyperformance http://pyperformance.readthedocs.io
- پروژه GitHub نرمافزار pyperformance https://github.com/python/pyperformance (کد منبع، گزارش مشکلات)
- بارگیری pyperformance از PyPI https://pypi.python.org/pypi/pyperformance
نرمافزار pyperformance تحت مجوز MIT توزیع میشود.
مستندات:
نحوه استفاده (USAGE)
نصب (Installation)
دستور نصب pyperformance:
python3 -m pip install pyperformance
این دستور برنامهٔ جدید pyperformance را نصب میکند.
در صورت نیاز، وابستگیهای pyperf و six بهطور خودکار نصب میشوند.
نرمافزار pyperformance بر روی Python 3.6 و نسخههای جدیدتر اجرا میشود، اما ممکن است بر روی Python 3.4 و 3.5 نیز کار کند.
در زمان اجرا، ممکن است فایلهای توسعهٔ Python (فایلهای هدر) برای نصب برخی وابستگیها مانند dulwich_log یا psutil بهمنظور کامپایل افزونههای C آنها نیاز باشد. دستورهای نصب این وابستگیها در Fedora:
- پایتون ۳: sudo dnf install python3-devel
- PyPy: sudo dnf install pypy-devel
در Windows، برای اینکه pyperformance بتواند وابستگیهایی مانند greenlet، dulwich یا psutil را از سورس بسازد، چنانچه میخواهید از یک python.exe کامپایلشده از سورس استفاده کنید، نباید مستقیماً از آن python.exe استفاده نمایید. در عوض، باید دستور کمتر شناختهشدهی PC\layout را اجرا کنید تا ساختاری در سیستمفایل ایجاد شود که شبیه به یک Python نصبشده باشد:
.\python.bat -m PC.layout --preset-default --copy installed -v
(برای اطلاعات بیشتر در مورد PC\layout، از گزینهی --help استفاده کنید.)
اکنون میتوانید از فایل اجرایی Python "نصبشده" استفاده کنید:
installed\python.exe -m pip install pyperformance installed\python.exe -m pyperformance run ...
استفاده از یک فایل اجرایی Python که واقعاً نصب شده باشد (مثلاً از طریق py) نیز به خوبی کار میکند.
اجرای بنچمارکها
دستورهایی برای مقایسهی کارایی Python 3.6 و Python 3.7:
pyperformance run --python=python3.6 -o py36.json pyperformance run --python=python3.7 -o py37.json pyperformance compare py36.json py37.json
نکته: ساختار python3 -m pyperformance ... نیز کار میکند (مثال: python3 -m pyperformance run -o py37.json)، اما مستلزم نصب pyperformance روی هر یک از نسخههای آزمایششدهی Python است.
فایلهای JSON توسط ماژول pyperf تولید میشوند و بنابراین میتوان آنها را با استفاده از دستورهای pyperf تحلیل کرد:
python3 -m pyperf show py36.json python3 -m pyperf check py36.json python3 -m pyperf metadata py36.json python3 -m pyperf stats py36.json python3 -m pyperf hist py36.json python3 -m pyperf dump py36.json (...)
همچنین امکان استفاده از pyperf برای مقایسهی نتایج دو فایل JSON وجود دارد:
python3 -m pyperf compare_to py36.json py37.json --table
دستورهای پایه
عملیاتهای pyperformance:
run اجرای بنچمارکها روی پایتون در حال اجرا show نمایش یک فایل بنچمارک compare مقایسه دو فایل بنچمارک list فهرست کردن بنچمارکهای پایتون در حال اجرا list_groups فهرست کردن گروههای بنچمارک پایتون در حال اجرا venv عملیات روی محیط مجازی
گزینههای موجود برای همهٔ دستورها:
-h, --help نمایش این پیام راهنما و خروج
run
اجرای بنچمارکها روی python در حال اجرا.
کاربرد:
pyperformance run [-h] [-r] [-f] [--debug-single-value] [-v] [-m]
[--affinity CPU_LIST] [-o FILENAME]
[--append FILENAME] [--manifest MANIFEST]
[--timeout TIMEOUT] [-b BM_LIST]
[--inherit-environ VAR_LIST] [-p PYTHON]
[--hook HOOK]
گزینهها:
-h, --help نمایش این پیام راهنما و خروج
-r, --rigorous صرف زمان بیشتر برای اجرای آزمونها جهت دریافت
نتایج دقیقتر
-f, --fast دریافت سریع نتایج تقریبی
--debug-single-value اشکالزدایی: سریعترین حالت، تنها محاسبه یک
مقدار واحد
-v, --verbose چاپ خروجی بیشتر
-m, --track-memory ردیابی مصرف حافظه. این قابلیت فقط در Linux
کار میکند.
--affinity CPU_LIST تعیین CPU affinity برای اجراهای بنچمارک. به
این ترتیب، میتوان بنچمارکها را مجبور به
اجرا روی یک CPU مشخص کرد تا تغییرات بین
اجراها به حداقل برسد.
-o FILENAME, --output FILENAME
اجرای بنچمارکها تنها روی یک مفسر و نوشتن
نتایج در FILENAME. فقط baseline_python را
مشخص کنید، نه changed_python.
--append FILENAME افزودن اجراها به یک فایل موجود، یا ایجاد آن
اگر وجود نداشته باشد
--timeout TIMEOUT تعیین مهلت زمانی به ثانیه برای یک بار اجرای
بنچمارک (پیشفرض: غیرفعال)
--manifest MANIFEST فایل مانیفست بنچمارک برای استفاده
-b BM_LIST, --benchmarks BM_LIST
فهرست جداشده با کاما از بنچمارکها برای اجرا.
میتواند شامل آرگومانهای مثبت و منفی باشد:
--benchmarks=run_this,also_this,-not_this.
اگر هیچ آرگومان مثبتی نباشد، تمام بنچمارکها
بهجز آرگومانهای منفی اجرا میشوند؛ در غیر
این صورت فقط آرگومانهای مثبت اجرا خواهند شد.
--inherit-environ VAR_LIST
فهرست جداشده با کاما از متغیرهای محیطی که
هنگام اجرای زیرپردازشهای بنچمارک، از محیط والد
به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
--same-loops SAME_LOOPS
استفاده از همان تعداد تکرار اجرای پیشین
(یعنی کالیبراسیون مجدد نشود). باید مسیر یک
فایل .json از اجرای قبلی باشد.
--hook HOOK
اعمال hook مشخصشده از pyperf هنگام اجرای
بنچمارکها.
نمایش یک فایل بنچمارک.
کاربرد:
show FILENAME
آرگومانهای موضعی:
FILENAME
compare
مقایسه دو فایل بنچمارک.
کاربرد:
pyperformance compare [-h] [-v] [-O STYLE] [--csv CSV_FILE]
[--inherit-environ VAR_LIST] [-p PYTHON]
baseline_file.json changed_file.json
آرگومانهای موضعی:
baseline_file.json changed_file.json
گزینهها:
-v, --verbose چاپ خروجی بیشتر
-O STYLE, --output_style STYLE
سبکی که خروجی بنچمارک باید به خود بگیرد.
گزینههای معتبر 'normal' و 'table' هستند.
پیشفرض normal است.
--csv CSV_FILE نام فایلی که نتایج در آن نوشته خواهد شد،
به صورت یک فایل CSV سهستونه شامل کمترین
زمانهای اجرا برای هر بنچمارک.
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای محیطی
که هنگام اجرای زیرفرآیندهای بنچمارک از محیط
والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی پایتون (پیشفرض: استفاده از
پایتون در حال اجرا)
list
فهرستکردن بنچمارکهای پایتونِ در حال اجرا.
کاربرد:
pyperformance list [-h] [--manifest MANIFEST] [-b BM_LIST]
[--inherit-environ VAR_LIST] [-p PYTHON]
گزینهها:
--manifest MANIFEST فایل مانیفست بنچمارک برای استفاده
-b BM_LIST, --benchmarks BM_LIST
فهرست جداشده با کاما از بنچمارکها برای اجرا.
میتواند شامل هر دو آرگومان مثبت و منفی باشد:
--benchmarks=run_this,also_this,-not_this. اگر
هیچ آرگومان مثبتی نباشد، تمام بنچمارکها بهجز
آرگومانهای منفی اجرا میشوند. در غیر این صورت
فقط آرگومانهای مثبت اجرا میشوند.
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نام متغیرهای محیطی
که هنگام اجرای زیرفرآیندهای بنچمارک از محیط
والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی پایتون (پیشفرض: استفاده از
پایتون در حال اجرا)
برای فهرستکردن تمام بنچمارکها از python3 -m pyperformance list -b all استفاده کنید..SS list_groups
فهرست گروههای بنچمارک Python در حال اجرا.
کاربرد:
pyperformance list_groups [-h] [--manifest MANIFEST]
[--inherit-environ VAR_LIST]
[-p PYTHON]
گزینهها:
--manifest MANIFEST فایل مانیفست بنچمارک برای استفاده
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای
محیطی که هنگام اجرای زیرپردازشهای بنچمارک
از محیط والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
venv
عملیات روی محیط مجازی.
عملیاتها:
show نمایش مسیر محیط مجازی و وضعیت آن
(ایجاد شده یا خیر)
create ایجاد محیط مجازی
recreate اجبار به ایجاد مجدد محیط مجازی
remove حذف محیط مجازی
گزینههای عمومی:
--venv VENV مسیر محیط مجازی
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای
محیطی که هنگام اجرای زیرپردازشهای بنچمارک
از محیط والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
venv show
نمایش مسیر محیط مجازی و وضعیت آن (ایجاد شده یا خیر).
کاربرد:
pyperformance venv show [-h] [--venv VENV]
[--inherit-environ VAR_LIST] [-p PYTHON]
ایجاد محیط مجازی.
کاربرد:
pyperformance venv create [-h] [--venv VENV]
[--manifest MANIFEST] [-b BM_LIST]
[--inherit-environ VAR_LIST]
[-p PYTHON]
گزینهها:
--manifest MANIFEST فایل مانیفست محک مورد استفاده
-b BM_LIST, --benchmarks BM_LIST
فهرست محکهای جداشده با کاما برای اجرا. میتواند
شامل هر دو آرگومان مثبت و منفی باشد:
--benchmarks=run_this,also_this,-not_this. اگر
هیچ آرگومان مثبتی نباشد، تمام محکها بهجز
آرگومانهای منفی اجرا خواهند شد. در غیر این
صورت تنها آرگومانهای مثبت اجرا میشوند.
venv recreate
ایجاد مجدد اجباری محیط مجازی.
کاربرد:
pyperformance venv recreate [-h] [--venv VENV]
[--manifest MANIFEST] [-b BM_LIST]
[--inherit-environ VAR_LIST]
[-p PYTHON]
گزینهها:
--manifest MANIFEST فایل مانیفست محک مورد استفاده
-b BM_LIST, --benchmarks BM_LIST
فهرست محکهای جداشده با کاما برای اجرا. میتواند
شامل هر دو آرگومان مثبت و منفی باشد:
--benchmarks=run_this,also_this,-not_this. اگر
هیچ آرگومان مثبتی نباشد، تمام محکها بهجز
آرگومانهای منفی اجرا خواهند شد. در غیر این
صورت تنها آرگومانهای مثبت اجرا میشوند.
venv remove
حذف محیط مجازی.
کاربرد:
pyperformance venv remove [-h] [--venv VENV]
[--inherit-environ VAR_LIST]
[-p PYTHON]
عملیاتهای pyperformance:
compile کامپایل و نصب CPython و اجرای محکها روی
پایتونِ نصبشده
compile_all کامپایل و نصب CPython و اجرای محکها روی
پایتونِ نصبشده در تمام شاخهها و بازبینیهای
CONFIG_FILE
upload بارگذاری نتایج JSON در وبسایت Codespeed
تمام این دستورها به یک فایل پیکربندی نیاز دارند.
پیکربندی ساده قابل استفاده برای compile (اما نه برای compile_all و نه upload)، doc/benchmark.conf:
[config] json_dir = ~/prog/python/bench_json [scm] repo_dir = ~/prog/python/master update = True [compile] bench_dir = ~/prog/python/bench_tmpdir [run_benchmark] system_tune = True affinity = 2,3
نمونه فایل پیکربندی به همراه توضیحات، doc/benchmark.conf.sample:
[config] # دایرکتوریای که فایلهای JSON در آن نوشته میشوند. # - فایلهای بارگذاریشده به json_dir/uploaded/ منتقل میشوند # - نتایج پایتون وصلهشده در json_dir/patch/ نوشته میشوند json_dir = ~/json # اگر True باشد، CPython در حالت اشکالزدایی کامپایل میشود (LTO و PGO غیرفعال میشوند)، # محکها با --debug-single-sample اجرا میشوند و بارگذاری غیرفعال میگردد. # # از این گزینه برای بررسی سریع یک پیکربندی استفاده کنید. debug = False [scm] # دایرکتوری کد منبع CPython (مخزن Git) repo_dir = ~/cpython # مخزن Git بهروزرسانی شود (git fetch)؟ update = True # نام ریموت Git، برای ایجاد بازبینیِ # شاخهٔ Git استفاده میشود. به عنوان مثال، از بازبینی 'remotes/origin/3.6' # برای شاخهٔ '3.6' استفاده کنید. git_remote = remotes/origin [compile] # ایجاد فایلها در bench_dir: # - bench_dir/bench-xxx.log # - bench_dir/prefix/: جایی که پایتون در آن نصب میشود # - bench_dir/venv/: محیط مجازی استفادهشده توسط pyperformance bench_dir = ~/bench_tmpdir # بهینهسازی زمان پیوند (LTO)؟ lto = True # بهینهسازی هدایتشده با پروفایل (PGO)؟ pgo = True # کامپایلر آزمایشی درجا (JIT) ساخته شود؟ # مقادیر ممکن عبارتند از: # - no: (پیشفرض) کامپایلر JIT یا مفسر micro-op ساخته نشود. # متغیر محیطی جدید PYTHON_JIT تأثیری ندارد. # - yes: کامپایلر JIT ساخته شده و بهطور پیشفرض فعال شود. از PYTHON_JIT=0 میتوان # برای غیرفعال کردن آن در زمان اجرا استفاده کرد. # - yes-off: کامپایلر JIT ساخته شود، اما بهطور پیشفرض فعال نشود. از PYTHON_JIT=1 میتوان # برای فعال کردن آن در زمان اجرا استفاده کرد. # - interpreter: کامپایلر JIT ساخته نشود، اما مفسر micro-op ساخته و فعال شود. # این برای کسانی مفید است که در حال توسعه یا اشکالزدایی micro-opها هستند # (اما نمیخواهند با JIT سر و کله بزنند). # از PYTHON_JIT=0 میتوان برای غیرفعال کردن مفسر micro-op در زمان اجرا استفاده کرد. jit = no # فهرستی از کتابخانههای جداشده با فاصله که package-only هستند، # یعنی بهصورت محلی نصب شدهاند اما در مسیرهای هدر و کتابخانه قرار ندارند. # برای هر یک از این کتابخانهها، مسیر نصب تعیین شده و یک زیرمسیر مناسب # به اعلانهای CFLAGS و LDFLAGS که به configure ارسال میشوند افزوده میشود. # به عنوان یک استثنا، پیشوند openssl، در صورت وجود این کتابخانه در اینجا، # از طریق گزینهٔ --with-openssl ارسال میشود. در حال حاضر، این قابلیت # فقط با Homebrew روی macOS کار میکند. # در صورت اجرا روی macOS با Homebrew، احتمالاً مایلید از این استفاده کنید: # pkg_only = openssl readline sqlite3 xz zlib # نسخهٔ zlib ارائهشده به همراه macOS نیز احتمالاً کار میکند، # تا زمانی که هدرهای SDK اپل نصب شده باشند. pkg_only = # پایتون نصب شود؟ اگر false باشد، پایتون از دایرکتوری ساخت اجرا میشود # # هشدار: اجرای پایتون از دایرکتوری ساخت تغییرات ظریفی نسبت به اجرای # یک پایتونِ نصبشده ایجاد میکند. علاوه بر این، ایجاد یک محیط مجازی با استفاده # از پایتون اجراشده از دایرکتوری ساخت در موارد بسیاری با شکست مواجه میشود، # بهویژه در پایتونهای قدیمیتر از 3.4. نصب را فقط در صورتی غیرفعال کنید # که واقعاً بدانید چه کاری انجام میدهید! install = True # پارامتر '-j' در دستور 'make' مشخص شود jobs = 8 [run_benchmark] # دستور "sudo python3 -m pyperf system tune" پیش از اجرای محکها اجرا شود؟ system_tune = True # گزینهٔ --manifest برای 'pyperformance run' manifest = # گزینهٔ --benchmarks برای 'pyperformance run' benchmarks = # گزینهٔ --affinity برای 'pyperf system tune' و 'pyperformance run' affinity = # فایل JSON تولیدشده بارگذاری شود؟ # # بارگذاری در پایتون وصلهشده، در حالت اشکالزدایی یا در صورت غیرفعال # بودن install غیرفعال است. upload = False # گزینهٔ --rigorous برای 'pyperformance run' rigorous = False # پیکربندی برای بارگذاری نتایج در یک وبسایت Codespeed [upload] url = environment = executable = project = [compile_all] # فهرست شاخههای Git مربوط به CPython branches = default 3.6 3.5 2.7 # فهرست بازبینیها برای سنجش با compile_all [compile_all_revisions] # فهرستی از 'sha1=' (شاخهٔ پیشفرض: 'master') یا 'sha1=branch' # استفادهشده توسط دستور "pyperformance compile_all" # مثلاً: 11159d2c9d6616497ef4cc62953a5c3cc8454afb =
کامپایل Python، نصب Python و اجرای محکها روی Python نصبشده.
کاربرد:
pyperformance compile [-h] [--patch PATCH] [-U] [-T]
[--inherit-environ VAR_LIST] [-p PYTHON]
config_file revision [branch]
آرگومانهای موضعی:
config_file نام فایل پیکربندی revision بازبینی محکزدهشده Python branch شاخه Git
گزینهها:
--patch PATCH فایل وصله
-U, --no-update مخزن Git بهروزرسانی نشود
-T, --no-tune دستور 'pyperf system tune' برای تنظیم
سیستم جهت اجرای محکها اجرا نشود
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای محیطی
که هنگام اجرای زیرپردازشهای محکزنی از
محیط والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
نکات:
- •
- قابلیت PGO در Ubuntu 14.04 LTS با GCC 4.8.4-2ubuntu1~14.04 کار نمیکند: Modules/socketmodule.c:7743:1: internal compiler error: in edge_badness, at ipa-inline.c:895
compile_all
کامپایل تمام شاخهها و بازبینیهای CONFIG_FILE.
کاربرد:
pyperformance compile_all [-h] [--inherit-environ VAR_LIST] [-p PYTHON]
config_file
آرگومانهای موضعی:
config_file نام فایل پیکربندی
گزینهها:
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای محیطی
که هنگام اجرای زیرپردازشهای محکزنی از
محیط والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
بارگذاری نتایج از یک فایل JSON در وبسایت Codespeed.
کاربرد:
pyperformance upload [-h] [--inherit-environ VAR_LIST] [-p PYTHON]
config_file json_file
آرگومانهای مکانی:
config_file نام فایل پیکربندی json_file نام فایل JSON
گزینهها:
--inherit-environ VAR_LIST
فهرست جداشده با کاما از نامهای متغیرهای
محیطی که هنگام اجرای زیرپردازشهای محکزنی
از محیط والد به ارث برده میشوند.
-p PYTHON, --python PYTHON
فایل اجرایی Python (پیشفرض: استفاده از
Python در حال اجرا)
چگونگی دستیابی به محکهای پایدار
- اجرای دستور python3 -m pyperf system tune
- کامپایل Python با استفاده از LTO (بهینهسازی زمان پیوند) و PGO (بهینهسازیهای هدایتشده با پروفایل): از دستور pyperformance compile استفاده کنید که بهطور پیشفرض از LTO و PGO بهره میبرد
- مشاهده توصیههای مستندات pyperf: چگونگی دستیابی به نتایج بازتولیدپذیر محکزنی http://pyperf.readthedocs.io/en/latest/run_benchmark.html#how-to-get-reproductible-benchmark-results.
محیط مجازی pyperformance
برای اجرای محکها، pyperformance ابتدا یک محیط مجازی ایجاد میکند. این ابزار پیشنیازها را با نسخههای مشخص نصب میکند تا محیطی بازتولیدپذیر فراهم شود. Python سیستمی ممکن است ماژولهای ناشناختهای با نسخههای نامشخص داشته باشد و همچنین ممکن است فایلهای .pth داشته باشد که هنگام راهاندازی Python اجرا میشوند و میتوانند رفتار Python را تغییر دهند یا دستکم راهاندازی آن را کُند کنند.
هدف pyperformance چیست
یک محک همیشه برای هدفی مشخص نوشته میشود. بسته به اینکه محک چگونه نوشته شده و چگونه اجرا شود، نتیجه میتواند متفاوت باشد و در نتیجه مفهوم متفاوتی داشته باشد.
مجموعه محکهای pyperformance چندین هدف را دنبال میکند:
- کمک به شناسایی افت کارایی در یک پیادهسازی Python
- اعتبارسنجی اینکه یک تغییر بهینهسازی باعث سریعتر شدن Python شده و افت کارایی ایجاد نکرده، یا تنها افتهای جزئی داشته است
- مقایسه دو پیادهسازی از Python، برای نمونه CPython و PyPy
- نمایشی از
کارایی Python که
در حالت
ایدهآل
معرف
کارایی
برنامههای
کاربردی در
حال اجرا در
محیط
عملیاتی
باشد
ماژول pyperf و بنچمارکهای pyperformance برای تولید نتایج تکرارپذیر طراحی شدهاند، اما نه به قیمت اجرای بنچمارکها در وضعیتی خاص که برای اجرای برنامهها در محیط عملیاتی استفاده نمیشود. به همین دلایل، زبالهروب پایتون (Python garbage collector)، تابع هش تصادفی پایتون و ASLR (تصادفیسازی چیدمان فضای آدرس) سیستم غیرفعال نمیشوند. بنچمارکها همچنین gc.collect() را فراخوانی نمیکنند، چرا که CPython آن را با مکانیزم توقف کامل (stop-the-world) پیادهسازی میکند https://en.wikipedia.org/wiki/Tracing_garbage_collection#Stop-the-world_vs._incremental_vs._concurrent و بدین ترتیب برنامهها برای جلوگیری از افت شدید کارایی آن را فراخوانی نمیکنند.
لحاظ کردن دادههای پرت و جهشها
علاوه بر این، در حالی که مستندات pyperf نحوه کاهش نویز تصادفی سیستم و سایر برنامهها را توضیح میدهد، برخی از بنچمارکها از سیستم استفاده میکنند و بنابراین بسته به بار کاری سیستم، کارایی I/O و غیره میتوانند زمانبندیهای متفاوتی داشته باشند. دادههای پرت و جهشهای موقت در نتایج بهطور خودکار حذف نمیشوند: مقادیر به جای استفاده از میانه و انحراف مطلق میانه که دادههای پرت را نادیده میگیرند، با محاسبه میانگین (میانگین حسابی) و انحراف معیار که این جهشها را "شامل میشود" خلاصه میگردند. این یک انتخاب آگاهانه است، زیرا برنامههای در حال اجرا در محیط عملیاتی تحت تأثیر چنین کندیهای موقتی ناشی از عوامل مختلفی مانند زبالهروبی یا کامپایل JIT قرار میگیرند.
گرمکردن و وضعیت پایدار
یک موضوع بینابینی، "گرمکردن" (warmups) بنچمارکها است. مقادیر اولیه هر فرایند کارگر (worker process) همواره کندتر هستند: در بهترین حالت 10% کندتر، و در PyPy میتواند 1000% یا بیشتر کندتر باشد. در حال حاضر (2017-04-14)، pyperformance مقادیر اولیهای را که گرمکردن در نظر گرفته میشوند نادیده میگیرد تا زمانی که بنچمارک به "وضعیت پایدار" (steady state) خود برسد. این "وضعیت پایدار" میتواند شامل جهشهای موقت به ازای هر 5 مقدار باشد (برای نمونه: ناشی از زبالهروب)، و همچنان میتواند بهینهسازیهای بیشتری از کامپایلر JIT را به دنبال داشته باشد اما با تأثیری "اندک" بر میانگین pyperformance.
جهت شفافیت، "گرمکردن" و "وضعیت پایدار" موضوعاتی در حال توسعه و مباحثی بسیار پیچیده هستند، بهویژه در PyPy و کامپایلر JIT آن.
نکات
ابزاری برای مقایسه کارایی دو پیادهسازی پایتون.
دستور pyperformance آزمون تی دو دامنهای استیودنت (Student's two-tailed T test) را با سطح اطمینان 95% روی نتایج بنچمارک اجرا میکند تا نشان دهد که آیا اختلاف مشاهدهشده از نظر آماری معنادار است یا خیر.
حذف گزینه -b منجر به اجرای گروه پیشفرض بنچمارکها میشود؛ حذف -b همانند مشخص کردن -b default است.
برای اجرای تمام بنچمارکهایی که pyperformance میشناسد، از -b all استفاده کنید. برای مشاهده فهرست کامل همه بنچمارکهای موجود، از --help استفاده کنید.
مشخص کردن منفی بنچمارکها نیز پشتیبانی میشود: -b -2to3 همه بنچمارکهای گروه پیشفرض را به جز 2to3 اجرا خواهد کرد (این کار مشابه -b default,-2to3 است). گزینه -b all,-django همه بنچمارکها به جز بنچمارک الگوهای Django را اجرا میکند. گروههای منفی (مانند -b -default) پشتیبانی نمیشوند. بنچمارکهای مثبت پیش از کسر بنچمارکهای منفی تجزیه میشوند.
اگر گزینه --track_memory داده شود، pyperformance بهطور مداوم مصرف حافظه بنچمارک را نمونهبرداری میکند. این ویژگی در حال حاضر فقط روی لینوکس 2.6.16 و بالاتر، یا ویندوز با PyWin32 کار میکند. از آنجا که --track_memory هنگام جمعآوری اندازهگیریهای حافظه نوسان (jitter) کارایی ایجاد میکند، در گزارش نهایی تنها مصرف حافظه گزارش میشود.
بنچمارکها (BENCHMARKS)
همچنین برای نحوه ایجاد بنچمارکهای خود یا استفاده از بنچمارکهای دیگران، بخش Custom Benchmarks <> را ببینید.
گروههای دردسترس
مشابه بنچمارکهای تکی (به "بنچمارکهای دردسترس" در زیر نگاه کنید)، استفاده از گروههای بنچمارک نیز پس از گزینه -b مجاز است. از دستور python3 -m pyperformance list_groups برای فهرست کردن گروهها و بنچمارکهای آنها استفاده کنید.
گروههای بنچمارک دردسترس:
- all: گروهی شامل تمام بنچمارکها
- apps: بنچمارکهای کاربردی "سطح بالا" (مانند 2to3، Chameleon و Tornado HTTP)
- default: گروهی از بنچمارکها که بهطور پیشفرض توسط دستور run اجرا میشوند
- math: اعداد ممیز شناور و صحیح
- regex: مجموعهای از بنچمارکهای عبارات منظم
- serialize: بنچمارکهای مربوط به ماژولهای pickle و json
- startup: مجموعهای از ریزبنچمارکها با تمرکز بر زمان راهاندازی (start-up) مفسر پایتون.
- template: کتابخانههای قالبساز
از دستور python3 -m pyperformance list_groups برای فهرست کردن گروهها و بنچمارکهای آنها استفاده کنید..SS بنچمارکهای موجود
در pyperformance 0.5.5، ریزبنچمارکهای زیر حذف شدهاند زیرا بسیار کوتاهاند، نمایندهٔ برنامههای کاربردی واقعی نیستند و بیش از حد ناپایدارند.
- call_method_slots
- call_method_unknown
- call_method
- call_simple
- pybench
2to3
اجرای ابزار 2to3 بر روی دایرکتوری pyperformance/benchmarks/data/2to3/: رونوشتی از ۹ فایل django/core/*.py مربوط به Django 1.1.4.
اجرای دستور python -m lib2to3 -f all <files> که در آن python همان sys.executable است. بنابراین این آزمون تنها کارایی خود Python را نمیسنجد، بلکه کارایی ماژول lib2to3 را نیز میسنجد که میتواند بسته به نسخهٔ Python تغییر کند.
نکته:
async_tree
بنچمارک بار کاری ناهمگام (Async)، که تابع asyncio.gather() را روی یک درخت (با عمق ۶ سطح و ۶ شاخه در هر سطح) فراخوانی میکند، در حالی که گرههای برگ کارهای [احتمالاً] ناهمگام را شبیهسازی میکنند (بسته به گونهٔ بنچمارک). گونههای موجود:
- async_tree: بدون هیچ کار ناهمگام واقعی در هیچکدام از گرههای برگ.
- async_tree_io: تمام گرههای برگ، بار کاری IO ناهمگام را شبیهسازی میکنند (خواب ناهمگام به مدت ۵۰ میلیثانیه).
- async_tree_memoization: تمام گرههای برگ، بار کاری IO ناهمگام را شبیهسازی میکنند در حالی که ۹۰٪ دادهها بهخاطرسپرده (memoize) شدهاند.
- async_tree_cpu_io_mixed: نیمی از گرههای برگ بار کاری وابسته به پردازنده (CPU-bound) را شبیهسازی میکنند (math.factorial(500)) و نیم دیگر بار کاری مشابه با گونهٔ async_tree_memoization را شبیهسازی میکنند.
این بنچمارکها همچنین در صورت دردسترس بودن، دارای گونهٔ "eager" هستند که از eager task factory ماژول asyncio استفاده میکند.
base64
سنجش کارایی توابع کدگذاری و رمزگشایی ماژول base64. هر الگوریتم دارای گونههای _small و _large است که هر دو عمل کدگذاری و رمزگشایی را در یک بنچمارک واحد میسنجند:
- _small: تکرارهای متعادل میان اندازههای دادهٔ 20B، 127B، 3KiB و 9KB که بیشتر احتمال دارد اثر سربار را نشان دهند.
- _large: تمرکز بر دادههای بزرگ با اندازههای 100KiB و حدود 1MiB که احتمالاً بازدهی پیادهسازی را نشان میدهند.
بنچمارکهای موجود:
- base64_small، base64_large: کدگذاری و رمزگشایی استاندارد Base64
- urlsafe_base64_small: کدگذاری Base64 امن برای URL (تنها نسخهٔ کوچک، زیرا نشانیهای وب نباید حاوی دادههای بسیار بزرگ باشند)
- base32_small، base32_large: کدگذاری و رمزگشایی Base32
- base16_small، base16_large: کدگذاری و رمزگشایی Base16/hex
- ascii85_small، ascii85_large: کدگذاری و رمزگشایی Ascii85 (شامل مسیر کد wrapcol=76)
- base85_small، base85_large: کدگذاری و رمزگشایی Base85
ماژول base64 را ببینید: https://docs.python.org/dev/library/base64.html..SS chameleon
رندر کردن یک قالب با استفاده از ماژول chameleon برای ایجاد یک جدول HTML با ۵۰۰ سطر و ۱۰ ستون.
کلاس chameleon.PageTemplate را ببینید.
chaos
ایجاد فرکتالهای مشابه بازی آشوب (chaosgame). گزینههای خط فرمان:
--thickness THICKNESS
ضخامت (پیشفرض: 0.25)
--width WIDTH عرض تصویر (پیشفرض: 256)
--height HEIGHT ارتفاع تصویر (پیشفرض: 256)
--iterations ITERATIONS
تعداد تکرارها (پیشفرض: 5000)
--filename FILENAME.PPM
نام فایل خروجی تصویر PPM
--rng-seed RNG_SEED بذر تولیدکننده عدد تصادفی (پیشفرض: 1234)
هنگامی که گزینهٔ --filename استفاده میشود، زمانسنجی شامل زمان ایجاد فایل PPM نیز میشود.
حق نشر (C) 2005 Carl Friedrich Bolz [تصویر: بازی آشوب، بنچمارک bm_chaos] [تصویر]
تصویر تولیدشده توسط bm_chaos (روی CPython 3.5 ۳ ثانیه طول کشید) با دستور:
python3 pyperformance/benchmarks/bm_chaos.py --worker -l1 -w0 -n1 --filename chaos.ppm --width=512 --height=512 --iterations 50000
crypto_pyaes
بنچمارک یک پیادهسازی پایتون خالص از رمز قطعهای AES در حالت CTR با استفاده از ماژول pyaes.
این بنچمارک روی CPython 3 در مقایسه با CPython 2.7 کندتر است، زیرا CPython 3 دیگر نوع دادهٔ "small int" (int) را ندارد. نوع int در CPython 3 اکنون همیشه دارای اندازهٔ دلخواه است، مانند نوع long در CPython 2.7.
پروژهٔ pyaes در https://github.com/ricmoo/pyaes را ببینید: یک پیادهسازی پایتون خالص از الگوریتم رمز قطعهای AES و حالتهای عملیاتی رایج (CBC، CFB، CTR، ECB و OFB).
deepcopy
بنچمارک متد copy.deepcopy پایتون. متد deepcopy روی یک دیکشنری تو در تو و یک dataclass اجرا میشود.
deltablue
بنچمارک DeltaBlue
پورتشده برای پروژهٔ PyPy. با مشارکت Daniel Lindsley
این پیادهسازی از بنچمارک DeltaBlue مستقیماً از کد منبع V8 در https://github.com/v8/v8/blob/master/benchmarks/deltablue.js پورت شده است، که آن هم به نوبهٔ خود از پیادهسازی Smalltalk توسط John Maloney و Mario Wolczko مشتق شده بود. پیادهسازی اصلی Javascript تحت پروانهٔ GPL منتشر شده بود.
در بخشهایی بهروزرسانی شده تا با سبک پایتون سازگارتر باشد (حلقههای for روی مجموعهها، چند متد جادویی، استفاده از یک لیست برای OrderedCollection، و تغییر مواردی که این مجموعهها را دستکاری میکردند به متدهای توکار) اما تا حد زیادی ساختار و منطق نسخهٔ اصلی را حفظ کرده است. (اه!)
django_template
استفاده از سیستم قالببندی Django برای ساخت یک جدول HTML با ۱۵۰×۱۵۰ خانه.
از کلاسهای Context و Template از ماژول django.template استفاده میکند.
dulwich_log
پیمایش روی کامیتهای مخزن گیت asyncio با استفاده از ماژول Dulwich. از مخزن pyperformance/benchmarks/data/asyncio.git/ استفاده میکند.
شبهکد بنچمارک:
repo = dulwich.repo.Repo(repo_path)
head = repo.head()
for entry in repo.get_walker(head):
pass
پروژهٔ Dulwich در https://www.dulwich.io را ببینید..SS docutils
استفاده از Docutils https://docutils.sourceforge.io برای تبدیل مستندات Docutils به HTML. نمونهای از ساخت یک مجموعه مستندات با اندازه متوسط.
fannkuch
پروژه The Computer Language Benchmarks Game: http://benchmarksgame.alioth.debian.org
ارائهشده توسط Sokolov Yura، اصلاحشده توسط Tupteq.
float
بنچمارک ساختگی با محاسبات سنگین ممیز شناور که در اصل توسط Factor استفاده شده است.
ایجاد ۱۰۰٬۰۰۰ شیء point که math.cos()، math.sin() و math.sqrt() را محاسبه میکنند.
تغییریافته در نسخه 0.5.5: استفاده از __slots__ در کلاس Point جهت تمرکز بنچمارک روی ممیز شناور به جای آزمودن کارایی ویژگیهای کلاس.
genshi
رندر کردن یک قالب با استفاده از Genshi (ماژول genshi.template):
- genshi_text: رندر کردن یک قالب HTML با استفاده از کلاس NewTextTemplate
- genshi_xml: رندر کردن یک قالب XML با استفاده از کلاس MarkupTemplate
پروژه Genshi را ببینید: http://pythonhosted.org/Genshi.
go
هوش مصنوعی برای انجام بازی تختهای Go. از Zobrist hashing استفاده میکند https://en.wikipedia.org/wiki/Zobrist_hashing.
hexiom
حلکننده بازی تختهای Hexiom (بهطور پیشفرض سطح ۲۵). گزینه خط فرمان:
--level {2,10,20,25,30,36} Hexiom board level (default: 25)
hg_startup
دریافت صفحه راهنمای Mercurial.
سنجش کارایی دستور python path/to/hg help با استفاده از pyperf.Runner.bench_command()، که در آن python همان sys.executable و path/to/hg برنامه Mercurial نصبشده در یک محیط مجازی است.
تابع bench_command() خروجیهای stdout و stderr را به /dev/null هدایت میکند.
پروژه Mercurial را ببینید: https://www.mercurial-scm.org.
html5lib
تجزیه فایل HTML با نام pyperformance/benchmarks/data/w3_tr_html5.html (۱۳۲ کیلوبایت) با استفاده از html5lib. این فایل همان مشخصات HTML 5 است، اما کوتاه شده است تا تجزیه آن در کمتر از ۱ ثانیه (حدود ۲۵۰ میلیثانیه) انجام شود.
روی CPython، پس از ۳ مرحله گرمکردن (warmup)، بنچمارک وارد چرخهای از ۵ مقدار میشود: هر پنجمین مقدار ۱۰٪ کندتر است. نمودار ۱ اجرا از ۵۰ مقدار (مرحله گرمکردن ترسیم نشده است): [image: html5lib values] [image]
پروژه html5lib را ببینید: https://html5lib.readthedocs.io.
json_dumps, json_loads
سنجش کارایی توابع dumps() و loads() از ماژول json.
گزینه خط فرمان bm_json_dumps.py:
--cases CASES Comma separated list of cases. Available cases: EMPTY,
SIMPLE, NESTED, HUGE. By default, run all cases.
بنچمارکها روی ماژول logging:
- logging_format: بنچمارک logger.warn(fmt, str)
- logging_simple: بنچمارک logger.warn(msg)
- logging_silent: بنچمارک logger.debug(msg) هنگامی که لاگ نادیده گرفته میشود
گزینهٔ خط فرمان اسکریپت:
format silent simple
ماژول logging را ببینید https://docs.python.org/dev/library/logging.html.
mako
استفاده از سیستم قالب Mako برای ساخت یک جدول HTML با ابعاد 150x150 سلول. شامل:
- دو وراثت قالب
- گریزدهی HTML، گریزدهی XML، گریزدهی URL و هرس فاصلههای خالی
- تعریف و فراخوانی توابع
- حلقههای for
پروژهٔ Mako را ببینید http://docs.makotemplates.org.
mdp
نبرد همراه با خسارتها و مرتبسازی توپولوژیکی گرهها در یک گراف.
مرتبسازی توپولوژیکی را ببینید https://en.wikipedia.org/wiki/Topological_sorting.
meteor_contest
حلکننده برای صفحه پازل Meteor.
صفحه پازل Meteor: http://benchmarksgame.alioth.debian.org/u32/meteor-description.html#meteor
پروژهٔ The Computer Language Benchmarks Game: http://benchmarksgame.alioth.debian.org
ارائه شده توسط Daniel Nanz، 2008-08-21.
nbody
بنچمارک N-body از The Computer Language Benchmarks Game. میکروبنچمارک روی محاسبات ممیز شناور.
این مورد برای پشتیبانی از perf.py متعلق به Unladen Swallow در نظر گرفته شده است. بر همین اساس، نسبت به نسخهٔ Shootout تغییر یافته است:
- پذیرش گزینههای استاندارد بنچمارک Unladen Swallow.
- اجرای report_energy()/advance() در یک حلقه.
- پیادهسازی دوبارهٔ itertools.combinations() برای سازگاری با نسخههای قدیمیتر Python.
برگرفته از: <http://benchmarksgame.alioth.debian.org/u64q/program.php?test=nbody&lang=python3&id=1>
ارائه شده توسط Kevin Carson. تغییریافته توسط Tupteq، Fredrik Johansson و Daniel Nanz.
python_startup, python_startup_nosite
- python_startup: اندازهگیری زمان راهاندازی Python، اجرای python -c pass که در آن python همان sys.executable است
- python_startup_nosite: اندازهگیری زمان راهاندازی Python بدون وارد کردن ماژول site، اجرای python -S -c pass که در آن python همان sys.executable است
اجرای بنچمارک با pyperf.Runner.bench_command()..SS nqueens
حلکننده ساده و جستجوی جامع (brute-force) برای معمای N-وزیر.
معمای هشت وزیر را ببینید: https://en.wikipedia.org/wiki/Eight_queens_puzzle.
pathlib
سنجش کارایی عملیات ماژول pathlib از کتابخانه استاندارد.
این بنچمارک بر ایجاد اشیاء کوچک، الگوخوانی مسیر (globbing) و فراخوانیهای سیستمی فشار وارد میکند.
مستندات ماژول pathlib را ببینید: https://docs.python.org/dev/library/pathlib.html.
pickle
بنچمارکهای pickle (سریالسازی):
- pickle: استفاده از ماژول cPickle برای پیکل کردن مجموعهدادههای مختلف.
- pickle_dict: ریزبنچمارک؛ استفاده از ماژول cPickle برای پیکل کردن تعداد زیادی dict.
- pickle_list: ریزبنچمارک؛ استفاده از ماژول cPickle برای پیکل کردن تعداد زیادی list.
- pickle_pure_python: استفاده از ماژول خالص پایتونی pickle برای پیکل کردن مجموعهدادههای مختلف.
بنچمارکهای unpickle (دیسریالسازی):
- unpickle: استفاده از ماژول cPickle برای آنپیکل کردن مجموعهدادههای مختلف.
- unpickle_list
- unpickle_pure_python: استفاده از ماژول خالص پایتونی pickle برای آنپیکل کردن مجموعهدادههای مختلف.
pidigits
محاسبه ۲٬۰۰۰ رقم از π. این بنچمارک بر محاسبات اعداد صحیح بزرگ فشار میآورد.
گزینه خط فرمان:
--digits DIGITS تعداد ارقام محاسبهشده پی (پیشفرض: 2000)
برگرفته از کد در: http://benchmarksgame.alioth.debian.org
pyflate
بنچمارک ازفشردهساز bzip2 با پایتون خالص: باز کردن فایل pyperformance/benchmarks/data/interpreter.tar.bz2 در حافظه از حالت فشرده.
کپیرایت 2006--2007-01-21 متعلق به Paul Sladen: http://www.paul.sladen.org/projects/compression
شما میتوانید این کد را تحت هر یک از مجوزهای سازگار با DFSG (مانند BSD یا GNU GPLv2) استفاده و توزیع کنید.
رمزگشا/ازفشردهساز مستقل DEFLATE (gzip) و bzip2 با پایتون خالص. این ابزار احتمالاً برای اهداف پژوهشی/ایجاد نمایه کاربردیتر است؛ مسلماً در بخش تطبیقدهنده بیتی هافمن هنوز جای بهبود وجود دارد.
در پیادهسازیِ موجود، اشکال شناختهشدهای در رمزگشایی BWT مربوط به رشتههای تکراری وجود داشت. این مشکل دور زده شده است؛ 'bwt_reverse()' را ببینید. در تمام موارد آزمون خروجی صحیح تولید میشود، اما در حالت ایدهآل باید ریشه مشکل پیدا میشد...
raytrace
ردیاب پرتو (raytracer) ساده.
گزینههای خط فرمان:
--width WIDTH عرض تصویر (پیشفرض: 100) --height HEIGHT ارتفاع تصویر (پیشفرض: 100) --filename FILENAME.PPM نام فایل خروجی تصویر PPM
این فایل حاوی تعاریفی برای یک ردیاب پرتو ساده است. کپیرایت Callum و Tony Garnock-Jones، سال 2008.
این فایل را میتوان آزادانه تحت مجوز MIT بازتوزیع کرد، http://www.opensource.org/licenses/mit-license.php
از https://leastfixedpoint.com/tonyg/kcbbs/lshift_archive/toy-raytracer-in-python-20081029.html [تصویر: Pure Python raytracer] [تصویر]
تصویر تولیدشده با دستور (در CPython 3.5 حدود 68.4 ثانیه زمان برد):
python3 pyperformance/benchmarks/bm_raytrace.py --worker --filename=raytrace.ppm -l1 -w0 -n1 -v --width=800 --height=600
تحت فشار قرار دادن کارایی کامپایلر regex در Python، بهجای سرعت اجرای آن.
سنجش میزان سرعت پیادهسازی regex در Python در کامپایل عبارات باقاعده.
ما تمام عبارات باقاعده استفادهشده توسط دیگر بنچمارکهای regex را گردآوری کرده، با جایگزینی ماژول re با یک نسخهٔ ساختگی (stub) آنها را به دام میاندازیم و سپس آن عبارات باقاعده را مکرراً کامپایل میکنیم. ما در حافظهٔ پنهان ماژول re دستکاری میکنیم تا آن را وادار کنیم هر عبارت باقاعدهای را که به آن میدهیم مجدداً کامپایل کند.
regex_dna
بنچمارک regex DNA با استفاده از "fasta" برای ایجاد مورد آزمون.
مسابقه بنچمارک زبانهای رایانهای (The Computer Language Benchmarks Game) http://benchmarksgame.alioth.debian.org
برنامه شماره ۵ regex-dna در Python 3: ارائهشده توسط Dominique Wahli 2to3 اصلاحشده توسط Justin Peel
برنامه شماره ۳ fasta در Python 3: اصلاحشده توسط Ian Osgood اصلاح مجدد توسط Heinrich Acker اصلاحشده توسط Justin Peel اصلاحشده توسط Christopher Sean Forgeron
regex_effbot
برخی از بنچمارکهای اصلی مورد استفاده برای تنظیم و بهینهسازی موتور regex فعلی در خط اصلی توسعهٔ Python.
regex_v8
پورت بنچمارک regex موتور V8 برای Python.
تولیدشده بهصورت خودکار در 2009-01-30.
این بنچمارک با بارگذاری ۵۰ صفحه از محبوبترین صفحات وب و ثبت تمامی عملیات regexp انجامشده تولید شده است. به هر عملیات وزنی اختصاص مییابد که از تخمین محبوبیت صفحاتی که در آنها رخ میدهد و تعداد دفعات اجرای آن هنگام بارگذاری هر صفحه محاسبه شده است. در نهایت، حروف نویسهای در دادهها با استفاده از ROT13 بهگونهای رمزگذاری شدهاند که بر نحوهٔ تطابق regexp با ورودیهایشان تأثیری نداشته باشد.
برای Unladen Swallow به Python پورت شده است. نسخهٔ اصلی JS را میتوان در https://github.com/v8/v8/blob/master/benchmarks/regexp.js، r1243 یافت.
richards
بنچمارک کلاسیک Richards در Python.
بر پایه یک نسخهٔ Java.
بر اساس نسخهٔ اصلی نوشتهشده به زبان BCPL توسط Dr Martin Richards در سال ۱۹۸۱ در آزمایشگاه رایانهٔ دانشگاه کمبریج، انگلستان و یک نسخهٔ C++ برگرفته از نسخهٔ Smalltalk نوشتهشده توسط L Peter Deutsch.
نسخهٔ Java: حق نشر (C) ۱۹۹۵ Sun Microsystems, Inc. ترجمهشده از C++ توسط Mario Wolczko، حلقه بیرونی اضافهشده توسط Alex Jacoby.
scimark
- scimark_sor: بنچمارک Successive over-relaxation (SOR) https://en.wikipedia.org/wiki/Successive_over-relaxation
- scimark_sparse_mat_mult: بنچمارک ضرب ماتریس تنک (sparse matrix) https://en.wikipedia.org/wiki/Sparse_matrix multiplication https://en.wikipedia.org/wiki/Matrix_multiplication_algorithm
- scimark_monte_carlo: بنچمارک الگوریتم مونتکارلو https://en.wikipedia.org/wiki/Monte_Carlo_algorithm برای محاسبه مساحت یک دیسک
- scimark_lu: بنچمارک تجزیه LU https://en.wikipedia.org/wiki/LU_decomposition
- scimark_fft: بنچمارک تبدیل فوریه سریع (FFT) https://en.wikipedia.org/wiki/Fast_Fourier_transform
spectral_norm
سایت MathWorld: "مسائل چالش صد دلاری، صد رقمی"، چالش شماره ۳. http://mathworld.wolfram.com/Hundred-DollarHundred-DigitChallengeProblems.html
مسابقه بنچمارک زبانهای رایانهای (The Computer Language Benchmarks Game) http://benchmarksgame.alioth.debian.org/u64q/spectralnorm-description.html#spectralnorm
ارائهشده توسط Sebastien Loisel. تصحیحشده توسط Isaac Gouy. افزایش سرعت توسط Josh Goldfoot. افزایش سرعت با ترفندهای نامتعارف (dirtily sped up) توسط Simon Descarpentries. پیادهسازی همزمانی توسط Jason Stitt..SS sqlalchemy_declarative, sqlalchemy_imperative
- sqlalchemy_declarative: محک SQLAlchemy Declarative با استفاده از SQLite
- sqlalchemy_imperative: محک SQLAlchemy Imperative با استفاده از SQLite
پروژهٔ SQLAlchemy را ببینید: https://www.sqlalchemy.org.
sqlite_synth
محک توابع تجمیعی پایتون برای SQLite.
هدف این محک (نوشتهشده برای PyPy) سنجش کارایی CFFI و تبادلات زیاد رفتوبرگشتی میان SQLite و Python است. بنابراین، خود پرسوجوها بسیار ساده هستند.
پروژهٔ SQLite را در https://www.sqlite.org و ماژول sqlite3 پایتون (stdlib) را در https://docs.python.org/dev/library/sqlite3.html ببینید.
sympy
محک روی ماژول sympy:
- sympy_expand: محک sympy.expand()
- sympy_integrate: محک sympy.integrate()
- sympy_str: محک str(sympy.expand())
- sympy_sum: محک sympy.summation()
در CPython، برخی از مقادیر sympy_sum بین ۵٪ تا ۱۰٪ کندتر هستند:
$ python3 -m pyperf dump sympy_sum.json Run 1: 1 warmup, 50 values, 1 loop - warmup 1: 404 ms (+63%) - value 1: 244 ms - value 2: 245 ms - value 3: 258 ms <---- - value 4: 245 ms - value 5: 245 ms - value 6: 279 ms (+12%) <---- - value 7: 246 ms - value 8: 244 ms - value 9: 245 ms - value 10: 255 ms <---- - value 11: 245 ms - value 12: 245 ms - value 13: 256 ms <---- - value 14: 248 ms - value 15: 245 ms - value 16: 245 ms ...
نمودار ۱ اجرا از ۵۰ مقدار (مرحلهٔ گرمکردن [warmup] رسم نشده است): [تصویر: مقادیر sympy_sum] [تصویر]
پروژهٔ sympy را ببینید: http://www.sympy.org.
telco
محک Telco برای سنجش کارایی محاسبات دهدهی (اعشاری):
- http://speleotrove.com/decimal/telco.html
- http://speleotrove.com/decimal/telcoSpec.html
- یک شناسهٔ نوع تماس، c، از کمارزشترین بیت (least significant bit) مدتزمان تنظیم میشود (از این رو c برابر 0 یا 1 است).
- یک نرخ، r، از روی نوع تماس تعیین میشود. تماسهایی با c=0 دارای نرخ پایین r هستند: 0.0013؛ باقی آنها (تماسهای راه دور یا «distance calls») دارای نرخ ویژهٔ r هستند: 0.00894. (نرخها، بسیار تقریبی، بر حسب یورو یا دلار در ثانیه هستند.)
- سپس هزینهٔ تماس، p، محاسبه میشود (p=r*n). این مقدار با استفاده از روش گرد کردن به نزدیکترین زوج (round-half-even یا روش بانکدار) دقیقاً تا ۲ رقم اعشار گرد میشود.
- مالیات پایه، b، محاسبه میشود: b=p*0.0675 (۶.۷۵٪). این مقدار دقیقاً تا ۲ رقم اعشار بریده میشود (گرد کردن به پایین)، و سپس متغیر مجموع مالیات پایه افزایش مییابد (sumB=sumB+b).
- برای تماسهای راه دور: مالیات مسافت، d، محاسبه میشود: d=p*0.0341 (۳.۴۱٪). این مقدار دقیقاً تا ۲ رقم اعشار بریده میشود (گرد کردن به پایین)، و سپس متغیر مجموع مالیات مسافت افزایش مییابد (sumD=sumD+d).
- هزینهٔ کل، t، محاسبه میشود (t=p+b، و اگر تماس راه دور باشد، t=t+d).
- متغیر مجموع هزینهها افزایش مییابد (sumT=sumT+t).
- هزینهٔ کل، t، به یک رشته، s تبدیل میشود.
این محک پایتون با ماژول decimal پیادهسازی شده است.
ماژول decimal پایتون (stdlib) را ببینید: https://docs.python.org/dev/library/decimal.html..SS tornado_http
بنچمارک سرور HTTP مربوط به ماژول tornado
پروژه Tornado را ببینید http://www.tornadoweb.org.
unpack_sequence
میکروبنچمارک برای باز کردن (unpacking) لیستها و تاپلها.
شبهکد:
a, b, c, d, e, f, g, h, i, j = to_unpack
که در آن to_unpack برابر با tuple(range(10)) یا list(range(10)) است.
xml_etree
بنچمارک API مربوط به ElementTree از ماژول xml.etree:
- xml_etree_generate: ایجاد یک سند XML
- xml_etree_iterparse: بنچمارک etree.iterparse()
- xml_etree_parse: بنچمارک etree.parse()
- xml_etree_process: پردازش یک سند XML
ماژول xml.etree.ElementTree پایتون (stdlib) را ببینید https://docs.python.org/dev/library/xml.etree.elementtree.html.
بنچمارکهای سفارشی (CUSTOM BENCHMARKS)
ابزار pyperformance شامل مجموعهای از بنچمارکهای پیشفرض خود است (بخش Benchmarks <> را ببینید). با این حال، از بنچمارکهای سفارشی نیز پشتیبانی میکند.
استفاده از بنچمارکهای سفارشی
برای استفاده از بنچمارکهای سفارشی، باید از گزینه خط فرمان --manifest استفاده کرده و مسیر فایل مانیفست توصیفکننده آن بنچمارکها را ارائه دهید.
قالبهای فایل pyperformance
pyperformance از دو قالب فایل برای شناسایی بنچمارکها استفاده میکند:
- manifest - مجموعهای از بنچمارکها
- metadata - یک بنچمارک منفرد
برای هر بنچمارک، دو فایل الزامی و چندین فایل اختیاری وجود دارد. انتظار میرود این فایلها در یک ساختار دایرکتوری مشخص قرار داشته باشند (مگر اینکه در متادیتا سفارشیسازی شده باشد).
این ساختار (به زیر مراجعه کنید) به گونهای است که نگهداری یک بنچمارک (یا مجموعهای از بنچمارکها) در GitHub و توزیع آن در PyPI را آسان میکند. همچنین انتشار بنچمارکهای یک پروژه پایتون را ساده میسازد. راهکار جایگزین، ارجاع دادن افراد به یک مخزن است.
بنچمارکها میتوانند متادیتا را از فایلهای متادیتای دیگر به ارث ببرند. این قابلیت برای نگهداری متادیتای مشترک یک مجموعه بنچمارک (مانند "version") در یک فایل مفید است. به همین ترتیب، بنچمارکهای یک پروژه پایتون میتوانند متادیتا را از فایل pyproject.toml پروژه به ارث ببرند.
گاهی اوقات یک بنچمارک دارای یک یا چند نگارش متغیر (variant) است که با استفاده از همان اسکریپت اجرا میشوند. چنین متغیرهایی بدون نیاز به تلاش اضافی زیاد توسط pyperformance پشتیبانی میشوند.
ساختار دایرکتوری بنچمارک
بهطور معمول یک بنچمارک ساختاری به این شکل دارد:
bm_NAME/ data/ # if needed requirements.txt # lock file, if any pyproject.toml run_benchmark.py
(به پیشوند "bm_" در نام دایرکتوری توجه کنید.)
فایل "pyproject.toml" حاوی متادیتا است. فایل "run_benchmark.py" کد واقعی بنچمارک را در خود دارد. هر دو مورد الزامی هستند.
pyperformance با فایل متادیتا به عنوان منبع بنیادین اطلاعات درباره یک بنچمارک رفتار میکند. مانیفست برای یک مجموعه بنچمارک، در عمل یک نگاشت از نامها به فایلهای متادیتا است. بنابراین فایل متادیتا ضروری است. این فایل میتواند در هر کجای دیسک قرار گیرد. با این حال، اگر در ساختاری که در بالا توضیح داده شد قرار نداشته باشد، متادیتا باید مشخص کند که سایر فایلها در کجا قرار دارند.
به غیر از آن، تنها یک اسکریپت بنچمارک (مانند "run_benchmark.py" در بالا) مورد نیاز است. تمام فایلهای دیگر اختیاری هستند.
هنگامی که یک بنچمارک دارای متغیرها (variants) باشد، هر کدام فایل متادیتای اختصاصی خود را در کنار "pyproject.toml" معمولی و با نام "bm_NAME.toml" خواهند داشت. (به پیشوند "bm_" توجه کنید.) قالب فایلهای متادیتای این متغیرها کاملاً یکسان است. pyperformance به همان صورت با آنها رفتار میکند، با این تفاوت که "pyproject.toml" همجوار بهطور پیشفرض به ارث برده میشود..SS فایلهای مانیفست (Manifest Files)
یک فایل مانیفست مجموعهای از بنچمارکها و همچنین (بهطور اختیاری) نحوه گروهبندی آنها را مشخص میکند. pyperformance از مانیفست برای تعیین اینکه کدام بنچمارکها برای اجرا در دسترس هستند (و در نتیجه کدام موارد بهطور پیشفرض اجرا شوند) استفاده میکند.
یک مانیفست معمولاً به این صورت است:
[benchmarks] name metafile bench1 somedir/bm_bench1/pyproject.toml bench2 somedir/pyproject.toml bench3 ../anotherdir
بخش "benchmarks" جدولی با ردیفهایی از مقادیر جداشده با تب (tab-separated-values) است. مقدار "name" نحوه شناسایی بنچمارک توسط pyperformance را تعیین میکند. مقدار "metafile" مکانی است که pyperformance در آن به دنبال متادیتای بنچمارک میگردد. اگر یک metafile یک دایرکتوری باشد، در آن دایرکتوری به دنبال "pyproject.toml" میگردد.
گروههای بنچمارک (Benchmark Groups)
بخشهای دیگر در فایل مانیفست مربوط به گروهبندی هستند:
[benchmarks] name metafile bench1 somedir/bm_bench1 bench2 somedir/bm_bench2 bench3 anotherdir/mybench.toml [groups] tag1 tag2 [group default] bench2 bench3 [group tricky] bench2
بخش "groups" گروههای در دسترسی را مشخص میکند که ممکن است توسط برچسبهای بنچمارک شناسایی شوند (درباره برچسبها در بخش متادیتا در زیر را ببینید). هر بخش گروه دیگری در مانیفست بهطور خودکار به فهرست گروههای موجود اضافه میشود.
اگر هیچ گروه "default" مشخص نشده باشد، گروهی بهطور خودکار با تمام بنچمارکهای موجود در بخش "benchmarks" اضافه میشود. اگر هیچ بخش "groups" و هیچ بخش گروه مجزایی (به جز "default") وجود نداشته باشد، مجموعه تمام برچسبهای بنچمارکهای شناختهشده بهعنوان "groups" در نظر گرفته میشود. همچنین گروهی با نام "all" بهطور خودکار اضافه میشود که شامل تمام بنچمارکهای شناختهشده است.
بنچمارکها میتوانند با استفاده از یک پیشوند - (منها) از یک گروه حذف شوند. هر بنچمارکی که از قبل در فهرست باشد (در آن نقطه) و مطابقت داشته باشد، از فهرست حذف خواهد شد. اگر اولین ورودی در بخش یک حذف (استثنا) باشد، ابتدا تمام بنچمارکهای شناختهشده به فهرست اضافه میشوند و سپس حذف اعمال میگردد.
برای مثال:
[benchmarks] name metafile bench1 somedir/bm_bench1 bench2 somedir/bm_bench2 bench3 anotherdir/mybench.toml [group default] -bench1
این بدان معناست که بهطور پیشفرض تنها "bench2" و "bench3" اجرا میشوند..SS ادغام مانیفستها (Merging Manifests)
برای ترکیب مانیفستها، از بخش [includes] در مانیفست استفاده کنید:
[includes] project1/benchmarks/MANIFEST project2/benchmarks/MANIFEST <default>
توجه داشته باشید که <default> همانند گنجاندن فایل مانیفست برای بنچمارکهای پیشفرض pyperformance است.
مجموعه بنچمارک محلی (A Local Benchmark Suite)
اغلب پروژهها بیش از یک بنچمارک دارند که با آنها به عنوان یک مجموعه رفتار میشود. pyperformance این موضوع را بدون نیاز به هیچ کار اضافی مدیریت میکند.
در دایرکتوری حاوی فایل مانیفست، همه بنچمارکها را قرار دهید. سپس عبارت <local> را در ستون "metafile" بگذارید، مانند این:
[benchmarks] name metafile bench1 <local> bench2 <local> bench3 <local> bench4 <local> bench5 <local>
این ابزار به دنبال DIR/bm_NAME/pyproject.toml خواهد گشت.
اگر متغیرها یا گونهها (variants) نیز وجود دارند، بنچمارک اصلی را در مقدار "metafile" مشخص کنید، مانند این:
[benchmarks] name metafile bench1 <local> bench2 <local> bench3 <local> variant1 <local:bench3> variant2 <local:bench3>
ابزار pyperformance به دنبال DIR/bm_BASE/bm_NAME.toml میگردد، که در آن "BASE" بخش پس از "local:" است.
مجموعه بنچمارک یک پروژه (A Project's Benchmark Suite)
یک پروژه پایتون میتواند مجموعه بنچمارک خود را با قرار دادن مسیر فایل مانیفست در بالاترین سطح فایل pyproject.toml پروژه مشخص کند. مانیفستهای اضافی را نیز میتوان مشخص کرد:
[tool.pyperformance] manifest = "..." manifests = ["...", "..."]
(یادآوری: این pyproject.toml است، نه فایل مانیفست.)
فایلهای فراداده بنچمارک (Benchmark Metadata Files)
فایل فراداده یک بنچمارک (معمولاً pyproject.toml) از قالبی پیروی میکند که در PEP 621 https://www.python.org/dev/peps/pep-0621 و PEP 518 https://www.python.org/dev/peps/pep-0518 مشخص شده است. بنابراین دو بخش پشتیبانیشده در این فایل وجود دارد: "project" و "tool.pyperformance".
یک فایل فراداده معمولی شبیه به این خواهد بود:
[project] version = "0.9.1" dependencies = ["pyperf"] dynamic = ["name"] [tool.pyperformance] name = "my_benchmark"
یک نمونه بسیار دقیقتر و با جزئیات بیشتر میتواند شبیه به این باشد:
[project]
name = "pyperformance_bm_json_dumps"
version = "0.9.1"
description = "A benchmark for json.dumps()"
requires-python = ">=3.8"
dependencies = ["pyperf"]
urls = {repository = "https://github.com/python/pyperformance"}
dynamic = ["version"]
[tool.pyperformance]
name = "json_dumps"
tags = "serialize"
runscript = "bench.py"
datadir = ".data-files/extras"
extra_opts = ["--special"]
برای اینکه یک بنچمارک از دیگری (یا از متادیتای مشترک) ارثبری کند، فیلد "inherits" در دسترس است:
[project] dependencies = ["pyperf"] dynamic = ["name", "version"] [tool.pyperformance] name = "my_benchmark" inherits = "../common.toml"
تمام مقادیر در هر بخش از متادیتای به ارث بردهشده به عنوان پیشفرض در نظر گرفته میشوند که متادیتای کنونی بر روی آنها اعمال میشود. به عنوان نمونه در مثال بالا، مقدار "version" در common.toml در اینجا استفاده خواهد شد.
اگر مقدار "inherits" یک دایرکتوری باشد (حتی برای "..")، فایل "base.toml" در آن دایرکتوری به ارث برده میشود.
برای variantها، فایل پایه pyproject.toml مقدار پیشفرض برای "inherits" است.
مقادیر استنتاجشده (Inferred Values)
در برخی شرایط، مقادیر مشخصنشده از سایر دادههای موجود استنتاج خواهند شد (حتی برای فیلدهای الزامی).
- project.name <= tool.pyperformance.name
- project.* <= متادیتای ارثبریشده (بهجز "name" و "dynamic")
- tool.pyperformance.name <= نام فایل متادیتا
- tool.pyperformance.* <= متادیتای ارثبریشده (بهجز "name" و "inherits")
هنگامی که نام از روی نام فایل برای بنچمارکی با ساختار استاندارد استنتاج میشود، پیشوند "bm_" از دایرکتوری بنچمارک حذف میشود. اگر یک variant باشد، این پیشوند و همچنین پسوند .toml از نام فایل متادیتا حذف میگردد.
بخش [project] (The [project] Section)
| فیلد | نوع | R | T | B | D |
| project.name | str | X | X | ||
| project.version | ver | X | X | X | |
| project.dependencies | [str] | X | |||
| project.dynamic | [str] |
"R": الزامی (required) "T": استنتاجشده از بخش tool "B": استنتاجشده از متادیتای به ارث بردهشده "D": برای بنچمارکهای پیشفرض، استنتاجشده از pyperformance
بر اساس PEP 621 فیلد "dynamic" زمانی الزامی است که مقداری به صورت پویا توسط ابزار پر شود. این موضوع بهویژه برای فیلدهای الزامی حائز اهمیت است.
تمام فیلدهای دیگر PEP 621 اختیاری هستند (مانند requires-python = ">=3.8"، {repository = "https://github.com/..."})..SS بخش [tool.pyperformance]
| فیلد | نوع | R | B | F |
| tool.name | str | X | X | |
| tool.tags | [str] | X | ||
| tool.extra_opts | [str] | X | ||
| tool.inherits | file | |||
| tool.runscript | file | X | ||
| tool.datadir | file | X |
"R": الزامی "B": استنباطشده از فرادادههای به ارثرسیده "F": استنباطشده از نام فایل
- tags: فهرستی اختیاری از نامها برای گروهبندی بنچمارکها
- extra_opts: فهرستی اختیاری از آرگومانها برای ارسال به tool.runscript
- runscript: اسکریپت
بنچمارک
برای
استفاده به
جای run_benchmark.py.
این صفحه بنچمارکهایی را فهرست میکند که در CPython سریعتر شدهاند.
بهینهسازیها (Optimizations)
2016-12-14: افزایش سرعت فراخوانی متدها (speedup method calls)
بهینهسازی: افزایش 1.2 برابری سرعت فراخوانی متدها https://bugs.python.org/issue26110، کامیت f2392133 https://github.com/python/cpython/commit/f2392133eba777f05947a8996c507690b95379c3.
| بنچمارک | 2016-12-01 (27580c1fb5e8) | 2017-01-01 (67e1aa0b58be) |
| call_method | 14.1 ms | 11.2 ms: 1.26x سریعتر (-21%) |
| call_method_slots | 13.9 ms | 11.1 ms: 1.25x سریعتر (-20%) |
| call_method_unknown | 16.0 ms | 14.3 ms: 1.12x سریعتر (-11%) |
2016-04-22: تخصیصدهنده حافظه pymalloc (pymalloc allocator)
بهینهسازی: تابع PyMem_Malloc() اکنون از تخصیصدهنده سریع pymalloc استفاده میکند http://bugs.python.org/issue26249، کامیت f5c4b990 https://github.com/python/cpython/commit/f5c4b99034fae12ac2b9498dd12b5b3f352b90c8.
تغییرات دستکم 5%:
| بنچمارک | 2016-04-21 (5439fc4901db) | 2016-04-22 (f5c4b99034fa) |
| unpickle_list | 10.4 us | 7.64 us: 1.36x سریعتر (-27%) |
| json_dumps | 28.0 ms | 25.2 ms: 1.11x سریعتر (-10%) |
| unpickle_pure_python | 741 us | 678 us: 1.09x سریعتر (-9%) |
| unpickle | 33.9 us | 31.3 us: 1.08x سریعتر (-8%) |
| meteor_contest | 197 ms | 183 ms: 1.08x سریعتر (-7%) |
| mako | 36.9 ms | 34.3 ms: 1.07x سریعتر (-7%) |
| pathlib | 41.0 ms | 38.4 ms: 1.07x سریعتر (-6%) |
| call_method_slots | 14.8 ms | 13.9 ms: 1.07x سریعتر (-6%) |
| telco | 19.5 ms | 18.3 ms: 1.07x سریعتر (-6%) |
| scimark_lu | 413 ms | 388 ms: 1.07x سریعتر (-6%) |
| nqueens | 221 ms | 207 ms: 1.07x سریعتر (-6%) |
| fannkuch | 937 ms | 882 ms: 1.06x سریعتر (-6%) |
| regex_compile | 319 ms | 301 ms: 1.06x سریعتر (-6%) |
| raytrace | 1.16 sec | 1.09 sec: 1.06x سریعتر (-5%) |
| pickle_pure_python | 1.11 ms | 1.05 ms: 1.05x سریعتر (-5%) |
| genshi_text | 70.1 ms | 66.6 ms: 1.05x سریعتر (-5%) |
| 2015-12-07: بهینهسازی ElementTree.iterparse()، xml_etree_iterparse | ||
| بهینهسازی: مورد #25638: بهینهسازی ElementTree.iterparse()؛ اکنون ۲ برابر سریعتر است http://bugs.python.org/issue25638، کامیت 9ec5e25f2 https://github.com/python/cpython/commit/9ec5e25f26a490510bb5da5c26a276cd30a263a0. | ||
| box center; | ||
| l|l|l. | ||
| بنچمارک | 2015-12-01 (df144092a340) | 2016-01-01 (71db90356390) |
| xml_etree_iterparse | 423 ms | 206 ms: 2.05 برابر سریعتر (-51%) |
2015-09-19: استفاده PGO از مجموعهآزمون، pidigits
بهینهسازی: مورد #24915: افزودن پشتیبانی Clang به ساختهای PGO و استفاده از مجموعهآزمون برای دادههای پروفایل http://bugs.python.org/issue24915، کامیت 7188a3ef https://github.com/python/cpython/commit/7188a3efe07b9effdb760f3a96783f250214f0be.
تغییرات دستکم ۵٪:
| بنچمارک | 2015-09-18 (4b363e270108) | 2015-09-18_22-13 (7188a3efe07b) |
| pickle | 33.7 us | 26.4 us: 1.28 برابر سریعتر (-22%) |
| pidigits | 332 ms | 286 ms: 1.16 برابر سریعتر (-14%) |
| pickle_list | 9.90 us | 8.84 us: 1.12 برابر سریعتر (-11%) |
| unpickle | 37.2 us | 33.3 us: 1.12 برابر سریعتر (-11%) |
| unpickle_list | 11.1 us | 9.95 us: 1.11 برابر سریعتر (-10%) |
| regex_dna | 330 ms | 297 ms: 1.11 برابر سریعتر (-10%) |
| regex_effbot | 6.43 ms | 5.80 ms: 1.11 برابر سریعتر (-10%) |
| pickle_dict | 69.3 us | 64.1 us: 1.08 برابر سریعتر (-8%) |
| mako | 39.1 ms | 36.2 ms: 1.08 برابر سریعتر (-7%) |
| call_simple | 12.2 ms | 11.6 ms: 1.05 برابر سریعتر (-5%) |
| genshi_xml | 175 ms | 166 ms: 1.05 برابر سریعتر (-5%) |
تغییرات دستکم ۵٪، متأسفانه دو بنچمارک نیز کندتر شدند:
| بنچمارک | 2015-09-18_14-32-master-4b363e270108 | 2015-09-18_22-13-master-7188a3efe07b |
| unpickle_pure_python | 776 us | 821 us: 1.06 برابر کندتر (+6%) |
| regex_v8 | 49.5 ms | 52.6 ms: 1.06 برابر کندتر (+6%) |
| بهینهسازی: گزارش #16991: افزودن پیادهسازی C برای collections.OrderedDict http://bugs.python.org/issue16991، کامیت 96c6af9b https://github.com/python/cpython/commit/96c6af9b207c188c52ac53ce87bb7f2dea3f328b. | ||
| box center; | ||
| l|l|l. | ||
| بنچمارک | 2015-05-02 (3b4d30a27bd6) | 2015-06-01 (41874c570cf3) |
| html5lib | 285 ms | 233 ms: 1.23 برابر سریعتر (-19%) |
2015-05-23: پیادهسازی C برای functools.lru_cache()، sympy
بهینهسازی: گزارش #14373: افزودن پیادهسازی C برای functools.lru_cache() http://bugs.python.org/issue14373، کامیت 1c858c35 https://github.com/python/cpython/commit/1c858c352b8c11419f79f586334c49378726dba8.
تغییرات دستکم 5%:
| بنچمارک | 2015-05-23_19-15-master-c70908558d8e | 2015-05-23_19-42-master-1c858c352b8c |
| sympy_expand | 1.45 ثانیه | 1.14 ثانیه: 1.27 برابر سریعتر (-21%) |
| sympy_sum | 308 ms | 247 ms: 1.25 برابر سریعتر (-20%) |
| sympy_str | 621 ms | 500 ms: 1.24 برابر سریعتر (-19%) |
| sympy_integrate | 54.2 ms | 45.7 ms: 1.19 برابر سریعتر (-16%) |
| scimark_lu | 497 ms | 471 ms: 1.06 برابر سریعتر (-5%) |
pickle_dict حدود 1.06 برابر کندتر دیده شد، اما از آنجا که pickle از functools.lru_cache() استفاده نمیکند، این تغییر در جدول نادیده گرفته شده است..SS افت سرعت (Slowdown)
2016-09-11: regex_compile
افت سرعت: تبدیل پرچمهای re به ثابتهای (بسیار کاربرپسندتر) IntFlag (مورد #28082) http://bugs.python.org/issue28082، کامیت f93395bc https://github.com/python/cpython/commit/f93395bc5125c99539597bf134ca8bcf9707655b.
| بنچمارک | 2016-04-01 (6b6abd4cf10e) | 2016-07-01 (355048970b2a) | 2016-10-01 (78a111c7d867) |
| regex_compile | 339 ms | 309 ms: 1.10x سریعتر (-9%) | 383 ms: 1.13x کندتر (+13%) |
روند زمانی (Timeline)
آوریل ۲۰۱۶ -> مه ۲۰۱۶
2016-04-01 .. 2016-05-01:
| بنچمارک | 2016-04-01 (dcfebb32e277) | 2016-05-01 (f1e2671fdf88) |
| nqueens | 255 ms | 207 ms: 1.23x سریعتر (-19%) |
| raytrace | 1.31 sec | 1.09 sec: 1.19x سریعتر (-16%) |
| float | 290 ms | 243 ms: 1.19x سریعتر (-16%) |
| chaos | 273 ms | 235 ms: 1.16x سریعتر (-14%) |
| hexiom | 21.0 ms | 18.6 ms: 1.13x سریعتر (-11%) |
| deltablue | 16.4 ms | 14.6 ms: 1.12x سریعتر (-11%) |
| go | 557 ms | 502 ms: 1.11x سریعتر (-10%) |
| nbody | 254 ms | 232 ms: 1.10x سریعتر (-9%) |
| خط زمانی 2016-04-01 .. 2017-01-01: | ||
| box center; | ||
| l|l|l|l|l. | ||
| بنچمارک | 2016-04-01 (6b6abd4cf10e) | 2016-07-01 (355048970b2a) |
| 2016-10-01 (78a111c7d867) | ||
| T} | 2017-01-01 (67e1aa0b58be) | |
| call_method | 15.8 ms | 14.9 ms: 1.06 برابر سریعتر (-6%) |
| 14.1 ms: 1.13 برابر سریعتر (-11%) | ||
| T} | 11.2 ms: 1.42 برابر سریعتر (-29%) | |
| call_method_slots | 15.7 ms | 15.2 ms: 1.03 برابر سریعتر (-3%) |
| 14.0 ms: 1.13 برابر سریعتر (-11%) | ||
| T} | 11.1 ms: 1.42 برابر سریعتر (-29%) | |
| call_method_unknown | 17.7 ms | 15.9 ms: 1.11 برابر سریعتر (-10%) |
| 15.6 ms: 1.13 برابر سریعتر (-11%) | ||
| T} | 14.3 ms: 1.23 برابر سریعتر (-19%) |
crypto_pyaes
| بنچمارک | 2016-04-01 (master) | 2016-05-01 (master) |
| crypto_pyaes | 226 ms | 205 ms: 1.10 برابر سریعتر (-9%) |
2016-03-01 .. 2016-06-01:
| بنچمارک | 2016-03-01 (13d09afff127) | 2016-06-01 (d80ab7d94578) |
| crypto_pyaes | 231 ms | 199 ms: 1.16 برابر سریعتر (-14%) |
| پیشرفت طی ۲۱ ماه، 2015-01-01 .. 2016-10-01: | ||
| box center; | ||
| l|l|l. | ||
| بنچمارک | 2015-01-01 (52074ac866eb) | 2016-10-01 (78a111c7d867) |
| json_loads | 64.0 us | 56.6 us: 1.13 برابر سریعتر (-11%) |
logging_silent
| بنچمارک | 2016-01-01 (899b72cee21c) | 2016-07-01 (355048970b2a) |
| logging_silent | 718 ns | 606 ns: 1.18 برابر سریعتر (-16%) |
pickle
pickle، 2016-08-02 .. 2016-09-08:
| بنچمارک | 2016-08-02 (133138a284be) | 2016-09-08 (10427f44852b) |
| pickle | 25.5 us | 21.4 us: 1.19 برابر سریعتر (-16%) |
pickle روی dict/list:
| بنچمارک | 2016-04-01 (6b6abd4cf10e) | 2016-10-01 (78a111c7d867) |
| pickle_dict | 64.5 us | 57.7 us: 1.12 برابر سریعتر (-11%) |
| pickle_list | 9.06 us | 7.79 us: 1.16 برابر سریعتر (-14%) |
unpickle:
| بنچمارک | 2015-07-01 (d7982beca93c) | 2015-10-01 (30b7138fe12b) |
| unpickle | 36.9 us | 32.8 us: 1.13 برابر سریعتر (-11%) |
| 2015-04-01 .. 2015-10-01: | ||
| box center; | ||
| l|l|l. | ||
| بنچمارک | 2015-04-01 (4fd929b43121) | 2015-10-01 (30b7138fe12b) |
| python_startup | 16.4 ms | 17.2 ms: 1.05 برابر کندتر (+5%) |
| python_startup_no_site | 8.65 ms | 8.90 ms: 1.03 برابر کندتر (+3%) |
2016-04-01 .. 2017-01-01:
| بنچمارک | 2016-04-01 (6b6abd4cf10e) | 2017-01-01 (67e1aa0b58be) |
| python_startup | 17.3 ms | 14.5 ms: 1.20 برابر سریعتر (-16%) |
| python_startup_no_site | 8.89 ms | 8.39 ms: 1.06 برابر سریعتر (-6%) |
regex_compile
| بنچمارک | 2016-04-01 (6b6abd4cf10e) | 2016-07-01 (355048970b2a) | 2016-10-01 (78a111c7d867) |
| regex_compile | 339 ms | 309 ms: 1.10 برابر سریعتر (-9%) | 383 ms: 1.13 برابر کندتر (+13%) |
| box center; | |||
| l|l|l|l|l|l. | |||
| بنچمارک | 2016-01-01 (899b72cee21c) | 2016-04-01 (6b6abd4cf10e) | 2016-07-01 (355048970b2a) |
| 2016-10-01 (78a111c7d867) | |||
| T} | 2017-03-31 (cdcac039fb44) | ||
| telco | 19.6 ms | 19.2 ms: 1.02x سریعتر (-2%) | 18.3 ms: 1.08x سریعتر (-7%) |
| 15.1 ms: 1.30x سریعتر (-23%) | |||
| T} | 13.9 ms: 1.41x سریعتر (-29%) |
scimark
2016-10-01 .. 2017-03-31:
| بنچمارک | 2016-10-01 (78a111c7d867) | 2017-01-01 (67e1aa0b58be) | 2017-03-31 (cdcac039fb44) |
| scimark_lu | 423 ms | 378 ms: 1.12x سریعتر (-11%) | 318 ms: 1.33x سریعتر (-25%) |
| scimark_sor | 426 ms | 403 ms: 1.06x سریعتر (-5%) | 375 ms: 1.14x سریعتر (-12%) |
sqlalchemy_declarative
| بنچمارک | 2014-10-01 (5a789f7eaf81) | 2015-10-01 (30b7138fe12b) |
| sqlalchemy_declarative | 345 ms | 301 ms: 1.15x سریعتر (-13%) |
| 2016-04-01 .. 2016-10-01: | ||
| box center; | ||
| l|l|l|l. | ||
| معیارسنجی | 2016-04-01 (6b6abd4cf10e) | 2016-07-01 (355048970b2a) |
| 2016-10-01 (78a111c7d867) | ||
| T} | ||
| sympy_expand | 1.10 ثانیه | 1.01 ثانیه: 1.09 برابر سریعتر (-8%) |
| 942 میلیثانیه: 1.17 برابر سریعتر (-14%) | ||
| T} | ||
| sympy_integrate | 46.6 میلیثانیه | 42.9 میلیثانیه: 1.09 برابر سریعتر (-8%) |
| 41.2 میلیثانیه: 1.13 برابر سریعتر (-11%) | ||
| T} | ||
| sympy_sum | 247 میلیثانیه | 233 میلیثانیه: 1.06 برابر سریعتر (-6%) |
| 199 میلیثانیه: 1.24 برابر سریعتر (-19%) | ||
| T} | ||
| sympy_str | 483 میلیثانیه | 454 میلیثانیه: 1.07 برابر سریعتر (-6%) |
| 427 میلیثانیه: 1.13 برابر سریعتر (-12%) | ||
| T} |
xml_etree_generate
| معیارسنجی | 2015-04-01 (4fd929b43121) | 2015-07-01 (d7982beca93c) | 2015-10-01 (30b7138fe12b) | 2016-01-01 (899b72cee21c) | 2016-07-01 (355048970b2a) |
| xml_etree_generate | 282 میلیثانیه | 267 میلیثانیه: 1.06 برابر سریعتر (-5%) | 256 میلیثانیه: 1.10 برابر سریعتر (-9%) | 237 میلیثانیه: 1.19 برابر سریعتر (-16%) | 212 میلیثانیه: 1.33 برابر سریعتر (-25%) |
| "تغییرات (CHANGELOG)" | |||||
| "نسخه 1.14.0" | |||||
| 0.0 | |||||
| • 2 | |||||
| ارتقای pyperf به 2.10.0 | |||||
| • 2 | |||||
| افزودن بنچمارک ماژول base64 (شامل b64، b32، b16، a85، b85) | |||||
| • 2 | |||||
| افزودن بنچمارک FastAPI HTTP | |||||
| • 2 | |||||
| افزودن بنچمارک تجزیه YAML | |||||
| • 2 | |||||
| رعایت تنظیم rigorous در فایلهای پیکربندی بنچمارک | |||||
| 168u | |||||
| "نسخه 1.13.0 (2025-10-27)" | |||||
| 0.0 | |||||
| • 2 | |||||
| فعالسازی مجدد بنچمارک xdsl | |||||
| • 2 | |||||
| حذف کد مربوط به Python 3.7 و نسخههای پیشین | |||||
| • 2 | |||||
| بهروزرسانیهای CI: | |||||
| * رفع اشکال گردشکار ubuntu-latest | |||||
| * حذف پیکربندی استفادهنشده Azure Pipelines | |||||
| * بهروزرسانی نسخه checkout | |||||
| * راهاندازی dependabot | |||||
| * بهروزرسانی نسخه setup-python | |||||
| 168u | |||||
| "نسخه 1.12.0 (2025-10-24)" | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن بنچمارک xdsl (اما بهدلیل یک رگرسیون، بهصورت پیشفرض غیرفعال است) | |||||
| • 2 | |||||
| افزودن شبیهسازی nbody جدید با quadtree با استفاده از الگوریتم Barnes Hut | |||||
| • 2 | |||||
| افزودن بنچمارک argparse | |||||
| • 2 | |||||
| افزودن بنچمارکهای NetworkX | |||||
| • 2 | |||||
| افزودن بنچمارک Sphinx | |||||
| • 2 | |||||
| افزودن بنچمارک ماژول decimal | |||||
| • 2 | |||||
| افزودن بنچمارک توکنایزر BPE | |||||
| • 2 | |||||
| صرفنظر از بنچمارک dask در Windows برای Python 3.13 | |||||
| • 2 | |||||
| ارتقای dask[distributed] به 2024.10.1 جهت سازگاری با Windows | |||||
| • 2 | |||||
| ارتقای greenlet به 3.2.4 جهت سازگاری با +3.13 | |||||
| • 2 | |||||
| ارتقای Chameleon به 4.6.0 | |||||
| • 2 | |||||
| ارتقای tornado به 6.5.0 | |||||
| • 2 | |||||
| ارتقای pyperf به 2.9.0 | |||||
| • 2 | |||||
| ارتقای sqlglot به V2 | |||||
| • 2 | |||||
| ارتقای mypy به 1.18.2 | |||||
| • 2 | |||||
| رفع اشکال در بررسی حالت editable | |||||
| • 2 | |||||
| رفع اشکال مدیریت --same-loops | |||||
| • 2 | |||||
| رفع اشکال: ارسال پرچمهای --warmup و --timeout به pyperf | |||||
| • 2 | |||||
| افزودن آرگومان خط فرمانی -V/--version | |||||
| • 2 | |||||
| افزودن آرگومان خط فرمانی --hook | |||||
| • 2 | |||||
| اجرای قالببندی و بررسی ruff تحت pre-commit و GitHub Actions | |||||
| • 2 | |||||
| افزودن پشتیبانی از ساختهای آزمایشی JIT | |||||
| • 2 | |||||
| افزودن CI برای Arm64 | |||||
| • 2 | |||||
| افزودن CI برای Free-threading | |||||
| • 2 | |||||
| تبدیل Windows به پلتفرم غیرازمایشی در CI | |||||
| • 2 | |||||
| افزودن پشتیبانی از Python 3.14 و حذف پشتیبانی از Python 3.7، 3.8، 3.9 | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن گزینهٔ --same-loops به دستور run برای استفاده از دقیقاً همان تعداد | |||||
| حلقههای اجرای پیشین (بدون کالیبراسیون مجدد). | |||||
| • 2 | |||||
| ارتقای pyperf به 2.6.3 | |||||
| • 2 | |||||
| اصلاح بنچمارک django_template جهت سازگاری با 3.13 | |||||
| • 2 | |||||
| اصلاح benchmark.conf.sample | |||||
| 168u | |||||
| نسخه 1.10.0 (2023-10-22) | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن بنچمارک برای asyncio_webockets | |||||
| • 2 | |||||
| ارائهٔ گزینهٔ --min-time از pyperf در رابط خط فرمان (CLI) ابزار pyperformance | |||||
| • 2 | |||||
| ارتقای coverage به 7.3.2 جهت سازگاری با 3.13 | |||||
| • 2 | |||||
| ارتقای greenlet به 3.0.0rc3 جهت سازگاری با 3.13 | |||||
| 168u | |||||
| نسخه 1.0.9 (2023-06-14) | |||||
| 0.0 | |||||
| • 2 | |||||
| گنجاندن مستقیم (Vendor) بستهٔ lib2to3 برای Python 3.13+ | |||||
| • 2 | |||||
| افزودن گونههای TaskGroups به بنچمارکهای async_tree | |||||
| 168u | |||||
| نسخه 1.0.8 (2023-06-02) | |||||
| 0.0 | |||||
| • 2 | |||||
| انتقال فایل اصلی requirements.txt به pyperformance/requirements | |||||
| تا dependabot تنها روی همان یک فایل اجرا شود | |||||
| • 2 | |||||
| بهروزرسانی وابستگیهای بنچمارکها جهت عدم تعیین setuptools | |||||
| • 2 | |||||
| در نسخههای قدیمیتر Python، نادیده گرفتن بنچمارکهایی که از قابلیتهای | |||||
| معرفیشده در نسخههای جدیدتر Python استفاده میکنند | |||||
| • 2 | |||||
| پشتیبانی از --inherit-environ هنگام استفادهٔ مجدد از یک venv | |||||
| • 2 | |||||
| استفاده از tomllib/tomli به جای toml | |||||
| • 2 | |||||
| بهروزرسانی MANIFEST.in جهت گنجاندن فایلهای گواهی برای بنچمارک asyncio_tcp_ssl | |||||
| • 2 | |||||
| رفع مشکل متغیر تعریفنشده هنگام ایجاد خطای VenvPipInstallFailedError | |||||
| • 2 | |||||
| افزودن پیکربندی mypy؛ اجرای mypy در CI | |||||
| • 2 | |||||
| اصلاح غلط املایی str.partition در _pyproject_toml.py | |||||
| • 2 | |||||
| افزودن نسخهای از بنچمارک Richards که از super() استفاده میکند | |||||
| • 2 | |||||
| افزودن یک بنچمارک برای پروتکلهای runtime-checkable | |||||
| • 2 | |||||
| گسترش بنچمارکهای async tree جهت پوشش اجرای مشتاقانهٔ (eager) وظایف | |||||
| 168u | |||||
| نسخه 1.0.7 (2023-04-22) | |||||
| 0.0 | |||||
| • 2 | |||||
| ارتقای pyperf از 2.5.0 به 2.6.0 | |||||
| • 2 | |||||
| پاکسازی importهای بدون استفاده و سایر جزئیات کوچک کد | |||||
| • 2 | |||||
| مهاجرت به پروژهٔ مبتنی بر pyproject.toml | |||||
| • 2 | |||||
| اصلاح بنچمارک django_template به دلیل عدم وجود distutils | |||||
| • 2 | |||||
| افزودن بنچمارک برای toml | |||||
| • 2 | |||||
| افزودن بنچمارک برای comprehensions | |||||
| • 2 | |||||
| افزودن بنچمارک برای asyncio_tcp_ssl | |||||
| • 2 | |||||
| افزودن بنچمارک برای asyncio_tcp | |||||
| • 2 | |||||
| افزودن بنچمارک برای زمانبند Dask | |||||
| • 2 | |||||
| افزودن بنچمارکهای gc به فایل MANIFEST | |||||
| 0.0 | |||||
| • 2 | |||||
| ارتقای pyperf از 2.4.1 به 2.5.0 | |||||
| • 2 | |||||
| افزودن یک بنچمارک برای اندازهگیری پیمایش gc | |||||
| • 2 | |||||
| افزودن فیلد jobs در بخش compile جهت تعیین پارامتر make -j | |||||
| • 2 | |||||
| افزودن بنچمارک برای Docutils | |||||
| • 2 | |||||
| افزودن بنچمارک async_generators | |||||
| • 2 | |||||
| افزودن بنچمارک برای IPC | |||||
| • 2 | |||||
| رفع اشکال Manifest Group | |||||
| • 2 | |||||
| رفع اشکال نصب بیلد توسعه pyperformance درون compile/compile_all | |||||
| • 2 | |||||
| بارگذاری نتایج در هر حالت، حتی در صورت شکست برخی از بنچمارکها | |||||
| • 2 | |||||
| افزودن بنچمارکهای sqlglot | |||||
| • 2 | |||||
| پشتیبانی از گزارش میانگین هندسی بر اساس برچسبها (tags) | |||||
| • 2 | |||||
| امکان تعیین فایلهای محلی wheel و sdist به عنوان وابستگی | |||||
| • 2 | |||||
| افزودن یک بنچمارک بر پایه python -m pprint | |||||
| • 2 | |||||
| بازگرداندن mdp به گروه پیشفرض | |||||
| • 2 | |||||
| افزودن بنچمارک coroutines | |||||
| • 2 | |||||
| کاهش نویز در بنچمارک generators | |||||
| • 2 | |||||
| افزودن بنچمارک برای deepcopy | |||||
| • 2 | |||||
| افزودن بنچمارک coverage | |||||
| • 2 | |||||
| افزودن بنچمارک generators | |||||
| • 2 | |||||
| افزودن بنچمارک برای بارهای کاری درخت ناهمگام (async tree) | |||||
| • 2 | |||||
| پشتیبانی از مسیرهای نسبی به فایلهای manifest | |||||
| • 2 | |||||
| افزودن پشتیبانی از چندین گروه بنچمارک در یک manifest | |||||
| • 2 | |||||
| رفع اشکال --inherit-environ | |||||
| • 2 | |||||
| استفاده از نسخه فعال Genshi 0.7.7 | |||||
| 168u | |||||
| نسخه 1.0.4 (2022-01-25) | |||||
| 0.0 | |||||
| • 2 | |||||
| انتشار مجدد پشتیبانی از بنچمارک تعریفشده توسط کاربر پس از رفع اشکال در محیطهای مجازی. | |||||
| 168u | |||||
| نسخه 1.0.3 (2021-12-20) | |||||
| 0.0 | |||||
| • 2 | |||||
| پشتیبانی از مجموعههای بنچمارک تعریفشده توسط کاربر. | |||||
| 168u | |||||
| نسخه 1.0.2 (2021-05-11) | |||||
| 0.0 | |||||
| • 2 | |||||
| غیرفعالسازی موقت بنچمارک henshi به دلیل عدم سازگاری با Python 3.11. | |||||
| • 2 | |||||
| فعالسازی مجدد بنچمارک html5lib: نسخه 1.1 html5lib منتشر شده است. | |||||
| • 2 | |||||
| بهروزرسانی پیشنیازها. | |||||
| • 2 | |||||
| جایگزینی Travis CI با GitHub Actions. | |||||
| • 2 | |||||
| شاخه توسعه master به main تغییر نام داد. | |||||
| برای بررسی دلایل، به https://sfconservancy.org/news/2020/jun/23/gitbranchname مراجعه کنید. | |||||
| 168u | |||||
| نسخه 1.0.1 (2020-03-26) | |||||
| 0.0 | |||||
| • 2 | |||||
| حذف استفاده از ماژول six با توجه به توقف پشتیبانی از Python 2. | |||||
| حذف کدهای مختص به Python 2. | |||||
| • 2 | |||||
| بهروزرسانی وابستگیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| django: 3.0 => 3.0.4 | |||||
| • 2 | |||||
| dulwich: 0.19.14 => 0.19.15 | |||||
| • 2 | |||||
| mako: 1.1.0 = > 1.1.2 | |||||
| • 2 | |||||
| mercurial: 5.1.1 => 5.3.1 | |||||
| • 2 | |||||
| psutil: 5.6.7 => 5.7.0 | |||||
| • 2 | |||||
| pyperf: 1.7.0 => 2.0.0 | |||||
| • 2 | |||||
| sqlalchemy: 1.3.12 => 1.3.15 | |||||
| • 2 | |||||
| sympy: 1.5 => 1.5.1 | |||||
| • 2 | |||||
| tornado: 6.0.3 => 6.0.4 | |||||
| 168u | |||||
| • 2 | |||||
| حذف پیشنیازهای six ،html5lib و mercurial. | |||||
| • 2 | |||||
| اکنون از pip-tools (pip-compile) برای بهروزرسانی وابستگیها استفاده میشود | |||||
| 0.0 | |||||
| • 2 | |||||
| فعالسازی بنچمارکهای pyflate در Python 3. | |||||
| • 2 | |||||
| حذف بنچمارک spambayes: با Python 3 سازگار نیست. | |||||
| • 2 | |||||
| حذف گروه بنچمارک 2n3. | |||||
| • 2 | |||||
| قطع پشتیبانی از Python 2.7: نسخههای قدیمی Django و Tornado با | |||||
| Python 3.9 پیشرو سازگار نیستند. | |||||
| • 2 | |||||
| غیرفعالسازی موقت بنچمارک html5lib، زیرا دیگر با | |||||
| Python 3.9 سازگار نیست. | |||||
| • 2 | |||||
| بهروزرسانی نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Django: 1.11.22 => 3.0 | |||||
| • 2 | |||||
| Mako: 1.0.14 => 1.1.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.3.6 => 1.3.12 | |||||
| • 2 | |||||
| certifi: 2019.6.16 => 2019.11.28 | |||||
| • 2 | |||||
| docutils: 0.15.1 => 0.15.2 | |||||
| • 2 | |||||
| dulwich: 0.19.11 => 0.19.14 | |||||
| • 2 | |||||
| mercurial: 5.0.2 => 5.1.1 | |||||
| • 2 | |||||
| psutil: 5.6. => 5.6.7 | |||||
| • 2 | |||||
| pyperf: 1.6.1 => 1.7.0 | |||||
| • 2 | |||||
| six: 1.12. => 1.13.0 | |||||
| • 2 | |||||
| sympy: 1.4 => 1.5 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.9.1 (2019-07-29) | |||||
| 0.0 | |||||
| • 2 | |||||
| فعالسازی hg_startup در Python 3 | |||||
| • 2 | |||||
| رفع مشکل سازگاری با Python 3.8 beta 2 | |||||
| • 2 | |||||
| بهروزرسانی نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| certifi: 2019.3.9 => 2019.6.16 | |||||
| • 2 | |||||
| Chameleon: 3.6.1 => 3.6.2 | |||||
| • 2 | |||||
| Django: 1.11.20 => 1.11.22 | |||||
| • 2 | |||||
| docutils: 0.14 => 0.15.1.post1 | |||||
| • 2 | |||||
| Mako: 1.0.10 => 1.0.14 | |||||
| • 2 | |||||
| mercurial: 5.0 => 5.0.2 | |||||
| • 2 | |||||
| pathlib2: 2.3.3 => 2.3.4 | |||||
| • 2 | |||||
| psutil: 5.6.2 => 5.6.3 | |||||
| • 2 | |||||
| SQLAlchemy: 1.3.4 => 1.3.6 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.9.0 (2019-05-29) | |||||
| 0.0 | |||||
| • 2 | |||||
| تغییر نام پروژه از "performance" به "pyperformance" | |||||
| • 2 | |||||
| ارتقای pyperf از نسخه 1.6.0 به 1.6.1. پروژه از | |||||
| "perf" به "pyperf" تغییر نام یافته است. بهروزرسانی importها. | |||||
| • 2 | |||||
| گزارش #54: بهروزرسانی Genshi به 0.7.3. اکنون با Python 3.8 سازگار است. | |||||
| • 2 | |||||
| بهروزرسانی نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Mako: 1.0.9= > 1.0.10 | |||||
| • 2 | |||||
| SQLAlchemy: 1.3.3 => 1.3.4 | |||||
| 168u | |||||
| 0.0 | |||||
| • 2 | |||||
| دستور compile: افزودن گزینه "pkg_only" به benchmark.conf. | |||||
| افزودن پشتیبانی از کتابخانههای بومی که نصب شدهاند اما در path قرار ندارند. | |||||
| وصله توسط Robert Grimm. | |||||
| • 2 | |||||
| بهروزرسانی پیکربندی Travis: استفاده از تصویر trusty، استفاده از کَش pip. | |||||
| وصله توسط Inada Naoki. | |||||
| • 2 | |||||
| ارتقای tornado به 5.1.1. | |||||
| وصله توسط Inada Naoki. | |||||
| • 2 | |||||
| رفع اشکال دستور compile در Mac OS: عدم وجود پسوند برنامه. وصله توسط Anthony Shaw. | |||||
| • 2 | |||||
| بهروزرسانی نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Chameleon: 3.4 => 3.6.1 | |||||
| • 2 | |||||
| Django: 1.11.16 => 1.11.20 | |||||
| • 2 | |||||
| Genshi: 0.7.1 => 0.7.2 | |||||
| • 2 | |||||
| Mako: 1.0.7 => 1.0.9 | |||||
| • 2 | |||||
| MarkupSafe: 1.0 => 1.1.1 | |||||
| • 2 | |||||
| SQLAlchemy: 1.2.12 => 1.3.3 | |||||
| • 2 | |||||
| certifi: 2018.10.15 => 2019.3.9 | |||||
| • 2 | |||||
| dulwich: 0.19.6 => 0.19.11 | |||||
| • 2 | |||||
| mercurial: 4.7.2 => 5.0 | |||||
| • 2 | |||||
| mpmath: 1.0.0 => 1.1.0 | |||||
| • 2 | |||||
| pathlib2: 2.3.2 => 2.3.3 | |||||
| • 2 | |||||
| perf: 1.5.1 => 1.6.0 | |||||
| • 2 | |||||
| psutil: 5.4.7 => 5.6.2 | |||||
| • 2 | |||||
| six: 1.11.0 => 1.12.0 | |||||
| • 2 | |||||
| sympy: 1.3 => 1.4 | |||||
| • 2 | |||||
| tornado: 4.5.3 => 5.1.1 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.7.0 (2018-10-16) | |||||
| 0.0 | |||||
| • 2 | |||||
| python_startup: افزودن گزینه --exit. | |||||
| • 2 | |||||
| بهروزرسانی نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| certifi: 2017.11.5 => 2018.10.15 | |||||
| • 2 | |||||
| Chameleon: 3.2 => 3.4 | |||||
| • 2 | |||||
| Django: 1.11.9 => 1.11.16 | |||||
| • 2 | |||||
| dulwich: 0.18.6 => 0.19.6 | |||||
| • 2 | |||||
| Genshi: 0.7 => 0.7.1 | |||||
| • 2 | |||||
| mercurial: 4.4.2 => 4.7.2 | |||||
| • 2 | |||||
| pathlib2: 2.3.0 => 2.3.2 | |||||
| • 2 | |||||
| psutil: 5.4.3 => 5.4.7 | |||||
| • 2 | |||||
| SQLAlchemy: 1.2.0 => 1.2.12 | |||||
| • 2 | |||||
| sympy: 1.1.1 => 1.3 | |||||
| 168u | |||||
| • 2 | |||||
| رفع اشکال #40 برای pip 10 و جدیدتر: حذف وابستگیهای غیرمستقیم. از وابستگیهای | |||||
| غیرمستقیم برای نصب cffi استفاده میشد، اما Mercurial 4.0 دیگر به | |||||
| cffi وابسته نیست. | |||||
| 0.0 | |||||
| • 2 | |||||
| رفع مشکل inherit-environ: انتشار به فراخوانیهای بازگشتی performance | |||||
| در دستورهای compile و compile_all. | |||||
| • 2 | |||||
| رفع باگ گزینهٔ --track-memory به لطف بهروزرسانی به perf 1.5. | |||||
| • 2 | |||||
| بهروزرسانی پیشنیازها | |||||
| 2.0 | |||||
| • 2 | |||||
| certifi: 2017.4.17 => 2017.11.5 | |||||
| • 2 | |||||
| Chameleon: 3.1 => 3.2 | |||||
| • 2 | |||||
| Django: 1.11.3 => 1.11.9 | |||||
| • 2 | |||||
| docutils: 0.13.1 => 0.14 | |||||
| • 2 | |||||
| dulwich: 0.17.3 => 0.18.6 | |||||
| • 2 | |||||
| html5lib: 0.999999999 => 1.0.1 | |||||
| • 2 | |||||
| Mako: 1.0.6 => 1.0.7 | |||||
| • 2 | |||||
| mercurial: 4.2.2 => 4.4.2 | |||||
| • 2 | |||||
| mpmath: 0.19 => 1.0.0 | |||||
| • 2 | |||||
| perf: 1.4 => 1.5.1 (رفع مشکل گزینهٔ --track-memory) | |||||
| • 2 | |||||
| psutil: 5.2.2 => 5.4.3 | |||||
| • 2 | |||||
| pyaes: 1.6.0 => 1.6.1 | |||||
| • 2 | |||||
| six: 1.10.0 => 1.11.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.11 => 1.2.0 | |||||
| • 2 | |||||
| sympy: 1.0 => 1.1.1 | |||||
| • 2 | |||||
| tornado: 4.5.1 => 4.5.3 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.6.0 (2017-07-06) | |||||
| 0.0 | |||||
| • 2 | |||||
| تغییر warn به warning در bm_logging.py. در Python 3، متد Logger.warn() | |||||
| برای ثبت هشدار منسوخشدگی، warnings.warn() را فراخوانی میکند، بنابراین نسبت به | |||||
| Logger.warning() کندتر است. | |||||
| • 2 | |||||
| افزودن دوبارهٔ مجموعه ریزبنچمارکهای logging_silent. | |||||
| • 2 | |||||
| دستور compile: بهروزرسانی مخزن Git پیش از دریافت revision. | |||||
| • 2 | |||||
| بهروزرسانی پیشنیازها | |||||
| 2.0 | |||||
| • 2 | |||||
| perf: 1.3 => 1.4 (رفع مشکل parse_cpu_list(): حذف نویسههای NUL نیز انجام میشود) | |||||
| • 2 | |||||
| Django: 1.11.1 => 1.11.3 | |||||
| • 2 | |||||
| mercurial: 4.2 => 4.2.2 | |||||
| • 2 | |||||
| pathlib2: 2.2.1 => 2.3.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.10 => 1.1.11 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.5.5 (2017-05-29) | |||||
| 0.0 | |||||
| • 2 | |||||
| در شاخهٔ 2.x در CPython، اکنون compile گزینهٔ --enable-unicode=ucs4 را روی | |||||
| تمام پلتفرمها به اسکریپت configure ارسال میکند، به جز در Windows که به دلیل | |||||
| wchar_t شانزده بیتی از UTF-16 استفاده میکند. | |||||
| • 2 | |||||
| بنچمارک float اکنون از __slots__ در کلاس Point استفاده میکند. | |||||
| • 2 | |||||
| حذف ریزبنچمارکهای زیر. آنها به پروژهٔ pymicrobench https://github.com/vstinner/pymicrobench | |||||
| منتقل شدهاند زیرا بسیار کوتاهاند، نمایندهٔ برنامههای واقعی نیستند و بیش از حد | |||||
| ناپایدارند. | |||||
| 2.0 | |||||
| • 2 | |||||
| مجموعه ریزبنچمارک pybench | |||||
| • 2 | |||||
| call_simple | |||||
| • 2 | |||||
| call_method | |||||
| • 2 | |||||
| call_method_unknown | |||||
| • 2 | |||||
| call_method_slots | |||||
| • 2 | |||||
| logging_silent: مقادیر در PyPy با 2^27 حلقه سریعتر از 1 ns هستند! | |||||
| (و حدود 0.7 us در CPython) | |||||
| 168u | |||||
| • 2 | |||||
| بهروزرسانی پیشنیازها | |||||
| 2.0 | |||||
| • 2 | |||||
| Django: 1.11 => 1.11.1 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.9 => 1.1.10 | |||||
| • 2 | |||||
| certifi: 2017.1.23 => 2017.4.17 | |||||
| • 2 | |||||
| perf: 1.2 => 1.3 | |||||
| • 2 | |||||
| mercurial: 4.1.2 => 4.2 | |||||
| • 2 | |||||
| tornado: 4.4.3 => 4.5.1 | |||||
| 168u | |||||
| 0.0 | |||||
| • 2 | |||||
| ایجاد مستندات جدید در: http://pyperformance.readthedocs.io | |||||
| • 2 | |||||
| افزودن "CPython results, 2017" به مستندات: تغییرات عملکردی چشمگیر، بهینهسازیهای قابلتوجه، خط زمانی، و غیره. | |||||
| • 2 | |||||
| دستور show دیگر نیازی به ساخت یک virtual env ندارد. | |||||
| • 2 | |||||
| افزودن دستورهای جدید: | |||||
| 2.0 | |||||
| • 2 | |||||
| pyperformance compile: کامپایل، نصب و اجرای بنچمارک | |||||
| • 2 | |||||
| pyperformance compile_all: اجرای بنچمارک روی شاخهها و بازبینیهای (revisions) متعدد Python | |||||
| • 2 | |||||
| pyperformance upload: بارگذاری یک فایل JSON در Codespeed | |||||
| 168u | |||||
| • 2 | |||||
| setup.py: افزودن وابستگیها به ماژولهای perf و six. | |||||
| • 2 | |||||
| اکنون bm_xml_etree در صورت غیرفعال بودن صریح شتابدهنده، از "_pure_python" در نامهای بنچمارک استفاده میکند. | |||||
| • 2 | |||||
| ارتقای پیشنیازها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Django: 1.10.6 -> 1.11 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.6 -> 1.1.9 | |||||
| • 2 | |||||
| mercurial: 4.1.1 -> 4.1.2 | |||||
| • 2 | |||||
| perf: 1.1 => 1.2 | |||||
| • 2 | |||||
| psutil: 5.2.1 -> 5.2.2 | |||||
| • 2 | |||||
| tornado: 4.4.2 -> 4.4.3 | |||||
| • 2 | |||||
| webencodings: 0.5 -> 0.5.1 | |||||
| 168u | |||||
| • 2 | |||||
| ابزار perf 1.2 اکنون تعداد مراحل آمادهسازی اولیه (warmups) را روی PyPy کالیبره میکند. | |||||
| • 2 | |||||
| در Python 3.5a0: اجبار به استفاده از pip 7.1.2 و setuptools 18.5: | |||||
| https://sourceforge.net/p/pyparsing/bugs/100 | |||||
| 168u | |||||
| "نسخه 0.5.3 (2017-03-27)" | |||||
| 0.0 | |||||
| • 2 | |||||
| ارتقای Dulwich به 0.17.3 برای پشتیبانی از نسخههای PyPy قدیمیتر از 5.6: | |||||
| ببینید: https://github.com/jelmer/dulwich/issues/509 | |||||
| • 2 | |||||
| رفع هشدارهای ResourceWarning: بستن صریح فایلها و سوکتها. | |||||
| • 2 | |||||
| اسکریپتها: جایگزینی دستورهای Mercurial با دستورهای Git. | |||||
| • 2 | |||||
| ارتقای پیشنیازها: | |||||
| 2.0 | |||||
| • 2 | |||||
| dulwich: 0.17.1 => 0.17.3 | |||||
| • 2 | |||||
| perf: 1.0 => 1.1 | |||||
| • 2 | |||||
| psutil: 5.2.0 => 5.2.1 | |||||
| 168u | |||||
| 168u | |||||
| "نسخه 0.5.2 (2017-03-17)" | |||||
| 0.0 | |||||
| • 2 | |||||
| ارتقای پیشنیازها: | |||||
| 2.0 | |||||
| • 2 | |||||
| certifi: 2016.9.26 => 2017.1.23 | |||||
| • 2 | |||||
| Chameleon: 3.0 => 3.1 | |||||
| • 2 | |||||
| Django: 1.10.5 => 1.10.6 | |||||
| • 2 | |||||
| MarkupSafe: 0.23 => 1.0 | |||||
| • 2 | |||||
| dulwich: 0.16.3 => 0.17.1 | |||||
| • 2 | |||||
| mercurial: 4.0.2 => 4.1.1 | |||||
| • 2 | |||||
| pathlib2: 2.2.0 => 2.2.1 | |||||
| • 2 | |||||
| perf: 0.9.3 => 1.0 | |||||
| • 2 | |||||
| psutil: 5.0.1 => 5.2.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.4 => 1.1.6 | |||||
| 168u | |||||
| 0.0 | |||||
| • 2 | |||||
| اصلاح پشتیبانی از Windows (ارتقای perf از 0.9.0 به 0.9.3) | |||||
| • 2 | |||||
| ارتقای نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Chameleon: 2.25 => 3.0 | |||||
| • 2 | |||||
| Django: 1.10.3 => 1.10.5 | |||||
| • 2 | |||||
| docutils: 0.12 => 0.13.1 | |||||
| • 2 | |||||
| dulwich: 0.15.0 => 0.16.3 | |||||
| • 2 | |||||
| mercurial: 4.0.0 => 4.0.2 | |||||
| • 2 | |||||
| perf: 0.9.0 => 0.9.3 | |||||
| • 2 | |||||
| psutil: 5.0.0 => 5.0.1 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.5.0 (2016-11-16) | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن بنچمارک mdp: نبرد با خسارات و مرتبسازی توپولوژیکی گرهها | |||||
| در یک گراف | |||||
| • 2 | |||||
| گروه بنچمارک default اکنون شامل تمام بنچمارکها بهجز pybench است | |||||
| • 2 | |||||
| در صورت شکست یک بنچمارک، خطا ثبت شده، اجرای بنچمارکهای بعدی | |||||
| ادامه مییابد، اما با کد خطای 1 خارج میشود. | |||||
| • 2 | |||||
| حذف بنچمارکهای منسوخشده: threading_threaded_count و | |||||
| threading_iterative_count. بههرحال امکان اجرای آنها وجود نداشت. | |||||
| • 2 | |||||
| نیازمندی dulwich اکنون اختیاری است زیرا نصب آن روی Windows با شکست مواجه میشود. | |||||
| • 2 | |||||
| ارتقای نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| Mako: 1.0.5 => 1.0.6 | |||||
| • 2 | |||||
| Mercurial: 3.9.2 => 4.0.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.3 => 1.1.4 | |||||
| • 2 | |||||
| backports-abc: 0.4 => 0.5 | |||||
| 168u | |||||
| 168u | |||||
| نسخه 0.4.0 (2016-11-07) | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن بنچمارک sqlalchemy_imperative: بهدرستی ثبت نشده بود | |||||
| • 2 | |||||
| دستور list اکنون تنها بنچمارکهایی را فهرست میکند که دستور run | |||||
| اجرا خواهد کرد. دستور list یک گزینه جدید -b/--benchmarks دریافت میکند. | |||||
| • 2 | |||||
| بازنویسی کدی که محیط مجازی را ایجاد میکند تا pip را بهدرستی بیازماید. | |||||
| دانلود و اجرای get-pip.py در صورت ناموفق بودن نصب pip. | |||||
| • 2 | |||||
| ارتقای نیازمندیها: | |||||
| 2.0 | |||||
| • 2 | |||||
| perf: 0.8.2 => 0.9.0 | |||||
| • 2 | |||||
| Django: 1.10.2 => 1.10.3 | |||||
| • 2 | |||||
| Mako: 1.0.4 => 1.0.5 | |||||
| • 2 | |||||
| psutil: 4.3.1 => 5.0.0 | |||||
| • 2 | |||||
| SQLAlchemy: 1.1.2 => 1.1.3 | |||||
| 168u | |||||
| • 2 | |||||
| حذف وابستگی virtualenv | |||||
| 168u | |||||
| نسخه 0.3.2 (2016-10-19) | |||||
| 0.0 | |||||
| • 2 | |||||
| اصلاح setup.py: گنجاندن performance/benchmarks/data/asyncio.git/ نیز | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن بنچمارک regex_dna | |||||
| • 2 | |||||
| دستور run اکنون در صورتی که هیچ بنچمارکی اجرا نشود با خطا متوقف میشود. | |||||
| • 2 | |||||
| اسکریپتهای genshi، logging، scimark، sympy و xml_etree اکنون بهطور پیشفرض تمام زیر-بنچمارکها را اجرا میکنند | |||||
| • 2 | |||||
| بازنویسی pybench با استفاده از perf: حذف کدهای قدیمی و موروثی برای کالیبرهسازی و اجرای بنچمارکها، استفاده مجدد از API مربوط به perf.Runner. | |||||
| • 2 | |||||
| تغییر روش ابتکاری (heuristic) برای ساخت محیط مجازی؛ دستورهای بررسیشده: | |||||
| 2.0 | |||||
| • 2 | |||||
| python -m venv | |||||
| • 2 | |||||
| python -m virtualenv | |||||
| • 2 | |||||
| virtualenv -p python | |||||
| 168u | |||||
| • 2 | |||||
| فرآیند ساخت محیط مجازی اکنون برای شناسایی "python3 -m venv" که pip را نصب نمیکند، از کارکرد صحیح pip اطمینان حاصل میکند. | |||||
| • 2 | |||||
| ارتقای وابستگی perf از 0.7.12 به 0.8.2: بهروزرسانی تمام بنچمارکها به رابط برنامهنویسی (API) جدید perf 0.8 (که تغییرات ناسازگاری به همراه دارد) | |||||
| • 2 | |||||
| بهروزرسانی SQLAlchemy از 1.1.1 به 1.1.2 | |||||
| 168u | |||||
| "نسخه 0.3.0 (2016-10-11)" | |||||
| بنچمارکهای جدید: | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن crypto_pyaes: بنچمارک پیادهسازی پایتون خالص از رمز قالبی AES در حالت CTR با استفاده از ماژول pyaes (نسخه 1.6.0). افزودن وابستگی pyaes. | |||||
| • 2 | |||||
| افزودن sympy: بنچمارک روی SymPy. افزودن وابستگی scipy. | |||||
| • 2 | |||||
| افزودن بنچمارک scimark | |||||
| • 2 | |||||
| افزودن deltablue: بنچمارک DeltaBlue | |||||
| • 2 | |||||
| افزودن dulwich_log: پیمایش روی کامیتهای مخزن گیت asyncio با استفاده از ماژول Dulwich. افزودن وابستگیهای dulwich (و mpmath). | |||||
| • 2 | |||||
| افزودن pyflate: بنچمارک Pyflate، بازکننده فشردهسازی tar/bzip2 در پایتون خالص | |||||
| • 2 | |||||
| افزودن بنچمارک sqlite_synth: بنچمارک توابع تجمیعی پایتون برای SQLite | |||||
| • 2 | |||||
| افزودن بنچمارک genshi: رندر قالب به XML یا متن ساده با استفاده از ماژول Genshi. افزودن وابستگی Genshi. | |||||
| • 2 | |||||
| افزودن بنچمارکهای sqlalchemy_declarative و sqlalchemy_imperative: بنچمارکهای Declarative و Imperative در SQLAlchemy با استفاده از SQLite. افزودن وابستگی SQLAlchemy. | |||||
| 168u | |||||
| بهبودها: | |||||
| 0.0 | |||||
| • 2 | |||||
| دستور compare اکنون در صورت تفاوت در نسخههای performance با خطا مواجه میشود | |||||
| • 2 | |||||
| nbody: افزودن گزینههای خط فرمان --reference و --iterations. | |||||
| • 2 | |||||
| chaos: افزودن گزینههای خط فرمان --width، --height، --thickness، --filename و --rng-seed | |||||
| • 2 | |||||
| django_template: افزودن گزینه خط فرمان --table-size | |||||
| • 2 | |||||
| json_dumps: افزودن گزینه خط فرمان --cases | |||||
| • 2 | |||||
| pidigits: افزودن گزینه خط فرمان --digits | |||||
| • 2 | |||||
| raytrace: افزودن گزینههای خط فرمان --width، --height و --filename | |||||
| • 2 | |||||
| پورت کردن بنچمارک html5lib به Python 3 | |||||
| • 2 | |||||
| فعالسازی pickle_pure_python و unpickle_pure_python روی Python 3 (کد از پیش با Python 3 سازگار بود) | |||||
| • 2 | |||||
| ساخت محیط مجازی دیگر بهطور پیشفرض متغیرهای محیطی (بهویژه PYTHONPATH) را به ارث نمیبرد: اکنون باید صریحاً از گزینه خط فرمان --inherit-environ استفاده شود. | |||||
| 168u | |||||
| رفع باگها: | |||||
| 0.0 | |||||
| • 2 | |||||
| بنچمارک chaos اکنون در هر نمونه، ماژول random را نیز بازنشانی میکند تا نتایج بنچمارک تکرارپذیرتر باشند | |||||
| • 2 | |||||
| بنچمارکهای Logging اکنون پیش از هر اجرای بنچمارک، جریان درونحافظهای را کوتاه (truncate) میکنند | |||||
| 168u | |||||
| تغییر نام بنچمارکها: | |||||
| 0.0 | |||||
| • 2 | |||||
| تغییر نام بنچمارکها برای دستیابی به نامی یکپارچه میان خط فرمان و نام بنچمارک در فایل JSON. | |||||
| • 2 | |||||
| تغییر نام بنچمارکهای pickle: | |||||
| 2.0 | |||||
| 3.5 | |||||
| 0.0 | |||||
| • 2 | |||||
| slowpickle به pickle_pure_python تبدیل شد | |||||
| • 2 | |||||
| slowunpickle به unpickle_pure_python تبدیل شد | |||||
| • 2 | |||||
| fastpickle به pickle تبدیل شد | |||||
| • 2 | |||||
| fastunpickle به unpickle تبدیل شد | |||||
| 168u | |||||
| 168u | |||||
| 168u | |||||
| 168u | |||||
| 0.0 | |||||
| 3.5 | |||||
| 0.0 | |||||
| • 2 | |||||
| تغییر نام بنچمارکهای ElementTree: جایگزینی پیشوند etree_ با xml_etree_. | |||||
| • 2 | |||||
| تغییر نام hexiom2 به hexiom_level25 و ارسال صریح پارامتر --level=25 | |||||
| • 2 | |||||
| تغییر نام json_load به json_loads | |||||
| • 2 | |||||
| تغییر نام json_dump_v2 به json_dumps (و حذف بنچمارک منسوخشده json_dump) | |||||
| • 2 | |||||
| تغییر نام normal_startup به python_startup، و startup_nosite به python_startup_no_site | |||||
| • 2 | |||||
| تغییر نام threaded_count به threading_threaded_count، تغییر نام iterative_count به threading_iterative_count | |||||
| • 2 | |||||
| تغییر نام بنچمارکهای logging: | |||||
| 2.0 | |||||
| • 2 | |||||
| silent_logging به logging_silent | |||||
| • 2 | |||||
| simple_logging به logging_simple | |||||
| • 2 | |||||
| formatted_logging به logging_format | |||||
| 168u | |||||
| 168u | |||||
| 168u | |||||
| 168u | |||||
| تغییرات جزئی: | |||||
| 0.0 | |||||
| • 2 | |||||
| بهروزرسانی وابستگیها | |||||
| • 2 | |||||
| حذف گزینه خط فرمان خراب --args. | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن دستور جدید show برای نمایش یک فایل بنچمارک | |||||
| • 2 | |||||
| مسئلهٔ #11: نمایش نسخهٔ Python در compare. همچنین نمایش نسخهٔ performance. | |||||
| • 2 | |||||
| مسئلهٔ CPython شماره #26383؛ خروجی csv: ارقام برای زمانبندیهای کوتاهتر از 1 us بریده نمیشوند | |||||
| • 2 | |||||
| دستور compare: استفاده از واحد نمونههای بنچمارک، قالببندی مقادیر در جدول خروجی با استفاده از این واحد | |||||
| • 2 | |||||
| دستور compare: اصلاح خروجی جدول در صورتی که بنچمارکها فقط شامل یک نمونه باشند | |||||
| • 2 | |||||
| حذف گزینههای استفادهنشدهٔ -C/--control_label و -E/--experiment_label | |||||
| • 2 | |||||
| بهروزرسانی وابستگی perf به 0.7.11 برای دسترسی به Benchmark.get_unit() و BenchmarkSuite.get_metadata() | |||||
| 168u | |||||
| نسخه 0.2.1 (2016-09-10) | |||||
| 0.0 | |||||
| • 2 | |||||
| افزودن گزینهٔ --csv به دستور compare | |||||
| • 2 | |||||
| اصلاح قالب خروجی compare -O table | |||||
| • 2 | |||||
| تثبیت وابستگیهای غیرمستقیم در requirements.txt | |||||
| • 2 | |||||
| دستور run: افزودن گزینهٔ --track-memory برای ردیابی حداکثر حافظهٔ مصرفی | |||||
| • 2 | |||||
| بهروزرسانی وابستگی perf به 0.7.8 جهت پشتیبانی از ردیابی حافظه و گزینهٔ خط فرمان جدید --inherit-environ | |||||
| • 2 | |||||
| در صورت شکست دستور virtualenv، تلاش با دستوری دیگر برای ساخت محیط مجازی: مدیریت خطای virtualenv | |||||
| • 2 | |||||
| نخستین دستور برای ارتقای pip به نسخهٔ >= 6.0 اکنون بهجای python -m pip از باینری pip استفاده میکند تا از pip 1.0 که از واسط خط فرمان python -m pip پشتیبانی نمیکند، پشتیبانی شود. | |||||
| • 2 | |||||
| بهروزرسانی Django (1.10.1)، Mercurial (3.9.1) و psutil (4.3.1) | |||||
| • 2 | |||||
| تغییر نام گزینهٔ خط فرمان --inherit_env به --inherit-environ و اصلاح آن | |||||
| 168u | |||||
| نسخه 0.2 (2016-09-01) | |||||
| 0.0 | |||||
| • 2 | |||||
| بهروزرسانی وابستگی Django به 1.10 | |||||
| • 2 | |||||
| بهروزرسانی وابستگی Chameleon به 2.24 | |||||
| • 2 | |||||
| افزودن گزینهٔ خط فرمان --venv | |||||
| • 2 | |||||
| تبدیل بنچمارکهای راهاندازی Python، راهاندازی Mercurial و 2to3 به اسکریپتهای perf (شامل bm_startup.py، bm_hg_startup.py و bm_2to3.py) | |||||
| • 2 | |||||
| ارسال گزینهٔ --affinity به اسکریپتهای perf بهجای استفاده از دستور taskset | |||||
| • 2 | |||||
| قرار دادن نیازمندیهای نصاب و اختیاری بیشتری در performance/requirements.txt | |||||
| • 2 | |||||
| فایلهای کششدهٔ .pyc دیگر پیش از اجرای یک بنچمارک حذف نمیشوند. در صورت نیاز از دستور venv recreate برای بهروزرسانی محیط مجازی استفاده کنید. | |||||
| • 2 | |||||
| گزینهٔ معیوب --track_memory حذف شد. این گزینه پس از رفع مشکل دوباره بازگردانده خواهد شد. | |||||
| • 2 | |||||
| افزودن نسخهٔ performance به فرادادهها | |||||
| • 2 | |||||
| ارتقای وابستگی perf به 0.7.5 برای دریافت Benchmark.update_metadata() | |||||
| 168u | |||||
| نسخه 0.1.2 (2016-08-27) | |||||
| 0.0 | |||||
| • 2 | |||||
| اکنون از Windows پشتیبانی میشود | |||||
| • 2 | |||||
| افزودن دستور جدید venv برای نمایش، ساخت، ساخت مجدد یا حذف محیط مجازی. | |||||
| • 2 | |||||
| اصلاح بنچمارک pybench (بهروزرسانی به رابط برنامهنویسی perf 0.7.4) | |||||
| • 2 | |||||
| اکنون performance تلاش میکند تا ماژول psutil را روی CPython نصب کند تا معیارهای سیستمی بهتری در فرادادهها و سنجاق کردن پردازنده (CPU pinning) در Python 2 فراهم شود. | |||||
| • 2 | |||||
| فرایند ایجاد محیط مجازی اکنون علاوه بر دستور virtualenv، ماژولهای پایتون virtualenv و venv را نیز امتحان میکند. | |||||
| • 2 | |||||
| نسخهٔ در حال توسعهٔ performance اکنون performance را با "pip install -e <path_to_performance>" نصب میکند | |||||
| • 2 | |||||
| نام پروژهٔ GitHub از python/benchmarks به python/performance تغییر یافت. | |||||
| 0.0 | |||||
| • 2 | |||||
| رفع اشکال در ایجاد محیط مجازی (virtual environment) | |||||
| • 2 | |||||
| تغییر نام اسکریپت pybenchmarks به pyperformance | |||||
| • 2 | |||||
| افزودن گزینه خط فرمان -p/--python | |||||
| • 2 | |||||
| افزودن ماژول __main__ برای امکان اجرای: python3 -m performance | |||||
| 168u | |||||
| نسخه 0.1 (2016-08-24) | |||||
| 0.0 | |||||
| • 2 | |||||
| نخستین انتشار پس از تبدیل به ماژول perf و انتقال به GitHub | |||||
| • 2 | |||||
| بنچمارکهای حذفشده | |||||
| 2.0 | |||||
| • 2 | |||||
| django_v2, django_v3 | |||||
| • 2 | |||||
| rietveld | |||||
| • 2 | |||||
| spitfire (و psyco): بسته Spitfire در PyPI موجود نیست | |||||
| • 2 | |||||
| pystone | |||||
| • 2 | |||||
| gcbench | |||||
| • 2 | |||||
| tuple_gc_hell | |||||
| 168u | |||||
| 168u | |||||
| تاریخچه | |||||
| پروژه در اوت ۲۰۱۶ به https://github.com/python/performance منتقل شد. ساختار فایلها بازسازماندهی شد و بنچمارکها وصله شدند تا از ماژول perf برای اجرای بنچمارک در چندین فرایند استفاده کنند. | |||||
| پروژه در دسامبر ۲۰۰۸ توسط Collin Winter و Jeffrey Yasskin برای پروژه Unladen Swallow آغاز شد. این پروژه تا فوریه ۲۰۱۶ در https://hg.python.org/benchmarks میزبانی میشد. | |||||
| سایر بنچمارکهای پایتون: | |||||
| 0.0 | |||||
| • 2 | |||||
| CPython: سامانه speed.python.org https://speed.python.org از pyperf، pyperformance و Codespeed https://github.com/tobami/codespeed (برنامه وب Django) استفاده میکند | |||||
| • 2 | |||||
| PyPy: سامانه speed.pypy.org http://speed.pypy.org از بنچمارکهای PyPy https://bitbucket.org/pypy/benchmarks استفاده میکند | |||||
| • 2 | |||||
| Pyston: ابزار pyston-perf https://github.com/dropbox/pyston-perf و speed.pyston.org http://speed.pyston.org | |||||
| • 2 | |||||
| بنچمارکهای Numba در http://numba.pydata.org/numba-benchmark | |||||
| • 2 | |||||
| Cython: دموها/بنچمارکهای Cython در https://github.com/cython/cython/tree/master/Demos/benchmarks | |||||
| • 2 | |||||
| pythran: ابزار numpy-benchmarks در https://github.com/serge-sans-paille/numpy-benchmarks | |||||
| 168u | |||||
| همچنین فهرست پستی سرعت پایتون (Python speed mailing list) https://mail.python.org/mailman/listinfo/speed و ماژول pyperf پایتون http://pyperf.readthedocs.io (مورد استفاده در pyperformance) را ببینید. | |||||
| ابزار pyperformance هنوز برای PyPy بهینهسازی نشده است: در عوض برای سنجش عملکرد PyPy از پروژه بنچمارکهای PyPy https://foss.heptapod.net/pypy/benchmarks استفاده کنید. | |||||
| تصویر تولیدشده توسط bm_raytrace (ردیابی پرتو در پایتون خالص): | |||||
| [image: Pure Python raytracer] | |||||
| [image] | |||||
| "نویسندگان (AUTHORS)" | |||||
| Victor Stinner | |||||
| "کپیرایت و تکثیر (COPYRIGHT)" | |||||
| 2017, Victor Stinner |
| February 8, 2026 | 1.14.0 |