Рекомендации по написанию быстрого кода для JIT PyPy - PullRequest
14 голосов
/ 16 марта 2011

PyTy JIT может заставить код Python выполняться намного быстрее, чем CPython. Существует ли ряд рекомендаций по написанию кода, который может быть лучше оптимизирован компилятором JIT? Например, Cython может скомпилировать некоторый статический код в C ++, и он имеет Guidelines для написания эффективного кода. Есть ли набор хороших практик для PyPy? Я знаю, что в проекте PyPy есть рекомендации по включению подсказок при написании собственных интерпретаторов с поддержкой JIT для других динамических языков, но это не относится к большинству конечных пользователей платформы, которые просто используют интерпретатор. Вопросы, которые меня интересуют, включают:

  1. Упаковка скрипта в функции
  2. Явное удаление переменных
  3. Возможные способы подачи или подсказки переменных типов
  4. Запись циклов определенным образом

1 Ответ

13 голосов
/ 16 марта 2011

PyPy вики на BitBucket имеет раздел на JIT Friendliness . Некоторые посты в блогах предлагают дополнительные советы о том, как сделать код быстрым в PyPy, но AFAIK идея заключается в том, что идиоматический код, который не требует интерпретации / реализации фреймов, должен быть быстрым и является ошибкой, если это не так.

Я знаю, что для 3 могут быть полезны некоторые утверждения assert x> 0 или аналогичные, но я не помню, где я это видел. Я также полагаю, что видел некоторые предложения о рефакторинге условных путей в циклах , относящихся к 4 (правка: похоже, это устарело сейчас).

Вот ветка с некоторым связанным обсуждением . Вы можете проверить, насколько хорошо JIT работает с вашим кодом, с помощью jitviewer , но он несколько продвинутый. Присоединение к #pypy на Freenode поможет вам с jitviewer и вашим конкретным кодом.

...