Frage

Ich bin ein CS-master-student, und im nächsten semester werde ich zu Beginn der Arbeit an meiner Dissertation.Ich habe Probleme kommen mit einer these-Idee, aber ich entschied mich, es in Bezug auf Computer-Grafik, wie ich bin leidenschaftlich über Spiele-Entwicklung und arbeiten möchten wie ein Profi-Spiel-Programmierer einen Tag.

Leider bin ich ein bisschen neu auf dem Gebiet der 3D-Computergrafik, ich habe ein Bachelor-Kurs über das Thema und hoffen einen fortgeschrittenen-Kurs im nächsten semester und ich bin schon Lesen verschiedene Bücher und Artikel, um mehr zu erfahren.Noch, mein Vorgesetzter hält das für besser, wenn ich eine Allgemeine these Idee jetzt und verbringen dann Zeit das lernen über Sie in Vorbereitung auf meine Diplomarbeit Vorschlag.Mein Vorgesetzter hat mir geliefert, mit einigen guten Ideen, aber ich würde lieber etwas tun, mehr Interessantes auf meiner eigenen, die hoffentlich zu tun hat mit spielen und gibt mir mehr Möglichkeiten um mehr zu erfahren über das Feld.I dont care, wenn es bereits getan worden ist, für mich die these, ist mehr Gelegenheit zu lernen, über die Dinge in der Tiefe und tun wesentlichen auf meine eigene Arbeit.

Ich weiß nicht viel über GPU-Programmierung und ich Lerne immer noch über Shader und Sprachen wie CUDA.Eine Idee, die ich hatte, ist das Programm ein ganzes Spiel (oder so viel wie möglich) auf die GPU, einschließlich sämtlicher game logic, AI und tests.Dies ist inspiriert durch die Lektüre von Papieren, die auf GPGPU und Fragen wie diese ein Ich weiß nicht, wie machbar das ist, mit meinem wissen und meinem Vorgesetzten nicht wissen viel über aktuelle GPUs.Ich bin mir sicher, mit der Zeit werde ich in der Lage sein, diese Frage zu beantworten, auf meine eigene, aber es wäre praktisch, wenn ich könnte wissen, die Antwort im Voraus und so konnte ich auch andere Ideen.

Also, wenn Sie schon so weit gekommen ist, meine Frage:Mit nur Shader oder so etwas wie CUDA, können Sie eine vollständige, einfache 3D-Spiel, nutzt die rohe Kraft und die Parallelität von GPUs?Oder bin ich etwas fehlt oder Einschränkung Unterschied zwischen GPUs und CPUs, die immer einen großen Teil meines code gebunden CPU?Ich habe gelesen, über die Physik-engines läuft auf der GPU, also warum nicht auch alles andere?

War es hilfreich?

Lösung

HAFTUNGSAUSSCHLUSS: Ich habe einen PhD gemacht, aber haben beaufsichtigte nie einen Schüler meiner eigenen, nehmen Sie so alle, was ich mit einem Körnchen Salz sagen

Ich denke, wie viel von einem Spiel wie möglich Kraft versuchen, auf eine GPU ist eine gute Möglichkeit, Ihr Projekt zu beginnen, aber schließlich sollte der Punkt Ihrer Arbeit sein: „ Es ist das, was ist ein wichtiger Bestandteil der viele Spiele, aber in ihm gegenwärtigen Zustand ist nicht gut auf einer GPU passt. hier ist, wie ich es modifiziert, so würde es gut passen

Zum Beispiel Fortran erwähnt, dass AI-Algorithmen sind ein Problem, weil sie dazu neigen, auf Rekursion angewiesen. Das stimmt, aber dies ist nicht unbedingt ein Deal-Breaker. Die Kunst der Umwandlung rekursive Algorithmen in eine iterative Form auf positiv von der akademischen Gemeinschaft angesehen wird, und würde ein schönes Mittelstück für Ihre Diplomarbeit bildet

Doch als Meister Student, haben Sie viel Zeit nicht bekommen, so dass Sie wirklich sehr schnell benötigen würde den Kern von Interesse zu identifizieren. Ich würde versuchen, nicht die Mühe, das ganze Spiel zu bekommen, um tatsächlich auf die GPU als Teil das Ergebnis Ihrer Meister passen: Ich habe es als eine Übung behandeln würde nur um zu sehen, welcher Teil nicht passen, und dann konzentrieren sich auf diesem Teil allein.

Aber Vorsicht mit Ihrer Wahl der Vorgesetzten. Wenn Ihr Vorgesetzter keine relevante Erfahrung hat, sollten Sie jemand anderes holen, der tut.

Andere Tipps

