News NVIDIA: DirectX 11 ist nicht so wichtig

Doch. Das Wesen von Standards ist Plattformunabhängigkeit. Das ändert sich auch mit OpenCL nicht.
Es verwundert mich, dass du als Programmierer die Stärken von OpenCL vermeintlich kennen willst ... aber noch nicht die Möglichkeit der Extensions gehört hast?!

... Daher war ich der Meinung, du sprichst von proprietären Sachen wie x86 oder CUDA. Wenn Intel und nVidia offene Standards ebenfalls pushen, wie OpenCL, umso besser. Ich habe da aber ehrlich gesagt Zweifel angesichts LRBni und eben der strikten Fokussierung auf CUDA bei nVidia.
Du bist nicht auf den Dampfer was die Nachrichtenlage hergibt.

AMD, Intel, Nvidia sind bei der aktiven Entwicklung von OpenCL dabei gewesen.
Alle drei beabsichtigen in ihren Entwicklersuiten diesen allgemeinen Standard mit zu unterstützen. Intel hat in jüngerer Zeit auch noch entsprechende Firmen deswegen aufgekauft.

AMD will OpenCL in Stream (Hinweis-> Entwicklersuiten) integrieren.

Nvidia will und hat OpenCL schon in CUDA (Hinweis-> Entwicklersuiten) integriert.

Ich verzichte darauf Links einzubinden, weil ich das schon mehrfach getan habe, ohne dass das Eingang in deine Argumentation gefunden hat.
CUDA und Stream sind Namenshüllen für ein Paket (Hinweis-> Entwicklersuiten) verschiedener Standards/APIs ... darunter auch OpenCL.

MFG Bobo(2009)
 
Doch. Das Wesen von Standards ist Plattformunabhängigkeit. Das ändert sich auch mit OpenCL nicht.
Aber Plattformunabhängigkeit hat doch nichts damit zu tun, ob mein Code schnell oder langsam auf einer speziellen Hardware/Architektur läuft. Plattformunabhängigkeit garantiert mir doch nur, dass das Programm läuft. Dieser Geschwindigkeitsunterschied hat sicher nicht nur was mit der theoretischen Rohleistung des Prozessors zu tun, sondern auch damit wie sie ausgenutzt wird.

Dieser Satz ist völlig unverständlich. Einen Compiler brauchst du immer. Und der übernimmt auch die Hauptarbeit der Optimierung.
Ja einen Compiler braucht man immer, ich habe nichts gegenteiliges behauptet. Natürlich findet hier ein Teil der Optimierung statt. Für mich als Laien, der kein Informatik studiert hat und auch nicht studiert, fehlt natürlich der Umfassende Blick auf das Thema. Für mich stellt sich die Situation aber so dar (allgemein):

Folgende Komponenten haben einen Einfluss auf die Performance einer Anwendung:

  • Algorithmus
  • Implementierung des Algorithmus (ist er an sich optimal?, kann der Compiler die Semantik erkennen um so den Code zu optimieren)
  • verwendete Programmiersprache (verursachter Overhead, ohne hoch optimierte Bibliotheken)
  • Compiler ("Grundperformance", automatische Vektorisierung, genutzte Optimierungsstufe)
  • Hardware (Rohleistung, Wie funktioniert diese?,Fähigkeit des Programmierers diese zu nutzen)
  • Parallelisierung (z.B. OpenMP, MPI)

Damit ich als Programmierer weiß, wo ich zu optimieren habe, muss ich mich mit folgendem auseinandersetzen:

  • Welcher Teil meines Codes ist der heiße Teil, in dem die meiste Zeit verbraucht wird.
  • Wie kann ich die vorhandene Hardware (Aufbau, Größe der Caches, Befehlssätze, Multicore?, Prefetch, wo liegen die bottlenecks, ...) optimal einsetzen. <-- Testen/Messen ist notwendig, Dies kann ohne Hardware und entsprechenden Compiler nicht durchgeführt werden.
  • ...

Diese Auflistungen sind sicher nicht vollständig und höchstwahrscheinlich auch nicht vollständig richtig, aber sie spiegeln mein Verständnis der Dinge wieder.

In einem früheren Post hast du (?) mich ja schon mal darüber aufgeklärt, dass bei OpenCL die eigentliche Codeoptimierung erst auf der CAL-/PTX-Ebene (bei GPUs, wie sieht das eigentlich bei den CPUs aus?) stattfindet. Nach meinem Verständnis ändert das aber nichts an der Tatsache, dass man es dem CAL-/PTX-Compiler einfacher oder schwerer machen kann. Außerdem läuft nicht jeder Algorithmus und dessen Implementierung auf jeder Hardware gleich performant (CPU <--> GPU, Intel <--> AMD, ATI <--> Nvidia, unterschiedliche Genarationen). Und hier kommen die von Bobo angesprochenen Tools zum Einsatz. Mit ihnen kann man gezielt Code aufspüren, der nicht optimal ist. Auf das komplexe Thema Parallelisierung will ich gar nicht erst eingehen, da ich wahrscheinlich ohnehin schon genug Quark erzählt habe.

So einfach, wie du es darstellst, kann es doch eigentlich nicht sein? Was machen sonst Dokument wie der "Software Optimization Guide for AMD Family 10h Processors" für einen Sinn?


