2010-06-30 11 views
8

Fühlen Sie sich frei, mich zu korrigieren, wenn irgendein Teil meines Verständnisses falsch ist.Wäre es für einen JIT-Compiler möglich, GPU für bestimmte Vorgänge hinter den Kulissen zu verwenden?

Mein Verständnis ist, dass GPUs eine Untermenge der Anweisungen, die eine normale CPU bietet, aber führt sie viel schneller.

Ich weiß, es gibt Möglichkeiten, GPU-Zyklen für nicht-grafische Zwecke zu verwenden, aber es scheint wie (in der Theorie) eine Sprache, die Just In Time kompiliert das Vorhandensein einer geeigneten GPU erkennen und einen Teil der Arbeit auf die GPU hinter den Kulissen ohne Code-Änderung.

Ist mein Verständnis naiv? Ist es nur eine Frage von es ist wirklich kompliziert und wurde es einfach nicht getan?

+0

Sie meinen JIT wie mit der CLR oder JVM? Allzweck-Bytecodes? DSLs wie R? – Stringer

+0

Ich dachte CLR/JVM-Stil, aber auch an anderen Antworten interessiert. – Davy8

Antwort

8

Mein Verständnis ist, dass GPUs eine Teilmenge der Befehle bieten, die eine normale CPU bietet aber führt sie viel schneller.

Es ist definitiv nicht so einfach. Die GPU ist hauptsächlich auf SIMD/Vektorverarbeitung zugeschnitten. Obwohl das theoretische Potenzial von GPUs heute den CPUs weit überlegen ist, können nur Programme, die von SIMD-Befehlen profitieren, effizient auf der GPU ausgeführt werden. Außerdem gibt es natürlich eine Leistungseinbuße, wenn Daten von der CPU zur GPU übertragen werden müssen, um dort verarbeitet zu werden.

Damit ein JIT-Compiler die GPU effizient nutzen kann, muss er Code erkennen können, der parallelisiert werden kann, um von SIMD-Anweisungen zu profitieren, und dann ermitteln, ob der Overhead durch die Übertragung von Daten von der CPU verursacht wird Die GPU wird durch die Leistungsverbesserungen übergewichtet.

+0

Das ist richtig, ich habe vergessen, dass eine Menge GPU-Geschwindigkeit von der Parallelisierung mit modernen Grafikprozessoren mit Hunderten von (logischen?) Kernen kommt. Das reduziert die Nützlichkeit, da nur sehr wenige Apps dafür eingerichtet sind. – Davy8

0

Es ist möglich, eine GPU (z. B. eine CUDA- oder OpenCL-fähige) zu verwenden, um JIT selbst zu beschleunigen. Sowohl die Registerzuweisung als auch die Befehlsplanung könnten effizient implementiert werden.