Ich warte immer noch auf eine Gameboy-Emulator, der vollständig auf der GPU, die gerade gefüttert, die Spiel ROM selbst und den aktuellen Benutzer-Eingabe und Ergebnis in eine textur, die Anzeige der Spiel - vielleicht eine zweite textur für sound-Ausgabe :)

Das Hauptproblem ist, dass Sie nicht zugreifen können persistent-storage, Benutzer-Eingang oder audio-Ausgang von einer GPU.Diese Teile werden auf der CPU, der durch die definition (auch wenn Karten mit HDMI-audio-Ausgang, aber ich denke, Sie können nicht kontrollieren es von der GPU).Abgesehen von, dass, können Sie bereits push die große Teile der Spiel-code in der GPU, aber ich denke, es ist nicht genug für ein 3D-Spiel, da hat jemand zu ernähren, die 3D-Daten in die GPU und ihm mitteilen, welche Shader anwenden sollten, um die Teil.Sie können nicht wirklich zufällig Zugriff auf Daten auf der GPU oder beliebigen code auszuführen, jemand zu tun hat die setup.

Vor einiger Zeit, Sie würde einfach setup eine textur mit der Quelldaten, ein render-Ziel für das Ergebnis-Daten, und ein pixel-shader, die tun würde, die transformation.Dann gerendert, ein quad mit dem shader zu Rendern Ziel, die würde, die Berechnungen durchzuführen, und Lesen Sie dann die textur zurück (oder verwenden Sie es für die weitere Darstellung).Heute haben sich die Dinge wurden einfacher gemacht, in der vierten und fünften generation von Shadern (Shader Model 4.0 und was auf DirectX 11), so können Sie größere Shader und access memory leichter.Aber immer noch, Sie zu setup von außen, und ich weiß nicht, wie die Dinge sind heute in Bezug auf die Aufbewahrung von Daten zwischen frames.Im schlimmsten Fall, hat die CPU zu Lesen zurück von der GPU und drücken Sie erneut, um die retain-Daten zum Spiel, die immer eine langsame Sache zu tun.Aber wenn Sie wirklich zu einem Punkt, wo eine einzige generische setup/rendering-Zyklus würde ausreichen für das Spiel ausgeführt werden kann, könnte man sagen, dass das Spiel läuft auf der GPU.Der code wäre sehr Verschieden von der normalen Spiel-code, wenn.Die meisten der Leistung von GPUs kommt von der Tatsache, dass Sie führen Sie das gleiche Programm in Hunderten oder sogar tausenden von parallel-shading-Einheiten, und man kann nicht einfach schreiben, ein shader, der zeichnen kann, ein Bild auf einer bestimmten position.Ein pixel-shader läuft immer, per definition, die auf ein pixel, und die anderen Shadern kann Dinge tun, auf beliebige Koordinaten aber Sie befassen sich nicht mit Pixel.Es wird nicht einfach sein, denke ich.

Ich würde vorschlagen, nur versuchen Sie die Punkte, sagte ich.Das wichtigste ist die Beibehaltung Zustand zwischen den frames, meiner Meinung nach, weil, wenn Sie können nicht behalten, alle Daten, alles ist unmöglich.

