Anti-Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Tejio
Establishment
Beiträge: 107
Registriert: 11.11.2010, 11:33

Re: Anti-Jammer-Thread

Beitrag von Tejio »

Muhaha, ich hab es geschafft :D
Ich hab es endlich geschafft!!!! Es ist erwacht!! Mein Meisterwerk ist zum Leben erwacht!! *hysterisches lachen*

----------------------------------

Ich fange mit einer kleinen Frage an: Wenn ihr mit einer Kopierfunktion einer Fremdbibliothek arbeitet, würdet ihr bei einem Laufzeitfehler davon ausgehen, dass diese eine verdammte Kopierfunktion einen Fehler beinhaltet? Und das, obwohl der Debugger an eine ganz andere Stelle zeigt? Und auch nur dann eintritt, wenn man mehrere Instanzen einer kommunikativen Klasse (verwendet massenhaft IPC-Nachrichten) parallel laufen lässt?
Ich musste nur eine einzige verdammte Zeile teilweise in Kommentare setzen, dann lief es auf einmal wie am Schnürchen! Das kommt davon, wenn man sich als unerfahrerer Programmierer auf Debugger und andere Werkzeuge verlässt. Das Gehirn können sie (noch) nicht ersetzen.

Gruß, tejio
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von kimmi »

Nun ja, die Debug-Symbole hängen in der Regel auch von Dingen wie aktivierten Optimierungen und dergleichen ab. Sind Optimierungen aktiviert, werden teilweise DInge geinlined, Variablen wegoptimiert und dergleichen. Das kann der Debugger im Source dann nicht mehr korrekt wiedergeben.

Hattest du das auf dem Zettel, diese abzustellen und neu zu bauen?

Gruß Kimmi
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Ich beschäftige mich gerade mit dem Reverse Engineering eines alten Programms mit Polygongrafik. Als das rauskam, waren GPUs noch für nichts anderes da als für Rasterisierung – es gab kein Batching, keine Tiefenpufferung, nichts. Und ich will an die 3D-Modelle kommen. Das ist aber nicht so einfach:

Wie rendert man komplexe Polygonmodelle ohne Tiefenpufferung? Tröpfchenweise mit einem BSP-Baum. Von mir aus. Also haben die ihre Modelle in BSP-Bäume kompiliert.

Das war aber nicht genug, nein. Die haben nicht einfach die BSP-Bäume auf die Platte geschrieben: Die haben ihre Modelle in Skripte mit eigenem Befehlssatz und Maschinentext kompliliert, inklusive Flags, Sprüngen, Funktionen und Stapelspeicher, auf dem Positionsdaten, Texturkoordinaten, Farben, Texturen und Render-States landen. Und das hat die Engine dann ausgeführt.

Wo sie eh schon Sprünge drinhatten, konnten sie auch direkt Detailabstufungen einbauen. Und alles mit möglichst nerviger Endianness krönen. KISS ftw.

Nun musste ich erstmal den Text in den Unmengen von Dateien und Daten finden und alle Befehle parsen und zur lesbaren Endianness konvertieren. Dann habe ich eine VM gebaut, die das alles runterknattert und dabei alle Indizes und Verweise auf Flags, States und Stapelobjekte auseinanderpfriemelt und an eine getürkte Rendering-API weiterleitet, die dann Dreieck für Dreieck entgegennimmt und speichert. Und da das Resultat von Blickrichtung, Entfernung usw. abhängig ist, musste ich den gesamten Programmverlauf durchgeschoben kriegen um die in der falschen Rendering-API gesammelten Daten am Ende zum ursprünglichen Modell zu verschmelzen.

Der Großteil der fundamentalen Entdeckungen (allein, dass es Maschinensprache ist und keine verschlüsselten/komprimierten Daten) gehen auf die Konten anderer, aber nicht viele waren bisher weiter als dass die Schohse bei ihnen nur aus Glück funktionierte. Das ist mein heutiges Geantijammer.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
j.klugmann
Establishment
Beiträge: 201
Registriert: 07.07.2010, 13:00
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von j.klugmann »

Habe heute mal etwas an meiner POSIX-asynchrone Lib gebastelt, läuft mittlerweile doch recht gut. :)
Imaging-Software und bald auch Middleware: http://fd-imaging.com
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Jörg »

