PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Virginia Tech baut automatischen CUDA -> OpenCL Übersetzer auf Clang Basis


S940
2011-09-25, 00:58:37
Klingt sehr praktisch, Performance passt angeblich auch, fast zu schön um wahr zu sein ^^

The use of graphics processing units (GPUs) in high-performance parallel computing continues to become more prevalent, often as part of a heterogeneous system.

For years, CUDA has been the de facto programming environment for nearly all general-purpose GPU (GPGPU) applications. In spite of this, the framework is available only on NVIDIA GPUs, traditionally requiring reimplementation in other frameworks in order to utilize additional multi- or many-core devices. On the other hand, OpenCL provides an open and vendorneutral programming environment and runtime system. With implementations available for CPUs, GPUs, and other types of accelerators, OpenCL therefore holds the promise of a "write once, run anywhere" ecosystem for heterogeneous computing.

Given the many similarities between CUDA and OpenCL, manually porting a CUDA application to OpenCL is typically straightforward, albeit tedious and error-prone. In response to this issue, we created CU2CL, an automated CUDA-to- OpenCL source-to-source translator that possesses a novel design and clever reuse of the Clang compiler framework.

Currently, the CU2CL translator covers the primary constructs found in CUDA runtime API, and we have successfully translated many applications from the CUDA SDK and Rodinia benchmark suite. The performance of our automatically translated applications via CU2CL is on par with their manually ported countparts. PDF Link:
http://eprints.cs.vt.edu/archive/00001161/01/CU2CL.pdf

Quellink:
http://hgpu.org/?p=5670

Thx@Dresdenboys Blog http://www.planet3dnow.de/vbulletin/images/smilies/wink.gif

Edit:
An der Performance hapert es auf ATi GPUs dann aber doch noch:
Finally, we will support the application of device-specific
optimizations as a backend to our CU2CL translator. Why?
Preliminary results from running CU2CL’s automatically-
translated OpenCL applications in Section V on an AMD
Radeon HD 5870 (rather than an NVIDIA GTX 280) de-
liver mediocre results. Although the AMD GPU has higher
theoretical peak performance than the NVIDIA GTX 280, its
execution times are 0 : 075 s, 15 : 24 s, and 2: 11 s for vectorAdd,
Needleman-Wunsch, and SRAD, respectively. These values
are all at least 50 % worse than the OpenCL run times
on the NVIDIA GPU presented in Table V. So, while we
have enabled the potential to run CUDA GPU codes on any
OpenCL-capable device, it does not mean that the these GPU
codes will perform well without device-specific optimizations,
as shown in [4], [5]. Thus, as long-term future work, CU2CL
Aber immerhin läufts ^^

Senior Sanchez
2011-09-26, 10:23:04
Grundsätzlich ist es ja genau der umgekehrte Weg den NVIDIA mit OpenCL geht, da sie meines Wissens OpenCL einfach intern in CUDA-Aufrufe übersetzen. Clang setzen sie dafür aber wohl nicht ein.

Ich finde es eine gute Sache, aber solange die Performance nicht stimmt, ist es IMO nutzlos.

deekey777
2011-09-26, 10:53:17
Grundsätzlich ist es ja genau der umgekehrte Weg den NVIDIA mit OpenCL geht, da sie meines Wissens OpenCL einfach intern in CUDA-Aufrufe übersetzen. Clang setzen sie dafür aber wohl nicht ein.

Ich finde es eine gute Sache, aber solange die Performance nicht stimmt, ist es IMO nutzlos.
Sie übersetzen nicht OpenCL in Cuda-Aufrufe, der JIT-Complier übersetzt den OpenCL-Code in PTX, genau wie er C for Cuda in PTX übersetzt.

Senior Sanchez
2011-09-26, 11:41:52
Sie übersetzen nicht OpenCL in Cuda-Aufrufe, der JIT-Complier übersetzt den OpenCL-Code in PTX, genau wie er C for Cuda in PTX übersetzt.

Du scheinst Recht zu haben. Da hatte ich das irgendwie falsch in meiner Erinnerung.

Nighthawk13
2011-09-26, 15:49:33
These values
are all at least 50 % worse than the OpenCL run times
on the NVIDIA GPU presented in Table V
Für einen fairen Vergleich wäre die Frage, wie schnell man die Samples überhaupt auf der 5870 zum Laufen bekommt(manuell in OpenCL optimiert).
Dann kann man sagen, wieviel das automatische Übersetzer-Tool davon schafft.

