Руководящие принципы для написания быстрого кода данных по Джит


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

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

1 ответ:

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

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

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