Und jetzt duerfen wir alle raten, was die macht? Widme ihr doch einen Thread....
j.klugmann
Establishment
Beiträge: 201
Registriert: 07.07.2010, 13:00
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von j.klugmann »

Die implementiert den POSIX Standard 1.3b für Asynchrone IO. Bis jetzt habe ich leider noch nicht alle Vorgaben erfüllen können, aber insgesamt läuft es schon recht gut. Baut komplett auf POSIX-Threads auf, das war mir in dem Fall wichtig. Ich denke mal, dass ich noch ein paar Wochen dran werkeln werde, da ich vor allem nur sehr sprunghaft an dieser Lib arbeite. Immer wenn ich mal nichts anderes zu tun habe, eigentlich stammt das Projekt aus dem März, habe es bis gestern nicht mehr angerührt. Naja, mal sehen. :P
Imaging-Software und bald auch Middleware: http://fd-imaging.com
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Guckt mal, was Visual C++ 2010 zwecks ::std::tr1-Type Traits so Schönes implementiert: http://msdn.microsoft.com/de-de/library/ms177194
__is_pod( type )
__has_nothrow_copy( type )
__is_enum( type )
Und jetzt guckt mal, zu wessen Erweiterungen die identisch sind: http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html

Gonna optimize the shit outta mah stuff

(Danke, Cat)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
j.klugmann
Establishment
Beiträge: 201
Registriert: 07.07.2010, 13:00
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von j.klugmann »

Seit heute läuft endlich auch Tesselation, jedenfalls nachdem ich 4 Stunden lang den Fehler gesucht habe. Fehler gefunden:
* Die Methode, die den Source des Shaders liefert, hat keine Exceptions für Fehler eingebaut.
* Folglich konnte ich den Shader nicht richtig laden, da ich einen falschen Dateinamen eingegeben hatte.
* Eine Exception habe ich da natürlich auch nicht bekommen.

Jetzt läuft's aber. :)
Imaging-Software und bald auch Middleware: http://fd-imaging.com
j.klugmann
Establishment
Beiträge: 201
Registriert: 07.07.2010, 13:00
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von j.klugmann »

Gerade erst gemerkt, dass das hier ja der Anti-Jammer-Thread ist. *oups*
Imaging-Software und bald auch Middleware: http://fd-imaging.com
Benutzeravatar
Jonathan
Establishment
Beiträge: 2367
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Jonathan »

@Krishty: Nur aus Interesse: Um welches Programm ging es bei diesen Modellen? Irgendwelche Bilder?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

gehtdoch.png
gehtdoch.png (877 Bytes) 8874 mal betrachtet
Na also :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

HxD hat eine Export to C-Funktion, die eine Binärdatei sofort als unsigned char data[42] = { 0xDE, 0xAD, … }; in eine C-Datei schreibt

Quality of life significandly improved
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Wow

Ich wollte gerade anfangen, Geometrie in meine Engine zu laden … und wie ich das Drahtgitter vor mir sehe, strahlt es in diesem wunderbaren Glare
geoshine.png
Ich habe ihn nicht danach gefragt

Er ist einfach nur da

Immer

Für mich

~<3
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von CodingCat »

Ich habe für meinen Uni-Kurs "Frankreich heute" soeben die Hausaufgabe eines französischen Dialogs / einer Präsentation über die frei erfundene Geschäftsstrategie eines fiktiven Parfum-Herstellers fertiggestellt. Nach anfänglicher Unlust auf diese Absurdität, unter anderem mangels jeglichen persönlichen Bezuges zu diesem Thema, hatte ich beim Schreiben so viel Spaß wie lange nicht mehr bei irgendwas, und gehe nun glücklich und zufrieden schlafen. Die Welt ist doch voller Überraschungen...
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Texture Arrays sind klasse. Ich rendere sechs Millionen Dreiecke mit 160 verschiedenen Texturen (wenn auch gleich großen, das ist halt die Einschränkung) Brute Force in einem einzigen Draw-Call – und die GPU zuckt nicht einmal. Das hätte man viel früher haben müssen.

Was mir nur aufstößt ist, dass ich bisher keine Möglichkeit gefunden habe, den Textur-Index pro Dreieck anzugeben statt pro Vertex. Verschwendung im zweistelligen MiB-Bereich.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Jörg »

Pro Dreieck: Manueller fetch ueber Primitive-ID?
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

