Отказ от ответственности: я не эксперт по PyPy - в частности, я не понимаю деталей перевода RPython, я только цитирую документы и то, что подслушано в списке рассылки и в блог.
"Задача с интенсивным использованием процессора"? Номинирован на занижение месяца. Я сам не совсем понимаю детали процесса перевода, но даже могу сказать, что каждый из его нескольких этапов анализа и оптимизации выполняет очень сложную работу над большим количеством кода.
- Он начинает нормально работать с кодом Python, например импорт модулей, выполнение определений переменных на уровне модулей, определение функций и классов, применение к ним декораторов и т. д. В какой-то момент, когда должна быть достигнута «достаточная статичность», он останавливает и продолжает фактический процесс перевода.
- Она берет замороженную текущую программу Python в памяти и запускает все это в специальном объектном пространстве, которое имитирует управление потоком, возможные значения переменных и т. Д. По сути, интерпретатор работает символически! Это делается для того, чтобы выполнить вывод типа (все, кроме простого в языке, подобном Python) и дополнительный анализ.
- Результаты преобразуются в низкоуровневый код.
- При желании за этим следует множество оптимизаций (по умолчанию, я полагаю) и комплексное преобразование для поддержки без стеков (по умолчанию, я думаю, отключено).
- Затем он опускает все эти вещи в систему типов, которая соответствует назначенному бэкэнду, генерирует миллионы строк кода (из недавней записи в списке рассылки кажется, что есть по крайней мере 19 файлов .c и по крайней мере один из них содержит по крайней мере, 247 560 строк - чтобы вы имели представление о том порядке, о котором мы говорим).
- Весь этот код скомпилирован с
gcc -O2
или подобным, что, конечно, требует много разборов и проверок, и само по себе будет иметь много проходов для анализа и оптимизации.
Так что да, это чертовски ОГРОМНАЯ задача. Не удивительно, что ваш маленький процессор потерял. Для справки, ребята из PyPy использовали Intel Xeon W3580 (3,33 ГГц), когда тестировал процесс перевода в ноябре 2010 . Они по-прежнему занимали около 76 минут, хотя у них также было 12 ГБ ОЗУ, что приводит к следующей проблеме: Требуется много ОЗУ (2,3 ГБ на 64-битной Ubuntu тогда, не знаю, как цифры переводят в вашу ситуацию). Я почти уверен, что в итоге вы превысили физическую ОЗУ - введите чрезмерный обмен и связанный с ним удар в пах производительности.
Это, в сочетании с тем фактом, что у вас, вероятно, было несколько других программ, работающих на краже процессорного времени и оперативной памяти, на мой взгляд, довольно хорошо объясняет ваш опыт. Перевод PyPy зарезервирован для более мощных компьютеров. Если есть что-то, что может существенно улучшить эти времена, посторонние, как мы, вряд ли найдут это. Я бы оставил это беспокойство разработчикам.