Evtl. liegt es ja gar nicht am Tool sondern an der Hardware/OpenCL-Treiber.

Die automatische Cuda-Übersetzung dürfte mit der nächsten ATI-Generation(GraphicCoreNext) nochmals interessanter werden, weil die Architektur doch näher an Fermi dran ist(keine Clauses/VLIW mehr z.B.).

Gipsel
2011-09-26, 19:02:49
Für einen fairen Vergleich wäre die Frage, wie schnell man die Samples überhaupt auf der 5870 zum Laufen bekommt(manuell in OpenCL optimiert).
Dann kann man sagen, wieviel das automatische Übersetzer-Tool davon schafft.Diese Frage wird auf Seite 8 beantwortet:
Anecdotally, while it took a typical computer science graduate student three weeks to manually translate the three above codes from CUDA to OpenCL, our robust CU2CL prototype automatically translated these three programs in 2:59 + 2:71 + 2:71 = 8:01 seconds, as noted in Table IV.
Tabelle VI auf der gleichen Seite gibt auch Auskunft, wie viele Zeilen jeweils noch manuell angepaßt werden mußten (zwischen 0 und 9 Zeilen je nach Beispiel), also mit denen die automatische Übersetzung nichts anfangen konnte. Die drei Beispiele, von denen oben die Rede ist, sind übrigens genau die, die der CU2CL-Prototyp ohne manuelle Eingriffe bewältigte.

Edit/PS:
Die 3 Wochen gelten natürlich nur für den "typischen Studenten". ;)

Coda
2011-09-26, 19:51:28
Wieso frisst Clang überhaupt CUDA-Code?

del_4901
2011-09-26, 21:53:15
Wieso frisst Clang überhaupt CUDA-Code?
Weil man das Frontend dafuer modifiziert hat?
Kann sogar durchaus sein, das der code direkt oder indirekt von Nvidia stammt.

Coda
2011-09-26, 21:58:10
Les ich so aber nicht aus dem Paper raus. Evtl. ist CUDA schon so ähnlich zu C, dass der AST auch so rausfällt?

Ganon
2011-09-26, 22:02:28
http://clang.llvm.org/doxygen/classclang_1_1CUDAKernelCallExpr.html

Zumindest scheint's da was in der Richtung zu geben.

Aber ich denke die würfeln im PDF ein bisschen was durcheinander. z.B. steht da auch was von "clang compiler framework". Ich schätze mal die meinen LLVM bzw. scheinen sie mit "clang" direkt "LLVM+clang" zu meinen.

CUDA-Code kenne ich nun nicht, aber wird dann wohl so sein, dass man da bestimmte Sachen weiterbenutzen kann.

del_4901
2011-09-26, 22:04:30
Les ich so aber nicht aus dem Paper raus. Evtl. ist CUDA schon so ähnlich zu C, dass der AST auch so rausfällt?
C++! Nach ein bissel Recherche ist die CUDA funktionalitaet im letzten Jahr dazu gekommen. Und ja, das sind keine signifikanten Aenderungen gewesen.

Coda
2011-09-26, 22:07:24
Nun gut.

Nighthawk13
2011-09-27, 10:21:30
Tabelle VI auf der gleichen Seite gibt auch Auskunft, wie viele Zeilen jeweils noch manuell angepaßt werden mußten (zwischen 0 und 9 Zeilen je nach Beispiel), also mit denen die automatische Übersetzung nichts anfangen konnte. Die drei Beispiele, von denen oben die Rede ist, sind übrigens genau die, die der CU2CL-Prototyp ohne manuelle Eingriffe bewältigte.

Sorry hatte mich missverständlich ausgedrückt: Mir gings um die Rechenzeit des Kernel(nicht die Compilezeit):
Also wieviel Prozent der Kernel schnell rechnet, wenn man z.B. "Needleman-Wunsch" from Scratch für die 5870 auslegt+implementiert, im Vergleich zu der automatischen Konvertierung aus Cuda.
D.h. wieviel Performance verliere ich, wenn der Code für die falsche Hardware optimiert wurde?

PS: Ok in einem Quellpaper fündig geworden: Dort kommt man auf 65% Mehrleistung durch Optimierung für die 5870:
http://developer.amd.com/afds/assets/presentations/2907_3_final.pdf

Coda
2011-09-27, 11:30:50
Wobei das auf GCN ein viel kleineres Problem sein dürfte.