Autor Thema: GPU Shadereinheiten programmieren mit assembler  (Gelesen 8740 mal)

Dingodile

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« am: 17. December 2014, 09:42 »
Hi,
Ich programmiere zur Zeit ein kleines betriebssystem. Es soll von einer CD die Sektoren 1 bis 64 in den arbeitsspeicher laden und zu einer Adresse springen. Gibt es die Möglichkeit, die shadereinheiten einer GPU für verschiedene Berechnungen zu verwenden?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. December 2014, 09:48 »
Prinzipiell ist alles möglich. Aber im Allgemeinen ist es für diejenigen, die fragen, ob es möglich ist, in absehbarer Zeit unmöglich.

Deine Frage übertragen auf ein anderes Gebiet ist ungefähr so: Ich baue gerade einen kleinen Taschenrechner. Er soll einfach nur zwei Zahlen addieren. Gibt es eine Möglichkeit, für Zwischenschritte Mehrfachintegrale zu benutzen?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Dingodile

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 17. December 2014, 14:09 »
Danke für die schnelle Antwort.
Ich verstehe nicht, wofür ich mehrfachintegrale brauche. :?
In dem Beispiel brauche ich aber mehrere Taschenrechner. Z.B. 20 Taschenrechner die gleichzeitig jeweils 2 zahlen addieren. Wie wäre so etwas realisierbar? Bin ich mit der GPU und den shadereinheiten evtl. auf dem holzweg?

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 17. December 2014, 14:44 »
Wenn es nicht gleich 20 sein müssen kannst du das auch ein Stückweit mit SIMD befehlen machen.

Die GPU dafür zu nehmen halte ich im Hobby OS Bereich für so gut wie Ausgeschlossen. GPUs sind in der Regel nicht sonderlich gut Dokumentiert und (vermutlich) auch deutlich komplexer zu handhaben.

Wenn wir uns jetzt nicht auf HobbyOS' beschränken geht das natürlich – zumindest mit den passenden Grafikkarten.
Dann wird z.B. in OpenCL Programmiert das ganze dann für die entsprechende Grafikkarte Kompiliert auf die Karte geladen und ausgeführt.

Wenn es dir mehr um Parallelisierung geht und nicht so sehr um OS-Dev sind neben OpenCL, CUDA, HSA (Heterogeneous System Architecture)[GPU] auch OpenMP und Open MPI [CPU] interessant.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Dingodile

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 17. December 2014, 15:42 »
OK.
Ich denke ich käme nicht drum herum einen Treiber für mein OS zu programmieren(was weit über meine Fähigkeiten hinaus ginge). Dennoch muss es ein OS sein und die Berechnungen müssen parallel laufen. Bietet der raspberry pi mit seiner GPU evtl. eine Möglichkeit, kleine Programme auf die shadereinheiten zu verteilen?

streetrunner

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 18. December 2014, 16:38 »
Da die Dokumentation der GPU mittlerweile öffentlich gemacht wurde, dürfte es durchaus möglich sein die dann auch für normale Berechnungen zu gebrauchen. Allerdings würde mich mal interessieren was du genau vor hast, da es mir so vor kommt als ob das Projekt eine Nummer zu groß für dich ist (Bitte nicht übel nehmen).

Gruß

Dingodile

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 18. December 2014, 17:35 »
Ich bastele an einer Funktion meines kernels, die unregelmäßige ausgefüllte Dreiecke zeichnet(einfarbig, hoffentlich bald auch dreifarbig). Dabei werden Linien wie ein Fächer gezeichnet, um ein Dreieck zu erhalten. Je mehr Linien dieses Fächers gleichzeitig gezeichnet werden, desto schneller ist das Dreieck fertig. Und das ist vielleicht wirklich noch eine Nummer zu groß für mich. Aber einen Versuch ist es wert.

Gruß Dingodile

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 19. December 2014, 09:34 »
Da die Dokumentation der GPU mittlerweile öffentlich gemacht wurde
Hängt das nicht unter Umständen auch noch wenigstens ein kleines bisschen davon ab, um welche Grafikkarte genau es überhaupt geht? ;)

Ich bastele an einer Funktion meines kernels, die unregelmäßige ausgefüllte Dreiecke zeichnet(einfarbig, hoffentlich bald auch dreifarbig). Dabei werden Linien wie ein Fächer gezeichnet, um ein Dreieck zu erhalten. Je mehr Linien dieses Fächers gleichzeitig gezeichnet werden, desto schneller ist das Dreieck fertig.
Überleg dir lieber einen besseren Algorithmus zum Zeichnen von Dreiecken als zu versuchen, einem mistigen durch Draufwerfen von Hardware irgendwie zu akzeptabler Performance zu verhelfen. Wenn du bei ein paar einzelnen Dreiecken schon merkst, dass es zu langsam ist, dann machst du einfach etwas ernsthaft falsch.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Dingodile

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 19. December 2014, 11:35 »
Es geht um die GPU im raspberry pi. Und ein paar Dreiecke machen keine Probleme. Aber 1000 oder mehr...da wird es schon langsamer. GPUs wurden ja nicht umsonst erfunden. :-)

 

Einloggen