Zuerst Ich bin keine Computer-Ingenieur so meine Annahmen können nicht einmal ein Körnchen Salz, vielleicht Nanomaßstab.

  • Künstliche Intelligenz? Kein problem.There gibt unzählige Beispiele neuronale Netzwerk parallel in Google laufen. Beispiel: http://www.heatonresearch.com/encog
  • Pathfinding? Sie nur einig parallel Wegfindung Algorithmen versuchen, die bereits im Internet sind. Nur einer von ihnen: https://graphics.tudelft.nl/Publications- neu / 2012 / BB12a / BB12a.pdf
  • Zeichnung? Verwenden Sie die Interoperabilität von dx oder gl mit CUDA oder cl so tut Kreuz pci-e Spur zeichnen. Kann auch an den Ecken keine Raytracing so keine z-kämpft mehr, auch reinen Raytracing Bildschirm geht mit Mainstream-gpu machbar ist, eine geringe Tiefengrenze verwendet wird.
  • Physik? Der einfachste Teil, Iterierte nur ein einfacher Euler oder Verlet Integration und häufig Stabilität überprüft, ob die Reihenfolge des Fehlers ist groß.
  • Karte / Gelände Generation? Sie brauchen nur eine Mersenne-Twister und Triangulator.
  • Speichern Spiel? Sicher, können Sie die Daten komprimieren, bevor parallel zu einem Puffer zu schreiben. Dann wird ein Scheduler schreibt diese Daten Stück für Stück auf die Festplatte durch DMA so ohne Verzögerung.
  • Rekursion? Schreiben Sie Ihre eigene Stack-Algorithmus Haupt-VRAM verwenden, nicht lokale Speicher, so dass andere Kerne in Wellenfronten und GPU Tätigkeit ausführen können, ist besser.
  • Zu viel integer benötigt? Sie können dann mit einem Schwimmer werfen tun 50-100 calcs alle Kerne verwenden dann das Ergebnis wieder auf ganzzahlige gegossen.
  • Zu Verzweigung viel? Berechnen Sie beiden Fälle, wenn sie einfach sind, so dass jeder Kern in Linie und Ziel synchron ist. Wenn nicht, dann können Sie nur einen Zweig setzen Prädiktor für sich so das nächste Mal, es sagt voraus, besser als die Hardware (könnte es sein?) Mit Ihrem eigenen Original-Algorithmus.
  • Zu viel Speicher benötigt? Sie können eine andere GPU-System und offenen DMA-Kanal oder ein CF / SLI für eine schnellere Kommunikation hinzuzufügen.
  • Hardest Teil meiner Meinung nach ist das objektorientierte Design, da es sehr seltsam und Hardware abhängig Pseudo Build-Objekte in gpu. Objekte sollten in Host (CPU) Speicher dargestellt werden, aber sie müssen über viele Arrays in gpu getrennt werden effizient. Beispiel-Objekte im Host-Speicher: orc1xy_orc2xy_orc3xy. Beispiel Objekte in gpu Speicher: orc1_x__orc2_x__ ... orc1_y__orc2_y__ ...

Die Antwort hat bereits vor 6 Jahren, aber für die Interessenten auf die eigentliche Frage, Shadertoy, eine Live-Codierung WebGL-Plattform, die vor kurzem hinzugefügt, um den „Multipass“ -Funktion ermöglicht die Erhaltung des Staates gewählt wurde.

Hier ist ein Live-Demo des Spiels Bricks läuft auf gpu.

  

Ich interessiere mich nicht, wenn es bereits gewesen ist   für mich getan, ist die These eher ein   Gelegenheit, sich über Dinge zu lernen, in   Tief und erhebliche Arbeit zu tun auf meinem   eigen.

Dann ist Ihre Vorstellung davon, was eine These ist, ist völlig falsch. Eine These muss eine Original-Forschung sein -> bearbeiten. Ich war über eine Doktorarbeit zu denken, keine Masterarbeit ^ _ ^

Sie über Ihre Frage, die Anweisung des GPU-Sets und Fähigkeiten sind sehr spezifisch für Vektor-Gleitkomma-Operationen. Das Spiel Logik in der Regel tut wenig Gleitkomma und viel Logik (Zweige und Entscheidungsbäume).

Wenn Sie einen Blick auf die CUDA wikipedia Sie sehen werden:

  

Es verwendet eine Rekursion frei,   function-pointer freie Teilmenge der C   Sprache

Also vergessen alle KI-Algorithmen dort über die Implementierung, das im Wesentlichen rekursiv sind (wie A * für Wegfindung). Vielleicht könnten Sie die Rekursion mit Stapel simulieren, aber wenn es nicht erlaubt ist, explizit sollte es für einen Grund geben. Nicht auch Funktionszeiger mit schränkt etwas die Fähigkeit zur Verwendung Versendetabellen für die verschiedenen Aktionen der Handhabung auf Zustand des Spiels abhängig (Sie wieder verwenden könnte if-else-Konstruktionen gekettet, aber etwas schlecht riecht dort).

Diese Beschränkungen in der Sprache widerspiegeln, dass der zugrunde liegende HW meist wird angenommen, Aufgaben Streaming Verarbeitung zu tun. Natürlich gibt es Workarounds (Stacks, angekettet if-else), und man könnte theoretisch fast jeden Algorithmus umsetzen werden, aber sie werden wahrscheinlich die Leistung viel saugen machen.

Der andere Punkt ist über die IO-Handling, wie bereits erwähnt, ist dies eine Aufgabe für den Haupt-CPU (weil er derjenige ist, der das Betriebssystem ausgeführt wird).

Es ist lebensfähig eine Masterarbeit zu einem Thema und mit Werkzeugen zu tun, dass Sie, wenn Sie beginnen, nicht vertraut. Doch es ist eine große Chance zu nehmen!

Natürlich ist eine Masterarbeit soll Spaß machen. Aber letztlich sein zwingend notwendig, dass Sie mit Auszeichnung übergeben und das bedeuten könnte ein schwieriges Thema anzugehen, dass Sie bereits gemeistert haben.