Das musst du gar nicht. Wie sich der Code auf der jeweiligen Hardware verhält, bestimmt eben die Runtime. Und mit der hat der Entwickler erstmal nichts zu tun.
Sorry, wenn ich mich an der Stelle noch dummer anstelle als sonst, aber was ist hier genau mit Runtime gemeint und was sind ihre Aufgaben?


Danke für die Gedult!

@
 
Es verwundert mich, dass du als Programmierer die Stärken von OpenCL vermeintlich kennen willst ... aber noch nicht die Möglichkeit der Extensions gehört hast?!
Welche Extensions?

Du bist nicht auf den Dampfer was die Nachrichtenlage hergibt.
Doch, bin ich. Du erzählst mir daher nichts neues. Das ändert trotzdem nichts an meiner Aussage.

Aber Plattformunabhängigkeit hat doch nichts damit zu tun, ob mein Code schnell oder langsam auf einer speziellen Hardware/Architektur läuft. Plattformunabhängigkeit garantiert mir doch nur, dass das Programm läuft.
Und genau darum ging es doch. Nicht mehr und nicht weniger.

Wie kann ich die vorhandene Hardware (Aufbau, Größe der Caches, Befehlssätze, Multicore?, Prefetch, wo liegen die bottlenecks, ...) optimal einsetzen. <-- Testen/Messen ist notwendig, Dies kann ohne Hardware und entsprechenden Compiler nicht durchgeführt werden.
Nein, darum kümmert sich der Entwickler nicht. Wir programmieren schliesslich nicht mehr Assembler. Das ist die Aufgabe des Compilers bzw der Runtime. Dem Entwickler ist also, wie schon mehrfach erwähnt, die Hardware erstmal völlig egal. Das erklärt sich schon durch Logik. Willst du ein plattformunabhängiges Projekt wirklich mit jeder möglichen Hardware testen? Wie soll das möglich sein? Und willst du in diesem Leben noch damit fertig werden? ;)
Dass irgendein Hardwarehersteller bei einem Entwickler anklopft und ihn "überredet", auf die eigene Hardware hin zu optimieren, kann man natürlich nicht ausschliessen. Diese schwarzen Schafe wollen wir bei der Diskussion aber mal aussen vor lassen. Das ist ein Thema für einen anderen Thread.

In einem früheren Post hast du (?) mich ja schon mal darüber aufgeklärt, dass bei OpenCL die eigentliche Codeoptimierung erst auf der CAL-/PTX-Ebene (bei GPUs, wie sieht das eigentlich bei den CPUs aus?) stattfindet.
Wie schon gesagt, das übernimmt der Compiler. In dem Fall natürlich der Teil, der für den x86 Code verantwortlich ist bzw der ISA, auf der der Prozessor basiert.

Außerdem läuft nicht jeder Algorithmus und dessen Implementierung auf jeder Hardware gleich performant (CPU <--> GPU, Intel <--> AMD, ATI <--> Nvidia, unterschiedliche Genarationen). Und hier kommen die von Bobo angesprochenen Tools zum Einsatz. Mit ihnen kann man gezielt Code aufspüren, der nicht optimal ist.
Das kann man natürlich machen. Eine Möglichkeit ist zB Profiling. Das ist aber kein Bestandteil der eigentlichen Entwicklung, sondern wird in der Testphase durchgeführt.

So einfach, wie du es darstellst, kann es doch eigentlich nicht sein? Was machen sonst Dokument wie der "Software Optimization Guide for AMD Family 10h Processors" für einen Sinn?
Wenn du dir das Dokument mal genau anschaust, diverse Beispiele sind gar nicht speziell auf AMD Hardware bezogen, sondern sehr allgemein gehalten, eben C bzw C++ Code. Der Rest, also wenn es auf Assembler Ebene geht, richtet sich vor allem an Compiler Entwickler bzw an Entwickler, die Assembler Routinen schreiben. Es sollte aber klar sein, dass wir bei den letztgenannten nur über einen kleinen Teil aller Entwickler sprechen. Oder um es anders auszudrücken, es ist nicht repräsentativ für Softwareentwicklung.
 
ich hoffe ihr erinnert euch noch alle an das thema der news?
sonst solltet ihr es euch ruhig nochmal anlesen ;)

diese kleinka**erei macht kaum noch spass durchzulesen, weil jeder schlauer ist, als der andere und dennoch alle irgendwo recht haben. an welchen stellen weiß ich nicht, weil ich selber nicht in der materie stecke.
jeder ist in seinem themengebiet sicher sehr gut, aber sobald ihr euch vermischt, reitet jeder auf falsche formulierungen des anderen rum bzw. nimmt wörter in deren bedeutung komplett auseinander.
nicht übertreiben und wenn, dann in einem eigenen thread...das wäre ein traum.

mfg
 
Also ich finde die Diskussion sehr interessant!
 
das ändert dennoch nix daran, dass sie in einen eigenen thread gehört.

mfg
 
Irgendwie müssen die Hersteller ja versuchen die Leute zum Grafikkartenkauf zu bewegen.
Selbst mit einer heutzutage ausgestorbenen DX9 Karte könnte man noch fast alles Spielen (von der DX Technik her) ...
 
Zurück
Oben Unten