2009-03-29 3 views
26

Google sponsert ein Open-Source-Projekt, um die Geschwindigkeit von Python um das 5-fache zu erhöhen.Was ist LLVM und wie ersetzt Python VM mit LLVM zunehmende Geschwindigkeit 5x?

Unladen-Swallow scheint ein good project plan

Warum ist Gleichzeitigkeit so ein schwieriges Problem zu haben?
Wird LLVM das Concurrency-Problem lösen?
Gibt es andere Lösungen als Multi-Core für die Hardware-Weiterentwicklung?

+2

Das ist keine Frage. Ich sehe mindestens drei, möglicherweise vier. –

+0

Hättest du mich alle getrennten Fragen stellen? Sie sind alle irgendwie verwandt. Sind sie nicht? :) –

+0

"Py3k scheint Memory Footprint-Problem gelöst zu haben (durch die Rückgabe von Iteratoren als Listen); Jetzt, wenn LLVM Geschwindigkeitsproblem löst?" was ist die Frage? Es gibt eine Art implizierte Frage ... aber es ist nicht klar, was es ist. Und ja, hier sind zu viele Fragen in einem! – TofuBeer

Antwort

32

LLVM ist mehrere Dinge zusammen - eine Art virtueller Maschine/optimierender Compiler, kombiniert mit verschiedenen Frontends, die die Eingabe in einer bestimmten Sprache übernehmen und das Ergebnis in einer Zwischensprache ausgeben. Diese Zwischenausgabe kann mit der virtuellen Maschine ausgeführt werden oder zum Generieren einer eigenständigen ausführbaren Datei verwendet werden.

Das Problem mit Nebenläufigkeit ist, dass es, obwohl es für eine lange Zeit in der wissenschaftlichen Datenverarbeitung verwendet wurde, es vor kurzem in Consumer-Apps üblich geworden ist. Während es allgemein bekannt ist, wie man ein wissenschaftliches Berechnungsprogramm programmiert, um eine großartige Leistung zu erzielen, ist es eine völlig andere Sache, einen Mail-Benutzeragenten/ein Textverarbeitungsprogramm zu schreiben, das gut im Nebeneinander arbeiten kann. Außerdem wurden die meisten der aktuellen Betriebssysteme mit einem einzigen Prozessor entwickelt und sind möglicherweise nicht vollständig auf Multicore-Prozessoren vorbereitet. Der Vorteil von LLVM in Bezug auf Gleichzeitigkeit ist, dass Sie eine Zwischenausgabe haben, und wenn in der Zukunft Fortschritte im Nebeneinander bestehen, dann erhalten Sie durch die Aktualisierung Ihres Interpreters sofort diese Vorteile in allen LLVM-kompilierten Programmen. Dies ist nicht so einfach, wenn Sie eine eigenständige ausführbare Datei kompiliert haben. Daher löst LLVM das Nebenläufigkeitsproblem nicht per se, aber es lässt eine Tür für zukünftige Verbesserungen offen.

Sicher gibt es mehr mögliche Fortschritte für die Hardware wie Quantencomputer, Genetikcomputer usw. Aber wir müssen darauf warten, dass sie Wirklichkeit werden.

+3

@Ismael: Ich glaube nicht, dass es eine Frage von wissenschaftlichen vs. nicht-wissenschaftlichen Anwendungen ist. Das eigentliche Problem ist, dass die Unterstützung von Sprache und Betriebssystem für die gleichzeitige Programmierung schlecht ist, und einige Leute sind bereit, härter zu arbeiten, um die schlechte Unterstützung für Nebenläufigkeit zu überwinden. –

+0

@Lott: Ja, du hast Recht. Obwohl es Programme gibt, die mit Gleichzeitigkeit programmieren, sind sie schwer zu verwenden und erfordern einen beträchtlichen Aufwand. – Ismael

17

Der Wechsel zu LLVM selbst löst das Problem der Nebenläufigkeit nicht. Das wird separat gelöst, indem man die Global Interpreter Lock loswird.

Ich bin nicht sicher, wie ich darüber fühle; Ich benutze Threads hauptsächlich, um blockierende E/A zu behandeln, nicht Multicore-Prozessoren zu nutzen (dafür würde ich das Modul multiprocessing verwenden, um separate Prozesse zu erzeugen).

So mag ich die GIL irgendwie; Es macht mein Leben viel einfacher, ohne über komplizierte Synchronisationsprobleme nachzudenken.

+9

Wenn sie die GIL loswerden können, aber sicherstellen, dass alles, was Sie für atomar halten, immer noch atomar ist, dann sollte das im schlimmsten Fall keine Auswirkungen auf Sie haben und könnte in einigen Fällen die Leistung Ihrer Apps verbessern. –

15

LLVM kümmert sich um das Wesentliche der Codegenerierung, so dass sie Psyco auf eine allgemeinere, tragbare, wartbare Weise neu schreiben können. Dies wiederum ermöglicht es ihnen, den CPython-Kern neu zu schreiben, wodurch sie mit alternativen GCs und anderen Dingen experimentieren können, die benötigt werden, um Pythons Unterstützung für die Parallelität zu verbessern.

In anderen Worten, LLVM löst nicht das Problem der Nebenläufigkeit, es befreit nur Ihre Hände, damit Sie es lösen können.