• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

GPU-Programmierung mit CUDA

Hat irgendwer schon erfahrung mit GPU-Programmierung und CUDA.
Ich soll einen neuen Rechenkern für Versicherungsmathematische Berechnungen implementieren. Dafür würde sich doch eine GPU anbieten. Soviel ich gelesen habe wurde in CUDA OpenCL implementiert. Bedeutet das, dass in Zukunft auch andere Grafikkartzen zb. von ATI unterstützt werden und das Programm dan Grafikkartenunabhängig laufen kann?
 

TomcatMJ

Guru
Nein. CUDA ist eine NVIDIA-eigene Sache, ATI hat auch ähnliches im Programm, nämlich Stream. Diesbezüglich wäre der kurze Inforatikel unter http://tinyurl.com/cdpk6t und http://www.dvhardware.net/article31227.html sowie http://ati.amd.com/technology/streamcomputing/opencl.html wsicherlich für dich interessant. Bleibt wohl nur noch die Frage ob man da einen kleinsten gemeinsamen Nenner finden kann der sowohl von CUDA als auch von Stream unterstützt würde (ich bin selbst kein Progger,also sicherlich nicht gerade der optimale Ansprechpartner für sowas*g*).

Bis denne,
Tom
 

Tooltime

Advanced Hacker
Die Frage ist ob das überhaupt ein Vorteil bringt, soweit ich weiß lohnt sich so etwas nur wenn die Berechnung massiv parallelisiert werden kann. Bevor ich mich da an einen einzelnen Hersteller wie Nvidia binde, würde ich überlegen ob optimierte Programmierung für bessere Auslastung der einzelnen Pipelines im Prozessor, Multithreading, oder SSE nicht reichen.
 
OP
G

Goofy180173

Member
Dieser Weg wird sowieso gegangen. Aber hier wäre eventuell noch mal ein Performanceschub drinnen.
Grafikkarten bieten eben entsprechend höhere Rechenleistungen und könnten daher viele Personen gleichzeitig berechnen. Die Frage ist natürlich ob man mit OpenCL nicht Grafikkartenunabhängig werden kann, denn nur dann ist soetwas überhaupt interessant. Ich will mich auf gar keinen Fall an einen Hersteller binden. Schließlich soll das Modul auch von anderen Kunden und auf anderen Betriebssystemen (Windows) genutzt werden können.
 

TomcatMJ

Guru
Vermutlich dürfte OpenCL da wirklich der einzige Hardwarehersteller übergreifende Weg sein sofern die Implementationen zumindest einen kleinsten gemeinsamen Nenner dann auch tatsächlich aufweisen werden. Infos zu OpenCL dürfte man unter http://www.khronos.org/opencl/ in vernünftig nutzbarem Umfang finden (Quick-Referencecard und Spezifikationen), den Stand der Unterstützung seitens der Hardwarehersteller wohl am ehesten auf deren entsprechenden Seiten:
ATI/AMD: http://ati.amd.com/technology/streamcomputing/intro_opencl.html
NVIDIA: http://www.nvidia.com/object/io_1228825271885.html
Intel (hält sich da wohl noch etwas bedeckt): http://software.intel.com/en-us/blogs/2009/01/21/parallel-programming-talk-opencl-with-tim-mattson/
Apple: http://www.apple.com/macosx/snowleopard/

Bis denne,
Tom
 
OP
G

Goofy180173

Member
Vielen Dank die Artikel hab ich mir in der Zwischenzeit schon angesehen, aber das ganze scheint mir doch noch in einem sehr frühen Stadium zu sein. Bis OpenCL von allen Herstelern unterstützt wird wird, und es dann auch entsprechende Unterstützung durch die Community gibt wird es wohl noch etwas dauern und bis dahin ist das für mich praktisch keine Option.
 

Tooltime

Advanced Hacker
Tips für optimierte Programmierung gibt es hier:
Nur so als Beispiel:
Code:
float * begin;
float * end;

// die normale Version
for ( float * v = begin ; v != end; ++ )
  {
      *v *= 2.o; 
  }

// bringt auf einen Athlon 64 die doppelte FP-Performance
for ( float * v = begin ; v != end; v += 4 )
  {
      v[0] *= 2.o;
      v[1] *= 2.o;
      v[2] *= 2.o;
      v[3] *= 2.o;
  }
Für 100% mehr Performance kann man sich schon mal überlegen, ob man nicht manuell die eine oder andere Schleife per Hand optimiert.
 
Oben