Wenn man diesem Post eine Überschrift geben sollte, dann wohl the current state in realtime path tracing. Warum ich im Anti-Jammer-Thread poste, und nicht wie schon früher im Jammer-Thread? Weil endlich ein Ergebnis veröffentlicht wurde, von welchem ich sagen kann, dass es fundiert ist und keine Augenwischerei ist. Bei allen anderen, mir bekannten Bildern und Videos wurde immer mit akkumulierenden Verfahren (d.h. neue Farbwerte wurden zur bestehenden Samplemenge hinzugefügt) gearbeitet, wenn sich der Viewport nicht geändert hat (siehe z.B. hier). Natürlich ist das so kein passender Vergleich: Wenn sich der Viewport einmal ändern, kann man die ganze Samplemenge wegschmeißen. Dass sie das bisher nicht getan haben, sieht man am starken Ghosting bewegter Objekte, z.B. hier.

Der Mann hinter dem Ganzen ist Jacco Bikker, von der NHTV Breda University of Applied Sciences, und in diesem Falle ganz besonders seine Studenten. Deren Ergebnis findet sich hier. Endlich etwas, mit dem man was anfangen kann: Das ist der aktuelle Stand. Jacco Bikker und seine Studenten haben hierfür meinen Respekt. (via.)
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von CodingCat »

Ich konnte gestern eines meiner ältesten Probleme, die Implementierung abstrakter Klassenhierarchien durch implementierende Klassenhierarchien, unvermittelt elegant mit Templates lösen. Bisher lag die einzige Lösung, die ich finden konnte, darin, auf virtuelle Vererbung zurückzugreifen, das sah dann in etwa so aus:

Code: Alles auswählen

 IA <- A
/  \    \
IB IC <- C
Da C zwangsläufig mehrfach von IA erbt, kommt man auf diese Weise um eine oder mehrere hässliche virtuelle Ableitungen nicht herum.

Mit minimaler Template-Magie lässt sich die Implementierungshierarchie jedoch komfortabel linearisieren, wie sich herausgestellt hat:

Code: Alles auswählen

template <class Base>
class A : public Base
{
...
};

Code: Alles auswählen

 IA <- A<IA> 
/  \ 
IB IC <- A<IC> <- C
In dieser Version kommt jedes Interface und jede Implementierung nur ein einziges Mal in der jeweiligen Ableitungskette vor, auf virtuelle Vererbung kann gänzlich verzichtet werden. Beachtet werden sollte jedoch, dass das Template bei der Code-Generierung zu Code-Duplizierung pro implementierender Klasse führt, es könnte also je nach Umfang ratsam sein, die tatsächliche Funktionalität aus den Basis-Klassen in Template-unabhängige Funktionen herauszufaktorisieren.

Möglicherweise war diese Lösung für den einen oder anderen schon immer offensichtlich, ich habe sie bis heute nirgends gefunden.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
anonym
Beiträge: 79
Registriert: 15.07.2009, 07:35
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von anonym »

Schau dir mal im Effects11-Framework die Datei 'EffectVariable.inl' an. Kannte ich davor auch nicht.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von CodingCat »

Tatsache, die machen das genauso. Interessanterweise ist es nicht mal erforderlich, die Sandwich-Templates (hey, ist das ein guter Name? :P ) vollständig im Header zu definieren - virtuelle Methoden erzwingen (zumindest in der Praxis) eine sofortige implizite Instanziierung ihrer selbst, bei Definition der virtuellen Methoden in einer einzigen Übersetzungseinheit werden deshalb bereits alle virtuellen Methoden kompiliert und anschließend in allen Übersetzungseinheiten vom Linker korrekt aufgelöst.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Jörg hat geschrieben:Pro Dreieck: Manueller fetch ueber Primitive-ID?
Ja klar m]
Und ich habe ohne Witz schon versucht, jedes Dreieck als Instanz zu verarbeiten und den Textur-Index als PER_INSTANCE_DATA zu setzen :D
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

Da es hier keinen Link-Thread gibt, kommt's eben in den Anti-Jammer-Thread:
http://www.danielmoth.com/Blog/C-Accele ... elism.aspx

Integration in Visual Studio ähnlich wie OMP? Benutzung wie die STL? Offene Spezifikation? HAL? Ja. Me Gusta. (Mal sehen, was da am Ende rauskommt. Und ob man kein hardwarespezifisches Tuning benutzen muss, um eine anständige Performance zu erreichen.)
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

