Что такое LLVM и как замена Python VM на LLVM увеличивает скорость в 5 раз? - PullRequest
26 голосов
/ 30 марта 2009

Google спонсирует проект с открытым исходным кодом, чтобы увеличить скорость Python в 5 раз.

Unladen-Swallow , кажется, имеет хороший план проекта

Почему параллелизм - такая сложная проблема?
Собирается ли LLVM решить проблему параллелизма?
Есть ли другие решения, кроме многоядерности, для улучшения аппаратного обеспечения?

Ответы [ 3 ]

31 голосов
/ 30 марта 2009

LLVM - это несколько вещей вместе - разновидность виртуальной машины / оптимизирующего компилятора в сочетании с различными внешними интерфейсами, которые принимают входные данные на определенном языке и выводят результат на промежуточном языке. Этот промежуточный вывод может быть запущен на виртуальной машине или может использоваться для создания отдельного исполняемого файла.

Проблема с параллелизмом заключается в том, что, хотя он долгое время использовался в научных вычислениях, он только недавно стал распространенным в потребительских приложениях. Таким образом, хотя широко известно, как программировать программу научных расчетов для достижения высокой производительности, совершенно другое дело - написать почтовый пользовательский агент / текстовый процессор, который хорошо справляется с параллелизмом. Кроме того, большинство современных ОС разрабатывалось с учетом одного процессора, и они могут быть не полностью подготовлены для многоядерных процессоров.

Преимущество LLVM в отношении параллелизма заключается в том, что у вас есть промежуточный вывод, и если в будущем будут достигнуты успехи в параллелизме, то, обновив свой интерпретатор, вы сразу получите эти преимущества во всех программах, скомпилированных LLVM. Это не так просто, если вы скомпилировали в отдельный исполняемый файл. Таким образом, LLVM не решает проблему параллелизма как таковую, но оставляет открытую дверь для будущих улучшений.

Конечно, есть еще больше возможностей для аппаратного обеспечения, таких как квантовые компьютеры, генетические компьютеры и т. Д. Но мы должны ждать, пока они станут реальностью.

17 голосов
/ 30 марта 2009

Переход на LLVM сам по себе не решает проблему параллелизма. Это решается отдельно, путем избавления от Global Interpreter Lock .

Я не уверен, что я чувствую по этому поводу; Я использую потоки в основном для блокировки ввода-вывода, а не для использования преимуществ многоядерных процессоров (для этого я бы использовал модуль multiprocessing для порождения отдельных процессов).

Так что я вроде как GIL; это делает мою жизнь намного проще, не думая о хитрых проблемах синхронизации.

15 голосов
/ 30 марта 2009

LLVM заботится о тщательности генерации кода, поэтому он позволяет им переписать Psyco более общим, переносимым и обслуживаемым образом. Это, в свою очередь, позволяет им переписать ядро ​​CPython, что позволяет им экспериментировать с альтернативными GC и другими вещами, необходимыми для улучшения поддержки Python для параллелизма.

Другими словами, LLVM не решает проблему параллелизма, он просто высвобождает ваши руки, чтобы ВЫ могли ее решить.

...