Подтвердить что ты не робот

Что такое LLVM и как заменить Python VM на LLVM, увеличивая скорость 5x?

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

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

Почему concurrency такая сложная проблема?

Может ли LLVM решить проблему concurrency?

Существуют ли решения, отличные от многоядерных для продвижения оборудования?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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