http://www.danielmoth.com/Blog/C-Accelerated-Massive-Parallelism.aspx hat geschrieben:9. builds on DirectX (and DirectCompute in particular) which offers a great hardware abstraction layer that is ubiquitous and reliable.
builds on […] DirectCompute […] which offers a great hardware abstraction layer that is […] reliable.
DirectCompute
great hardware abstraction
reliable
Bild

Naja gut, wenn es nun über C++ läuft statt über diesen unsäglichen HLSL-Compiler, ist schonmal die Hälfte der Bugs weg. Aber der Gedanke an AMDs Treiber jagt mir immernoch kalte Schauer durch die Speiseröhre. Achja: Warum haben die eigentlich in den letzten sechs Monaten keine Aktualisierung für den GPU Shader Analyzer freigegeben?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Lynxeye
Establishment
Beiträge: 145
Registriert: 27.02.2009, 16:50
Echter Name: Lucas
Wohnort: Hildesheim
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Lynxeye »

Tja, das hat auch AMD inzwischen eingesehen. Die nächste Generation von AMD Hardware wird wieder auf skalare Shader Einheiten setzen, statt dem VLIW Kram, den sie nie voll unter Kontrolle gebracht haben.

Aber wieso landet sowas schon im Anti-Jammer-Thread?
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

Lynxeye hat geschrieben:Aber wieso landet sowas schon im Anti-Jammer-Thread?
Wie gesagt, ich hätte es in einem wie auch immer gearteten Linkthread gepostet, aber es gibt hier keinen (vielleicht wäre aber einer ganz sinnvoll, eben als Mittelweg zwischen Jammer- und Anti-Jammer-Thread). Extra einen aufmachen wollte ich aber nicht. (Wenn die Moderatoren das anders sehen, einfach oben abtrennen.)

Warum ich das ursprünglich in den Anti-Jammer-Thread gepostet habe, ist doch klar: Zumindest kocht jetzt nicht mehr jeder sein eigenes Süppchen. Und die aufgeführten Punkte sehen ganz viel versprechend aus -- was hinten raus kommt, ist natürlich eine andere Frage.

Wenn jemand mehr dazu lesen möchte, habe ich hier einen etwas weiterführenden Blogpost gefunden. Das nächste Informationshäppchen wird wohl erst kommen, wenn das Video von der Keynote auf Channel 9 kommt.
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Wow! Soo viele bunte Punkte kann man jetzt berechnen … aber am meisten hat mich beeindruckt, dass der auf Knopfdruck alles schneller gemacht hat! Krass, was man heute alles machen kann!

Nein, im Ernst: Die Minute, in der tatsächlich über die Implementierung in C++ geredet wurde, klang erstmal nicht verkehrt. Mal weiterverfolgen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

For your convenience habe ich mal den ganzen Code abgetippselt.

Code: Alles auswählen

void MatrixMult( float* C, const vector<float>& A, const vector<float>& B, 
                 int M, int N, int W )
{
  for (int y = 0; y < M; y++)
    for (int x = 0; x < N; x++) {
      float sum = 0;
      for(int i = 0; i < W; i++)
        sum += A[y*W + i] * B[i*N + x];
      C[y*N + x] = sum;
    }
}

Code: Alles auswählen

void MatrixMult( float* C, const vector<float>& A, const vector<float>& B, 
                 int M, int N, int W )
{
  array_view<const float, 2> a(M, W, A), b(W, N, B);
  array_view<writeonly<float>, 2> c(M, N, C);

  parallel_for_each(c.grid, [=](index<2> idx) restrict(direct3d) {
    float sum = 0;
    for(int i = 0; i < a.x; i++)
      sum += a(idx.y, i) * b(i, idx.x);
    c[idx] = sum;
  });
}
Und drei zusätzliche Bilder gibts hier.
joggel

Re: Anti-Jammer-Thread

Beitrag von joggel »

Scheint ne interessante Sache zu sein...

MyAntiJammerBeitrag:
Ich freu' mich einfach mal, weil das end- und aussichtslose "rumgehacke" anscheinend langsam mal ein Ende hat! :P
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Anti-Jammer-Thread

Beitrag von eXile »

Keynote online!

http://channel9.msdn.com/Events/AMD-Fus ... 11/KEYNOTE

Nachtrag: So, gerade angeschaut. Extreme Anschauempfehlung. Auch wenn mir die GPU-Cloud doch Sorgen bereitet hat ;)
Antworten