Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hab gestern angefangen OpenCL per Plugin in mein Converter ein zu binden und dabei meine ersten Erfahrungen mit OpenCL gemacht. Das erste, was mich sehr überrascht hat, AMD, Intel, Nvidia, IBM haben jeweils ein eigenes SDK und bis auf cl.h und cl_platform.h gehen die ziemlich weit auseinander und auch der support für Hardware ist schrecklich.
Intel hat nur für i3-7 und HD GPU's support, Nvidia hat nur für GF8 und aufwärts support, AMD hat für ihre CPU's und GPU's support und IBM hat ein Client lib, welches alle vorher aufgeführten supported und eine Server lib für ihre Bladecenter.
Man kann also nicht einfach ein SDK laden und dann mit los legen, sondern muss für jede Platform das entsprechende SDK laden oder ein API wrangler nutzen. Es gibt entsprechend einige libs, die wie glew agieren, nur für OpenCL. Nvidia und AMD liefern ihre OpenCL Treiber mit den Grafikkarten Treiber. Also ist das doch ein bisschen einfacher die Shared Library on demand zu laden, statt diese als dependency mit in das Binary zu kompilieren. Denn neben den vielen Treibern, sollte man auch bedenken, dass es auch 32 und 64 Bit versionen, sowie Windows, Linux, MacOS X gibt, da müsste man ne menge lib's im Build System pflegen.
Nvidia behandelt OpenCL als schweres Übel, wenn man sieht was und wie sie ihre OpenCL Implementierung und SDK anbieten. Ein SDK gibt es eigentlich nicht wirklich, es gibt eine kleine Sammlung von Beispielen, aus GF8 Zeiten und das war's.
AMD bietet mit dem App SDK unglaublich viel an, eine menge Samples, ein richtiges SDK, Tools zum profilen, debuggen, schreiben und zusätzliche Libs für binary kernels, util Funktionalität und VSC++ Integration. Wenn man eine AMD CPU und GPU hat, dann kann man auch beide gleichzeitig bespaßen.
Das Nvidia sich quer stellt verstehe ich, da sie CUDA haben und dort viel Geld und Zeit rein geflossen ist aber was interessiert mich das, wenn ich eine Crossplatform lösung haben will. Noch dazu hab ich nix gute von Kollegen gehört, die CUDA benutzten.
Intel bietet ein SDK an aber man kann dann nicht mehr eine GPU verwenden, da es nur eine OpenCL Shared Lib geben kann.
Das Hauptproblem liegt meiner Meinung nach im Konzept. Apple hat OpenCL erfunden und liefert für Mac OS X ein Treiber für i3-i7 und die zugelassenden AMD und NVidia Karten. Weder Intel, AMD noch Nvidia schreiben dort die Treiber, sondern Apple und damit funktioniert das auch. Bei PC ist das anders, jeder User kann sein PC so zusammen stellen wie er es für richtig hält und jeder Hersteller stellt ein Treiber für OpenCL bereit aber Khronos hat wohl nicht daran gedacht, dass es nur einen Treiber in den aktuellen Model geben kann und hat nach der lizensierung, von Apple, keine weiteren Änderungen dies bzgl. vor genommen. Damit kann ich z.B. nur meine GPU oder CPU ansprechen, wenn ich Intel in Kombination mit AMD oder Nvidia verwende.
AMD hat im Computing tatsächlich die besten Karten, man hat ein sehr sehr gutes SDK, eine wahnsinnig gute Toolchain Kostenlos und man kann die CPU und GPU gleichzeitig verwenden. Noch dazu ist ein AMD System günstiger als ein Intel und Nvidia System. Es lohnt sich also für Hobbyisten, klein und mittelgroße Firmen. Eine große Firma wird sich dann wohl eher ein Bladecenter holen und da braucht man kein Crossplatform support und nimmt das entsprechende SDK vom Hersteller.
Ich hab eine GF590, also eine 2 Kern GPU und ich bin mal gespannt ob ich die auch auslasten kann.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Interessant. Vielen Dank, dass du deine Erfahrungen teilst. Vor allem weil man sonst immer eher hört, dass der Entwickler-Support bei Nvidia wesentlich besser sein soll als bei AMD. Da scheint sich dann ja was getan zu haben.
Bemerkenswerterweise spiegeln deine Berichte genau das wieder, was man aus unternehmenspolitischer Sicht erwarten würde: - AMD hat Probleme, bei den CPUs mitzuhalten, aber bei GPUs sind sie Spitze. => GPGPU pushen => Top-OpenCL-Support. - Nvidia will immer noch CUDA als Standard etablieren und tut bezüglich OpenCL nur die Pflichtarbeit. - Intel: GPGPU? Unser Primärgeschäft sind CPUs, warum sollten wir die überflüssig machen...
Wobei ich Nvidia an einer Stelle in Schutz nehmen muss:
TAK2004 hat geschrieben:
Nvidia hat nur für GF8 und aufwärts support
Die GeForce 8xxx-Grafikkarten waren die ersten, die Direct3D10 bzw. OpenGL 3.0 unterstütz(t)en. Damit einher gehen auch Geometryshader und Transform-Feedback, welche praktisch Grundlage des GPGPU-Computing sind.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Mhh ja deckt sich im groben auch mit meinen Erfahrungen meinen Erfahrungen. Wobei ich das nicht unbedingt als ein riesen Problem betrachte habe. Ist halt wie jede Extension, und bei den wenigen speziellen Sachen wofuer man es braucht, sollte es auch keine groesseren Probleme geben mehere Codepaths einzubauen. Fairerweise muss man aber auch erwaehnen das ich sowieso kein grosser GPU/Shader Fanatiker bin und von daher wohl auch nicht die entsprechenden Ideen/Probleme fuer das Zeug hab. Was ich mir eher wuensche, waere vernuenftiger Offscreen support von OpenGL.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hab noch ein OpenCL Extension wrangler gefunden. https://code.google.com/p/clew/ Clew ist exakt wie glew aufgebaut und funktioniert ohne OpenCL headers und lädt alle Funktionen zur Laufzeit. Einziges Problem ist, dass es auf wide char setzt, was Probleme beim laden gemacht hat. Ich kan ja 2 GPU's verwenden und dabei ist mir aufgefallen, das die API nur teilweise dafür ausgelegt ist. An einigen stellen hat man Device listen und an anderen kann man nur eines angeben obwohl das kein Sinn für mich ergibt. Dann muss man mit einer for schleife alle devices durch gehen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.