Ebenso wichtig ist Ihr Vorgesetzter. Sein zwingend notwendig, dass Sie ein Problem sie in ein Interesse zeigen angehen -, dass sie sich kennen -., So dass sie bei der Unterstützung interessiert werden können Sie eine große Klasse bekommen

Sie haben viele Hobby Zeit zum Scratchen juckt haben, werden Sie viel mehr Hobby Zeit in der Zukunft auch kein Zweifel. Aber Masterarbeit Zeit ist leider nicht die Zeit für Hobbys.

Während GPUs heute haben einige immense Rechenleistung bekommen, sie sind, unabhängig davon, Dinge wie CUDA und OpenCL zu einem eingeschränkten Satz von Anwendungen beschränkt, während die CPU mehr auf Rechen allgemeine Dinge geeignet sind, mit Erweiterungen wie SSE spezifisch zu beschleunigen gemeinsame Aufgaben. Wenn mich nicht alles täuscht, haben einige GPUs die Unfähigkeit, eine Division von zwei Gleitkomma-Zahlen in der Hardware zu tun. Sicherlich haben sich die Dinge stark verbessert im Vergleich zu vor 5 Jahren.

Es wäre unmöglich, ein Spiel zu entwickeln, vollständig in einer GPU laufen - es würde irgendwann die CPU muß auszuführen etwas , aber eine GPU macht ausführen mehr als nur die Grafik (und Physik selbst) ein Spiel wäre sicherlich interessant sein, mit dem Fang, dass Spiele-Entwickler für PC das größte Problem hat mit einer Vielzahl von Maschinenspezifikation des Habens zu kämpfen, und mich so der Kompatibilität Einbeziehung rückwärts zu beschränken haben, verkompliziert die Dinge. Die Architektur eines System wird ein wichtiges Thema sein - zum Beispiel der Playstation 3 die Möglichkeit, mit mehreren Gigabyte eine Sekunde Durchsatz zwischen der CPU und RAM, GPU und Video-RAM, aber die CPU Zugriff auf GPU-Speicher Spitzen heraus zu tun hat nur Vergangenheit 12MiB / s.

Der Ansatz, den Sie für sich suchen können „GPGPU“ für „General Purpose GPU“ genannt. Gute Ausgangspunkte können sein:

Gerüchte über spektakuläre Erfolge in diesem Ansatz sind jetzt seit ein paar Jahren schon, aber ich vermute, dass dies der täglichen Praxis in einigen Jahren sein wird (es sei denn, CPU-Architekturen viel ändern, und machen es überflüssig).

Der Schlüssel hier ist Parallelität: Wenn Sie ein Problem haben, wenn Sie eine große Anzahl von parallelen Verarbeitungseinheiten benötigen. So vielleicht neuronale Netze oder genetische Algorithmen können eine gute Auswahl an Problemen mit der Macht einer GPU zu attackieren. Vielleicht auch auf der Suche nach Schwachstellen in kryptographischer Hashes (die DES auf einer GPU Cracken würde eine nette These machen, denke ich :)). Aber Probleme serielle Hochgeschwindigkeits-Bearbeitung erfordern, scheinen nicht so viel für die GPU geeignet. kann außerhalb des Bereichs So ein GameBoy emulieren. (Aber einen Cluster von Low-Power-Maschinen emuliert werden könnte in Betracht gezogen.)

Ich würde denken, ein Projekt mit einer Spiel-Architektur zu tun, dass die Ziele Multi-Core-CPUs und GPUs wäre interessant. Ich denke, das ist immer noch ein Bereich, in dem eine Menge Arbeit getan wird. Um gehen werden benötigt Vorteil der gegenwärtigen und zukünftigen Computer-Hardware, neue Spiel-Architekturen zu nehmen. Ich ging zu GDC 2008 und es gab ome im Zusammenhang mit diesen Gespräche. Gamebryo hatte einen interessanten Ansatz, bei dem sie Threads für die Verarbeitung von Berechnungen erstellen. Sie können die Anzahl der Kerne bezeichnen Sie so verwenden möchten, wenn Sie keine anderen Bibliotheken auszuhungern, die Multi-Core sein könnte. Ich kann mir vorstellen könnte die Berechnungen als auch auf GPUs ausgerichtet sein. Andere Ansätze enthielten verschiedene Systeme für verschiedene Kerne Targeting, so dass Berechnungen parallel durchgeführt werden können. Zum Beispiel war der erste Teil ein Vortrag den Renderer auf seinen eigenen Kern und den Rest des Spiels auf einem anderen setzen vorgeschlagen. Es gibt andere, komplexere Techniken, aber es läuft darauf hinaus alle im Grunde darauf an, wie bekommt man die Daten um auf die verschiedenen Kerne.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top