2010-06-30 5 views
8

N'hésitez pas à me corriger si une partie de ma compréhension est fausse. D'après ce que j'ai compris, les GPU offrent un sous-ensemble des instructions fournies par un CPU normal, mais les exécutent beaucoup plus rapidement. Je sais qu'il existe des moyens d'utiliser les cycles GPU à des fins non graphiques, mais il semble que (en théorie) un langage compilé juste à temps puisse détecter la présence d'un GPU approprié et décharger une partie du travail sur le GPU dans les coulisses sans changement de code.Serait-il possible pour un compilateur JIT d'utiliser GPU pour certaines opérations en coulisses?

Ma compréhension est-elle naïve? Est-ce juste une question de complication et n'a-t-elle pas été faite?

+0

Vous voulez dire JIT comme avec le CLR ou JVM? Bytecodes usage général? DSL comme R? – Stringer

+0

Je pensais au style CLR/JVM, mais je m'intéressais aussi à d'autres réponses. – Davy8

Répondre

8

Ma compréhension est que les GPU offrent un sous-ensemble des instructions qu'une CPU normale fournit, mais les exécute beaucoup plus rapide.

Ce n'est certainement pas aussi simple. Le GPU est adapté principalement au traitement SIMD/vectoriel. Ainsi, même si le potentiel théorique des GPU est aujourd'hui largement supérieur aux processeurs, seuls les programmes pouvant bénéficier des instructions SIMD peuvent être exécutés efficacement sur le GPU. En outre, il y a bien sûr une pénalité de performance lorsque les données doivent être transférées de la CPU au GPU pour y être traitées. Ainsi, pour qu'un compilateur JIT puisse utiliser efficacement le GPU, il doit être capable de détecter du code pouvant être parallélisé pour bénéficier des instructions SIMD, puis de déterminer si le surdébit induit par le transfert de données de la CPU au GPU sera en surpoids par les améliorations de performance.

+0

C'est vrai, j'ai oublié que beaucoup de vitesse GPU vient de la parallélisation avec les GPU modernes ayant des centaines de cœurs (logiques?). Cela réduit l'utilité car très peu d'applications sont configurées pour cela. – Davy8

0

Il est possible d'utiliser le GPU (par exemple un processeur compatible CUDA ou OpenCL) pour accélérer JIT lui-même. L'allocation de registres et la programmation d'instructions pourraient être implémentées efficacement.

Questions connexes