Kann Ihr Programm eine Reine GPU-Spiel?
Ich bin ein CS-master-student, und im nächsten semester werde ich zu Beginn der Arbeit an meiner Dissertation. Ich habe Mühe mit der Erarbeitung der Dissertation Idee, aber ich beschloss, es zu werden in Bezug auf Computer-Grafiken, wie ich bin leidenschaftlich über game-Entwicklung und arbeiten wollen wie ein Profi-Spiel Programmierer eines Tages.
Leider bin ich ein bisschen neu auf dem Gebiet der 3D-Computergraphik, ich habe ein Bachelor-Kurs über das Thema und hoffe, dass nehmen Sie einen fortgeschrittenen-Kurs im nächsten semester, und ich bin bereits das Lesen einer Vielzahl von Büchern und Artikeln, um mehr zu erfahren. Noch, mein Vorgesetzter denkt, ist es besser, wenn ich eine Allgemeine these Idee jetzt und verbringen dann Zeit das lernen über Sie in Vorbereitung auf meine Dissertation Vorschlag. Mein Vorgesetzter hat versorgt mich mit einigen guten Ideen, aber ich würde lieber etwas mehr Interessantes auf meiner eigenen, die hoffentlich mit dem zu tun hat Spiele und gibt mir mehr Möglichkeiten, um mehr zu erfahren über das Feld. Ist mir egal, wenn es getan ist, für mich die these ist mehr eine Chance, zu lernen, über die Dinge in der Tiefe und zu tun umfangreiche arbeiten, die auf meinem eigenen.
Weiß ich nicht viel über die GPU-Programmierung, und ich bin immer noch lernen über Shader und Sprachen wie CUDA. Eine Idee, die ich hatte zu Programmieren ist, ein ganzes Spiel (oder soviel wie möglich) auf die GPU, einschließlich der Spiel-Logik, KI und tests. Dieser ist inspiriert durch die Lektüre von Papieren auf GPGPU und Fragen wie diese eine ich weiß nicht, wie praktikabel das ist, mit meinem wissen, und meinem Betreuer nicht wissen, eine Menge über die neuesten GPUs. Ich bin mir sicher, mit der Zeit werde ich in der Lage, diese Frage zu beantworten, auf meine eigene, aber es wäre praktisch, wenn ich wissen könnte 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 der GPUs? Oder bin ich etwas fehlt Einschränkung oder Unterschied zwischen GPUs und CPUs, die immer einen großen Teil meines code gebunden CPU? Ich habe gelesen, über Physik engines auf dem GPU, also warum nicht auch alles andere?
- CUDA oder anderen Systemen erfordert natürlich den Zugang zu entsprechender hardware.
- Für eine, die gfx-Karte/GPU keinen Zugriff auf Geräte und Peripheriegeräte. Diejenigen, die kontrolliert werden und zugänglich gemacht werden, um Anwendungen vom Betriebssystem und somit euer Spiel muss auf der obersten Ebene eine ausführbare Datei, die kompatibel ist mit dem Betriebssystem. Sie würde zum Beispiel nicht in der Lage zu Lesen oder schreiben von Dateien von einem reinen CUDA-Programm. GPUs sind speziell entwickelt, um konkrete Probleme zu lösen, CPUs sind für Allgemeine Zwecke. Für die spezifischen "Probleme" in deinem Spiel (wie Physik oder gfx), sicher stellen, dass in CUDA, für den rest, sparen Sie Zeit und Geld und Sie umzusetzen in eine Allgemeine Sprache.
- Die Abstimmung zu schließen, da zu breit. Verwandte: gamedev.stackexchange.com/questions/60776/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
DISCLAIMER: ich habe Promoviert, aber noch nie betreut ein student von meiner eigenen, so nehmen Sie alles, was ich bin zu sagen mit einem Körnchen Salz!
Ich denke, Sie versuchen zu zwingen, so viel Spiel wie möglich auf eine GPU ist eine große Weise, zu beginnen Ihr Projekt, aber irgendwann ist der Punkt Ihrer Arbeit sein sollte: "Es ist dieses Ding, das ist ein wichtiger Teil von vielen spielen, aber im jetzigen Zustand passt nicht gut auf einer GPU: hier ist, wie ich es geändert, so würde es gut passen".
Beispielsweise fortran erwähnt, dass die KI-algorithmen sind ein problem, weil Sie verlassen sich auf die Rekursion. Stimmt, aber dies ist nicht unbedingt ein deal-breaker: die Kunst der Umwandlung von rekursiven algorithmen in einem iterativen form ist betrachtet positiv von der akademischen Gemeinschaft, und würde eine nette center-Stück für Ihre these.
Aber als Master-student haben Sie nicht viel Zeit habe, so würden Sie wirklich brauchen, zu identifizieren, die den kernel von Interesse sehr schnell. Ich würde nicht die Mühe zu versuchen, um das ganze Spiel eigentlich passen auf die GPU als Teil des Ergebnisses von Ihrem Meister: ich würde Sie behandeln es wie eine übung, nur um zu sehen, welches Teil passt nicht, und dann konzentrieren sich auf, dass ein Teil allein.
Aber seien Sie vorsichtig mit Ihrer Wahl der Vorgesetzten. Wenn Sie Ihren Vorgesetzten nicht über relevante Erfahrungen, sollten Sie wählen jemand anderes, der es tut.
Ich warte immer noch auf ein Gameboy-Emulator, der komplett auf der GPU, die wird gerade gefüttert, das Spiel ROM selbst und den aktuellen Benutzer-input und die Ergebnisse in eine textur, die die Anzeige der Spiel - vielleicht eine zweite textur für die Tonausgabe 🙂
Das Hauptproblem ist, dass Sie keinen Zugriff auf persistenten Speicher, user-input oder audio-Ausgabe von einer GPU. Diese Teile werden auf die CPU, per definition (auch wenn Karten mit HDMI-audio-Ausgabe, aber ich denke, man kann es nicht Steuern von der GPU). Abgesehen davon, Sie können bereits push-große Teile der Spiel-code in die GPU, aber ich denke, es ist nicht genug für ein 3D-Spiel, da hat jemand zum einspeisen der 3D-Daten in die GPU und es sagen die der Shader angewendet werden soll, welcher Teil. Sie können nicht wirklich zufällig Zugriff auf Daten auf der GPU oder beliebigen code auszuführen, jemanden zu tun hat, die setup.
Vor einiger Zeit, Sie würde nur setup eine textur mit den Quelldaten, ein render-target für die Ergebnis-Daten, und eine pixel-shader, die tun, die transformation. Dann Sie machte eine quad mit dem shader zum Rendern Ziel, die würde, die Berechnungen durchzuführen, und Lesen Sie dann die textur wieder (oder verwenden Sie es für die weitere Darstellung). Heute haben sich die Dinge wurden einfacher gemacht, indem die vierte und fünfte generation von Shadern (Shader Model 4.0 und das ist, was in DirectX 11), so können Sie größere Shader-und access-Speicher einfacher. Aber immer noch, Sie müssen so eingerichtet sein, von außen, und ich weiß nicht, wie die Dinge sind heute bezüglich der Pflege der Daten zwischen den frames. Im schlimmsten Fall, die CPU hat zu Lesen, wieder von der GPU und drücken Sie erneut, um die retain-Daten zum Spiel, das ist immer eine langsame Sache zu tun. Aber wenn man wirklich an einen Punkt gelangen, wo eine einzelne generische setup/rendering-Zyklus wäre genügend für Ihr Spiel zu laufen, man könnte sagen, dass das Spiel läuft auf der GPU. Der code wäre ganz Verschieden von der normalen Spiel-code, wenn. Die meisten die Leistung von GPUs kommt von der Tatsache, dass Sie ausführen, das gleiche Programm in Hunderten oder sogar tausenden von parallelen shading-Einheiten, und man kann nicht einfach schreiben Sie einen shader, der zeichnen kann, ein Bild an eine bestimmte position. Ein pixel shader läuft immer, per definition, auf ein pixel, und die anderen Shader, die Dinge machen können, die auf beliebige Koordinaten, aber Sie befassen sich nicht mit Pixel. Es wird nicht einfach sein, denke ich.
Ich würde vorschlagen, einfach ausprobieren, die Punkte, die ich sagte. Das wichtigste ist die Beibehaltung Zustand zwischen den Rahmen, meiner Meinung nach, weil wenn du es nicht behalten alle Daten, alle ist unmöglich.
Ersten, Im nicht ein computer-Ingenieur, so dass meine Annahmen auch nicht ein Körnchen Salz, vielleicht Nanobereich.
Die Antwort bereits gewählt wurde 6 Jahre her, aber für diejenigen, die Interesse an der eigentlichen Frage, Shadertoy, eine live-coding-WebGL-Plattform, die vor kurzem Hinzugefügt, die "multipass" - Funktion ermöglicht die Erhaltung des Staates.
Hier ein live-demo der Steine-Spiel laufen auf der Gpu.
Dann Ihre Idee von dem, was eine these ist völlig falsch. Einer Arbeit muss ein original-Forschung. --> edit: ich dachte an eine Doktorarbeit, die keine master-Arbeit ^_^
Über Ihre Frage, die GPU ist Befehlssätze und Funktionen sind sehr spezifisch für vector-floating-point-Operationen. Die Spiel-Logik meist wenig floating-point, und viel Logik (Verzweigungen und Entscheidungsbäume).
Wenn Sie einen Blick auf die CUDA wikipedia-Seite Sie werden sehen:
Vergessen Sie also die Umsetzung von AI-algorithmen gibt, die im wesentlichen rekursive (wie A* für das pathfinding). Vielleicht könnten Sie simulieren die Rekursion mit stacks, aber wenn es ausdrücklich nicht erwünscht, es soll für einen Grund. Nicht mit Funktionszeigern schränkt auch etwas die Fähigkeit zur Nutzung von dispatch-Tabellen für die Handhabung der verschiedenen Maßnahmen je nach Zustand des Spiels (könnte man wieder verwenden verkettete if-else-Konstruktionen, aber etwas schlecht riecht es).
Diese Einschränkungen in der Sprache widerspiegeln, dass die zugrunde liegende HW ist hauptsächlich gedacht, um streaming-Verarbeitung Aufgaben. Natürlich gibt es workarounds (stacks, verkettete if-else), und man könnte theoretisch umzusetzen fast jedem Algorithmus gibt es, aber Sie werden wahrscheinlich machen die Leistung saugen eine Menge.
Der andere Punkt ist, über den Umgang mit der IO, wie bereits erwähnt, dort oben, das ist eine Aufgabe für die Haupt-CPU (weil es die eine, die führt den OS).
Ist es lebensfähig zu machen, eine Diplomarbeit über ein Thema und mit tools, die Sie sind, wenn Sie beginnen, ist unbekannt. Jedoch, es ist eine große chance zu nehmen!
Natürlich eine Master-Arbeit soll Spaß machen. Aber letztlich, seinen zwingend notwendig, dass Sie pass mit Auszeichnung und das kann bedeuten, dass die Bewältigung ein schwieriges Thema, dass du bereits beherrschst.
Ebenso wichtig ist Ihre Betreuer. Seine zwingend notwendig, dass Sie die Beseitigung einiger Schwierigkeiten, Sie zeigen Interesse -, dass Sie sich vertraut mit - so, dass Sie sich mit Interesse daran Sie erhalten Sie einen großen Grad.
Hatten Sie viele hobby-Zeit zum kratzen, juckt, haben Sie viel mehr hobby-Zeit auch in Zukunft kein Zweifel. Aber der master-thesis Zeit ist nicht die Zeit für Hobbys leider.
Während GPUs heute haben einige immense Rechenleistung, die Sie sind, unabhängig davon, Dinge wie CUDA und OpenCL beschränkt sich auf einen eingeschränkten Satz von Anwendungen, in der Erwägung, dass die CPU eher in Richtung computing Allgemeine Dinge, mit Erweiterungen wie SSE, um die Geschwindigkeit bestimmter gemeinsamer Aufgaben. Wenn ich mich nicht Irre, einige GPUs der Unfähigkeit zu tun, eine division von zwei Ganzzahlen in Gleitkomma-hardware. Sicherlich Dinge, die haben sich stark verbessert im Vergleich zu vor 5 Jahren.
Wäre es unmöglich, die entwickeln ein Spiel zum laufen vollständig im GPU - würde es brauchen, die CPU wird irgendwann ausgeführt etwas, jedoch machen eine GPU mehr als nur die Grafik (und Physik auch) ein Spiel wäre sicher interessant, mit dem Fang, dass Spiele-Entwickler für PC ist das größte Problem, mit zu konkurrieren mit einer Vielzahl von Maschinen-Spezifikation, und somit beschränkt sich auf die Einbeziehung der Abwärtskompatibilität, die Dinge komplizieren. Die Architektur eines Systems wird ein zentrales Thema sein - zum Beispiel die Playstation 3 hat die Fähigkeit, multi-Gigabyte eine Sekunde an Datendurchsatz zwischen CPU und RAM, GPU und Video-RAM, aber die CPU Zugriff auf die GPU-Speicher-peaks aus der Vergangenheit nur 12MiB/s.
Den Ansatz, den Sie vielleicht suchen, ist als "GPGPU" für "General Purpose GPU". Gute Ansatzpunkte könnten sein:
Gerüchte über spektakuläre Erfolge in diesem Ansatz wurden um für ein paar Jahre jetzt, aber ich vermute, dass dies fast Alltag geworden in ein paar Jahren (es sei denn, CPU-Architekturen eine Menge ändern, und machen es überflüssig).
Der Schlüssel hier ist die Parallelität: wenn Sie ein problem haben, wo Sie brauchen eine große Anzahl von parallel processing units. So, vielleicht neuronalen Netzen oder genetischen algorithmen kann eine Reihe von Problemen, Angriff mit der macht der GPU. Vielleicht auch auf der Suche nach Schwachstellen in kryptographischen hashes (Rissbildung des DES auf eine GPU machen würde, eine schöne Arbeit, kann ich mir vorstellen :)). Aber Probleme, die serielle high-speed-Verarbeitung scheinen nicht so sehr geeignet für die GPU. So emuliert einen GameBoy kann out-of-scope. (Aber die Emulation eines Clusters von low-power-Maschinen betrachtet werden könnten.)
Ich würde denken, ein Projekt, das sich mit einem Spiel-Architektur, die Ziele multiple-core-CPUs und GPUs, wäre interessant. Ich denke, dies ist immer noch ein Bereich, wo eine Menge Arbeit ist getan. Um die Vorteile der aktuellen und zukünftigen computer-hardware, neue Spiel-Architekturen benötigt werden. Ich ging auf der GDC 2008 und es wurden ome spricht im Zusammenhang mit diesem. Gamebryo hatte einen interessanten Ansatz, in dem Sie threads erstellen für die Verarbeitung von Berechnungen. Sie können angeben, die Anzahl der Kerne, die Sie verwenden möchten, so dass, wenn Sie nicht verhungern aus anderen Bibliotheken, die möglicherweise multi-core. Ich Stelle mir die Berechnungen konnte gezielt auf GPUs als auch.
Andere Ansätze enthalten, auf verschiedene Systeme für verschiedene Kerne, so dass die Berechnungen konnten parallel durchgeführt werden. Zum Beispiel die erste Teilung ein Gespräch vorgeschlagen war, den renderer auf seinen eigenen Kern und den rest des Spiels auf einem anderen. Es gibt andere, komplexere Methoden, aber es sind im Grunde alle darauf hinauslaufen: wie bekommst du die Daten um auf die verschiedenen Kerne.