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.

Re: Jammer-Thread

Beitragvon MasterQ32 » 10.03.2017, 01:32

Alexander Kornrumpf hat geschrieben:Bin ich leider nicht im Thema. Hast du einen Link?

Leider nein, das zu lösende Problem kennen zur Zeit nur mein Betreuer und ich, werde aber wohl demnächst mal einen Thread dazu aufmachen und ein bisschen aus dem Nähkästchen plaudern, was die Programmierung einer "völlig anderen" Computerarchitektur angeht.

Dass das für dich ein Problem ist deutet eigentlich stark auf ein Problem an deinem Ende.

Ich habe einen Assembler, welcher "guten" Code ausspucken soll, also Code, der möglichst wenig Blöcke (Eine Aneinanderreihung von bis zu 11 Befehlen) verwendet. Die Position eines Blockes entscheidet stark über den Inhalt in diesem Block und alle diesen referenzierende Blöcke, also der totale Dependency-Wahnsinn. Denn durch die Inhaltsänderung eines davon abhängigen Blockes ändern sich wieder die Inhalte aller davon abhängigen Blöcke (rinse and repeat!). Das ganze lässt sich meiner aktuellen Einschätzung nur optimal lösen, in dem man alle Möglichkeiten durchprobiert. Oder man löst das Ganze eben etwas abkürzt und probiert zufällige Permutationen und behält die beste.
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Alexander Kornrumpf » 10.03.2017, 09:27

MasterQ32 hat geschrieben:Das ganze lässt sich meiner aktuellen Einschätzung nur optimal lösen, in dem man alle Möglichkeiten durchprobiert. Oder man löst das Ganze eben etwas abkürzt und probiert zufällige Permutationen und behält die beste.


Sowas in der Art habe ich befürchtet und ich möchte argumentieren, dass du hier einen Denkfehler machst. Wenn du sonst nichts über das Problem weißt, ist es egal ob du 10.000 zufällige Permutationen ausprobierst oder die 10.000 ersten Permutationen nach einem System (lexikographisch o. ä.). Die Wahrscheinlichkeit dass die "richtige" oder "eine gute" darunter ist, ist gleich. Einsichtig, wenn man drüber nachdenkt? Wenn du einen RNG gefunden hast unter dessen ersten 10.000 Permutationen eine gute ist, aber nicht sagen kannst warum, dann hast du im Grunde nicht sehr viel erreicht.

Damit randomisierte Suche überhaupt Sinn macht, braucht es irgendeine Art von Struktur im Suchraum, welcher der Algorithmus (mit etwas Unschärfe, dafür der Zufall) folgen kann. Wenn durch einen unglaublichen kosmischen Zufall die Struktur deines Suchraums auf die Struktur eines bestimmten PRNG passt, dann würde ich alles andere stehen und liegen lassen und DAS weiter untersuchen, denn es ist mit Sicherheit interessanter als was auch immer du eigentlich vorhattest. Ist aber schwer vorstellbar, wesentlich wahrscheinlicher ist es, dass du einfach einen Glückstreffer gelandet hast und auf anderen Instanzen das Problems genauso lange brauchst wie der andere PRNG. Oder dass doch ein bug in deinem Code ist.

Das Standardvorgehen, unterstellt, obiges Wunder wäre nicht geschehen, wäre dass du mal darüber nachdenkst was du über die Struktur deines Suchraums weißt und mit dieser Information simulated annealing oder einen genetischen Algorithmus oder einen Ameisenalgorithmus o. ä. fütterst.
Alexander Kornrumpf
Moderator
 
Beiträge: 1617
Registriert: 25.02.2009, 14:37

Re: Jammer-Thread

Beitragvon MasterQ32 » 10.03.2017, 10:14

ICh glaube, ich muss tatsächlich mal den Post über die Arbeit anfangen, damit dürfte dann einiges klarer werden. Ich beschäftige mich jetzt seit über nem halben Jahr mit der Maschine und fange langsam an, zu verstehen, wie man das Gerät programmiert... In der Maschine ist so ziemlich alles anders, als in anderen Computern... :)
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Alexander Kornrumpf » 10.03.2017, 10:53

Einerseits ja, andererseits gelten die Sachen die ich gesagt habe (natürlich nur als grobe Skizze zu verstehen) für jedes Optimierungsproblem und damit vermutlich auch für deine Maschine, egal wie sie funktioniert. Gerade wenn deine Maschine auf irgendeine Weise besonders chaotisch ist (was hier immer als Argument mitzuschwingen scheint) sollte es im Durchschnitt egal sein, welche 10.000 Permutationen du nimmst. Wenn du dagegen weißt, dass es nicht egal ist, muss dieses Wissen irgendwie in den Optimierungsalgorithmus einfließen, damit er funktioniert. Das ist praktisch ein Naturgesetz :)
Alexander Kornrumpf
Moderator
 
Beiträge: 1617
Registriert: 25.02.2009, 14:37

Re: Jammer-Thread

Beitragvon Schrompf » 10.03.2017, 11:22

Um hier mal was Richtiges zu jammern:

Ich (und die halbe Firma) sollen einen Code Generator benutzen. Ein Python-Script, dass ein C++-Executable aufruft, dass irgendwie eine Java-Rich Client Platform-Anwendung ausm Eclipse-Umfeld startet, die eine Domain Specific Language einfachster Sorte parst und daraus Code generiert. Das Ding läuft leider nur in der massiv veralteten "offiziellen" Firmen-VM, aber nicht in all den VMs, die wir uns zum täglichen Arbeiten bauen. Alle Dateien kommen aus diversen Git-Repos gerollt und sind damit identisch. Aber irgendwas in der VM ist anders, so dass es dort funktioniert und überall sonst nicht. Grmpf.

Die Fehlermeldung sieht übrigens so aus:
Code: Ansicht erweitern :: Alles auswählen
!SESSION 2017-03-09 10:29:13.816 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_80
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Framework arguments: idl/api.fidl -d ./definition/public -sk
Command-line arguments: -os linux -ws gtk -arch x86_64 idl/api.fidl -d ./definition/public -sk

!ENTRY org.eclipse.equinox.launcher.win32.win32.x86 2 0 2017-03-09 10:29:15.455
!MESSAGE Could not resolve module: org.eclipse.equinox.launcher.win32.win32.x86 [34]
Unresolved requirement: Require-Capability: eclipse.platform; filter:="(& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))"


!ENTRY org.eclipse.osgi 4 0 2017-03-09 10:29:15.456
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "org.genivi.commonapi.console.application" could not be found in the registry. The applications available are: org.eclipse.emf.codegen.CodeGen, org.eclipse.emf.codegen.JMerger, org.eclipse.emf.codegen.ecore.Generator, org.eclipse.emf.mwe.core.WorkflowRunner, org.eclipse.equinox.app.error, org.eclipse.jdt.core.JavaCodeFormatter, org.eclipse.jdt.core.JavaIndexer.
at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
...


Und viele Lösungen im Internet sprechen von "Klick die Dependency an und exportiere neu". Tja... nur leider hab ich die Quellen nicht. Andere Ideen empfehlen, obskure kleine Verzeichnisse zu löschen und dann neu zu exportieren. Grmpf.

Ganz zu schweigen davon, dass ich in der Zeit, die ich jetzt in diesen Mist verschwendet habe, auch nen Parser hätte From Scratch neuschreiben können.
Häuptling von Dreamworlds. Baut an was Neuem. Hilft nebenbei nur höchst selten an der Open Asset Import Library mit.
Benutzeravatar
Schrompf
Thomas Ziegenhagen
Moderator
 
Beiträge: 3684
Registriert: 26.02.2009, 00:44
Wohnort: Dresden
Benutzertext: Lernt nur selten dazu

Re: Jammer-Thread

Beitragvon MasterQ32 » 10.03.2017, 14:40

Alexander Kornrumpf hat geschrieben:Einerseits ja, andererseits gelten die Sachen die ich gesagt habe (natürlich nur als grobe Skizze zu verstehen) für jedes Optimierungsproblem und damit vermutlich auch für deine Maschine, egal wie sie funktioniert. Gerade wenn deine Maschine auf irgendeine Weise besonders chaotisch ist (was hier immer als Argument mitzuschwingen scheint) sollte es im Durchschnitt egal sein, welche 10.000 Permutationen du nimmst. Wenn du dagegen weißt, dass es nicht egal ist, muss dieses Wissen irgendwie in den Optimierungsalgorithmus einfließen, damit er funktioniert. Das ist praktisch ein Naturgesetz :)

Das Problem ist, dass ich mich seit nem ca. nem viertel Jahr mit dem speziellen Problem beschäftige, seit zwei Wochen intensiv und ich immer noch keine klare Struktur oder überhaupt eine verlässliche Vorangehensweise finde. Ich kann halt Code und Daten nicht einfach verschieben, da sich durch Verschiebung des Codes der Code an mehreren Stellen gleichzeitig verändern muss, um wieder auf ein funktionierendes Programm zu kommen. Das heißt, die Verschiebung von einem einzigen Codeblock kann mit etwas Pech schon gar nicht möglich sein, da sonst das ganze Programm wie ein Kartenhaus zusammenfällt und dann gar nicht mehr übersetzbar ist. Einen Block verschieben läuft im schlimmsten Fall auf alle Blöcke verschieben raus, aber mindestens auf einen.
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Chromanoid » 11.03.2017, 04:21

@Schrompf: OSGi ist kacke. Eclipse ist auch ein Moloch... Mal abgesehen von der Chaos-Plugin-Architektur ist der duale Build der absolute Horror, aber das Problem haben ja sehr viele IDEs... Ich würde raten, dass da irgendwo über ein Modul ne harte Abhängigkeit auf Win-32 reinkommt, in diesem komischen GENIVI-Repository wäre das vielleicht diese yamaica-Komponente, mal geschaut ob die irgendwie geladen werden soll? - aber das hast Du Dir sicher auch schon gedacht...
Benutzeravatar
Chromanoid
Christian Kulenkampff
Moderator
 
Beiträge: 3690
Registriert: 16.10.2002, 19:39
Wohnort: Lüneburg
Alter Benutzername: atr_23

Re: Jammer-Thread

Beitragvon Krishty » 13.03.2017, 11:19

Argh, Multithreading. Jedes verdammte Mal.

Habe meine UI asynchron gemacht. Die ist schnell geworden. So verdammt superschnell, dass sogar ich keinen Optimierungsbedarf mehr sehe.

Dafür stürzt einer von 600 Vorgängen mit kaputten Zeigern ab. Natürlich reproduziert es nicht; natürlich sehen die Fehler völlig unerklärlich aus.

Jedes verdammte Mal.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon gdsWizard » 15.03.2017, 09:22

Krishty hat geschrieben:Habe meine UI asynchron gemacht.


Warum hast Du deine UI asynchron gemacht ? Nur das Rendering oder auch anderes ?
gdsWizard
Thomas Mittelsdorf
Establishment
 
Beiträge: 213
Registriert: 04.02.2005, 10:12
Wohnort: Meiningen
Benutzertext: www.gamedevstudio.com

Re: Jammer-Thread

Beitragvon Krishty » 15.03.2017, 11:41

Bisher nur das Laden von Dateien. Das soll man abbrechen können, und während des Ladens soll die UI vernünftig reagieren (maximieren, verschieben, Rendern, schließen, etc).

[Der Absturz war ein Dangling Pointer in einer Message Queue, nachdem eine Datei beim Laden abgebrochen wurde und der nächsten Datei vom Memory Manager exakt der selben Pointer zugewiesen wurde.]

Rendering ist momentan noch schnell genug, und ich muss in D3D mit Deferred Contexts anfangen, um das asynchron zu machen – das nervt. Wird aber irgendwann kommen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon joggel » 15.03.2017, 11:45

Ich bin so undiszipliniert beim Software-Design.
So lange die Ansprüche von vorn herein klar sind, ist alles schick. Sollen weiter funktionalitäten hinzukommen wird der Code zusehenst unübersichtlich und hässlich.
Eigentlich müßte ich da immer re-designen.....aber meine Disziplin :(
bald mit neuem Avatar
Benutzeravatar
joggel
Establishment
 
Beiträge: 1295
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: Jammer-Thread

Beitragvon Krishty » 15.03.2017, 14:51

Alle meine Visual Studios haben fast zeitgleich beim Kompilieren gejammert: cannot write to PDB, check access rights or insufficient disk space (in der Art).

Natürlich besteht kein Problem, und nach Rebuild hat das Kompilieren wieder normal funktioniert. Ich befürchte, dass irgendwo ein Timer abgelaufen ist (oder dass CIA/NSA jetzt endgültig die Kontrolle über meinen Rechner übernommen haben).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 16.03.2017, 00:09

Anforderungen an eine Funktion, die floats als Text einliest:
  • stürzt bei ungültigen Buchstaben oder Dateiende nicht ab
  • kann +, -
  • kann fehlende Ziffern vor Dezimalpunkt, z.B. .1 oder ,1
  • kann Komma statt Punkt und warnt dann (aber nur, wenn ein Flag übergeben wird)
  • kann Exponentschreibweise
  • gibt bei Müll INF oder NAN zurück (z.B. INF bei 1.e+19999999)
  • ist halbwegs genau
Ich weiß jetzt schon, dass das der hässlichste Code des jungen Jahres 2017 wird.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon B.G.Michi » 16.03.2017, 00:40

Ließe sich bestimmt ganz hübsch per regex lösen. Performant geht aber vermutlich anders ;)
Benutzeravatar
B.G.Michi
Establishment
 
Beiträge: 160
Registriert: 07.03.2006, 21:38
Alter Benutzername: B.G.Michi

Re: Jammer-Thread

Beitragvon Krishty » 16.03.2017, 22:21

Warum der Artikel mit Ace Combat nicht weitergeht? Wegen dem scheiß Win32-Tree View.

Ich habe die Levels schön extrahiert, aber halt mit einem Objekt für jede Kachel der Landschaft. Macht fast 100.000 Objekte pro Level. Mein Tool lädt alles in einen Win32-Tree View (wie jedes Modeling-Tool, das es gibt), und der ist … langsam.

1. Hinzufügen: Dauert für 100.000 Items ungefähr 40 Minuten. Der Trick ist, ihn von hinten nach vorn zu befüllen. (Warum? Raymond Chen erklärt.) Dann ist man nach zwei Sekunden fertig. Tolles Design!

2. Löschen: Dauert für 100.000 Items ebenfalls ungefähr 40 Minuten. Aber: Es gibt keinen Trick. Was ich schon vergeblich ausprobiert habe:
  • TreeView_DeleteAllItems()
  • TreeView_DeleteItem(TVI_ROOT)
  • TreeView_DeleteItem(NULL)
  • TreeView_DeleteItem() von vorn nach hinten
  • TreeView_DeleteItem() von hinten nach vorn
  • TreeView_DeleteItem() von innen nach außen
  • LockWindowUpdate()
  • vor dem Löschen unsichtbar schalten, danach wieder sichtbar
Aber nein, es ist alles gleich langsam. Guess what? Wenn’s meiner gewesen wäre, wären da eh keine 100.000 einzelnen Allokationen, sondern nur ein großer Pool, den ich wegschmeißen könnte, und die Sache wäre sofort erledigt.

Jedenfalls muss ich jetzt jedes Mal, wenn ich in den Levels arbeite, meine Tools via Task Manager killen, damit sie nicht 45 Minuten weiterlaufen. Sowas macht mir die Motivation kaputt und nun habe ich eben keinen Bock mehr. Wenn ich mein eigenes OS geschrieben habe, nehme ich die Sache wieder auf.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Jonathan » 16.03.2017, 22:51

Krishty hat geschrieben:Ich habe die Levels schön extrahiert, aber halt mit einem Objekt für jede Kachel der Landschaft. Macht fast 100.000 Objekte pro Level. Mein Tool lädt alles in einen Win32-Tree View (wie jedes Modeling-Tool, das es gibt), und der ist … langsam.

Ja ok, aber wie es im Artikel schon so schön heißt: The treeview isn't optimized for this case because you don't optimize for the case where somebody is mis-using your system. Ich meine, auf welche Art ist ein Tree-View mit so vielen Elementen denn sinnvoll?
Und wenn man dann sagt "der Benutzer soll sich ja nicht alles ansehen, sondern sich durch die einzelnen Ebenen zu einem ganz bestimmten Node klicken können", könnte man dann nicht den Treeview dynamisch befüllen? Es müsste da doch eigentlich ein OnExpand Event oder ähnliches geben (Soetwas habe ich mal in Qt für ein Menü gemacht, das halt die zuletzt geöffneten Dateien angezeigt hat - das wurde dann bei jedem Öffnen neu befüllt).
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
Establishment
 
Beiträge: 1167
Registriert: 04.08.2004, 20:06

Re: Jammer-Thread

Beitragvon Krishty » 16.03.2017, 22:55

Man kann ihn nur in die Tiefe virtualisieren, nicht in die Länge. Um die 200×200 Grundkacheln komme ich also nicht herum.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 20.03.2017, 12:25

Montaaaag! Guten Morgen, Jammer-Thread! Fuck Microsoooooft!

Habe auf die neuen PDB-Formate von Visual Studio 2015 umgestellt (/DEBUG:FASTLINK), die ja so viel schneller sein sollen. Ich weiß nicht ob sie’s sind, aber die ganze DbgHelp API (SymGetLineFromAddrW64() usw.) hört auf zu funktionieren (im Sinne von „vier Access Violations pro Aufruf“). Meine Debug-Hilfsfunktionen sind alle kaputt. PIECE OF SHIT, also alles reverten
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon MasterQ32 » 20.03.2017, 15:08

Javascript-basierte Seiten sind scheiße zu automatisieren....
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Krishty » 20.03.2017, 22:24

MasterQ32 hat geschrieben:Javascript-basierte Seiten sind scheiße
fixed that for you

————

Boah hab’ ich wieder ’nen Kragen:
ltcg.png

LTCG:incremental ist bei Visual C++ seit einiger Zeit Standardeinstellung in Release Builds. FUCK. FUCK FUCK FUCK FUCK FUCK.

Zwei Gründe, das auf keinen Fall zu benutzen:
  1. Es ist keine volle Optimierung. Der Optimizer hält sich in dem Modus mit Inlining und Constant Propagation zurück, damit möglichst wenig neu optimiert werden muss, wenn man den Code nochmal ändert. Ihr liefert also keine voll optimierte EXE an die Kunden aus.
  2. Ohne Rebuild ist die EXE voller Müll. Der Linker hängt einfach alle Änderungen immer wieder hinten dran bis man Clean oder Rebuild aufruft. Wer also vor der Auslieferung 20 Mal was ändert und weder Clean noch Rebuild aufruft, liefert eine sechs Mal so große EXE aus, in der die 19 letzten Änderungen tot herumliegen.
Boah ist das zum Kotzen. Diese scheiß Mother Fuckers haben mir mit ihrer stillen Änderung das letzte Dutzend ausgelieferter Programme verhagelt.

NATÜRLICH war ich zu faul, die Ursache für den Größen- und Leistungsunterschied (grundsätzlich kleiner weil weniger Inlining; grundsätzlich langsamer aus dem selben Grund) zu ermitteln, weil, fuck, ich kann ja nicht den ganzen Tag optimieren und muss was fertigkriegen und sie haben halt einfach was am Compiler geändert, oder? NEIN SIE HABEN EINFACH ALLES KAPUTTGEMACHT DIE SCHWEINE

Nach Windows-Update sind Compiler-Updates also das nächste, was ich nicht mehr installieren darf. FUCK THIS SHIT

Nachtrag: Sie wollten es für Update 2 beheben, aber es ist immernoch drin?!
Zuletzt geändert von Krishty am 26.03.2017, 03:41, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon MasterQ32 » 21.03.2017, 02:35

fixed that for you

Danke, Recht hast du!

und ich bin grade irgendwie echt froh, hier mit gcc/clang rumzuwerkeln, da rantest du nicht so drüber rum
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Krishty » 21.03.2017, 10:46

Die benutze ich ja auch garnicht ;)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon kaiserludi » 21.03.2017, 17:03

Krishty hat geschrieben:Es ist keine volle Optimierung. Der Optimizer hält sich in dem Modus mit Inlining und Constant Propagation zurück, damit möglichst wenig neu optimiert werden muss, wenn man den Code nochmal ändert. Ihr liefert also keine voll optimierte EXE an die Kunden aus.

Das macht das als Default für Releasebuilds reichlich dämlich, denn Releasebuilds sind ja gerade dazu gedacht, erst gebaut zu werden, wenn der Code releasefertig ist und man nicht noch mitten in der Entwicklung eines neuen Features ist.
Auf Entwicklungsrechners sollte man eigentlich nur die Debug Config bauen, außer, man muss akut was optimieren und die Performance testen, aber dann will man ja wieder die volle Optimierung haben.
Krishty hat geschrieben:Ohne Rebuild ist die EXE voller Müll. Der Linker hängt einfach alle Änderungen immer wieder hinten dran bis man Clean oder Rebuild aufruft. Wer also vor der Auslieferung 20 Mal was ändert und weder Clean noch Rebuild aufruft, liefert eine sechs Mal so große EXE aus, in der die 19 letzten Änderungen tot herumliegen.!

Und damit hast du gleich noch einen Grund mehr, warum du nicht in deiner lokalen Codebase, in der du auch entwicklelst, Releases bauen solltest, sondern diese in einem Clean Checkout durchführen solltest, idealerweise via Autaamted Build Script und ausgeführt durch eine spezialisierte Buildsoftware und auf dedizierter Hardware.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:
kaiserludi
Establishment
 
Beiträge: 457
Registriert: 18.04.2002, 15:31

Re: Jammer-Thread

Beitragvon Krishty » 21.03.2017, 23:22

kaiserludi hat geschrieben:Und damit hast du gleich noch einen Grund mehr, warum du nicht in deiner lokalen Codebase, in der du auch entwicklelst, Releases bauen solltest, sondern diese in einem Clean Checkout durchführen solltest, idealerweise via Autaamted Build Script und ausgeführt durch eine spezialisierte Buildsoftware und auf dedizierter Hardware.
Bei den großen Programmen wird das natürlich so gemacht; ich habe aber auch ein Dutzend kleinerer Projekte, die quasi Standalone-EXEs sind und für die es weder Source Control gibt, noch wären Build Scripts erforderlich. Und da trifft das natürlich richtig.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 22.03.2017, 15:00

Baue gerade Objektnamen in meinen TreeView ein – was man nicht alles in CAD-Dateien findet …

hangs.png
hangs.png (3.75 KiB) 640-mal betrachtet
Zuletzt geändert von Krishty am 24.03.2017, 02:39, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon joggel » 22.03.2017, 15:40

Ich bekomm langsam ein Knoten im Kopf!!!!
SINNLOS hier, echt!!!

CSV-Dateien parsen und die Daten verwenden ist ja nicht sooo schwer.
Diese CSV-Datei hat einen Header.
Nun verändert sich der Header aber immer mal wieder zwischen den Versionen....
Ändert die Anzahl der Einträge, die Reihenfolge der Einträge und manchmal auch die Bezeichnung der Einträge!!!
Muß ich immer in der software anpassen.
Damit es aber richtig behindert wird, soll auch noch die Abwärtskompatibilität erhalten werden!!!! :x :x :x :x

ich kann und will nicht mehr....
bald mit neuem Avatar
Benutzeravatar
joggel
Establishment
 
Beiträge: 1295
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: Jammer-Thread

Beitragvon Krishty » 22.03.2017, 17:47

Oh, es hat wieder jemand Probleme mit 32-Bit-BMPs. Na sowas.

Die Bilder stammen aus Photoshop, und im Zusammenhang mit BMP ist das übrigens bekannt dafür, dass ihre 32-Bit-Exporte nicht mit der Spezifikation kompatibel sind (ein DWORD zu viel im Header). Das scheint aber nicht ihre Schuld zu sein, sondern ein Microsoft-Techniker scheint ihnen vor Jahrzehnten eine falsche Spezifikation gegeben zu haben und dann konnten sie es nicht mehr korrigieren weil die ganzen Content Pipelines der Spieleentwickler auf das falsche Format zugeschnitten waren. Möglicherweise haben sie es auch mit einem Format verwechselt, das Microsoft für Windows CE 5.0 entwickelt hat (und danach wieder eingestellt hat).

Jedenfalls zähle ich in meinem Code sieben verschiedene Header-Formate und vier verschiedene Kompressionsmethoden, und nothings hat recht wenn er sagt, dass sich BMP immer sehr einfach anhört aber äktschuälly eines der furchtbarsten Formate überhaupt ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 26.03.2017, 18:43

Wenn man Visual C++ auf Größe optimieren lässt statt auf Geschwindigkeit, arbeitet der Optimizer besser. Insbesondere das alte Problem „ich lese zwei Mal aus einem Member, und der Compiler erzeugt dafür auch tatsächlich zwei Lade-Operationen, statt in einem Register zwischenzuspeichern“ tritt viel seltener auf.

Ich glaube nicht, dass das eine rationale Entscheidung war („wenn wir zwei Mal laden, lässt sich die Ausführung besser parallelisieren“ oder so).

Microsoft empfiehlt seit Jahren, gar nicht mehr auf Größe oder Geschwindigkeit zu optimieren, sondern ausschließlich Profile-Guided Optimization zu nutzen. Die wiederum optimiert nur die inneren Schleifen auf Geschwindigkeit, und den großen Rest des Programms auf Größe. Naturgemäß ist dann das meiste Disassembly, das man sieht, Ergebnis der Größenoptimierung, und vielleicht haben sie deshalb mehr Ressourcen investiert, die zu verbessern.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6347
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Tiles » 27.03.2017, 08:25

Sommerzeit. Im Frühling. :shock:
Free Gamegraphics, Freeware Games http://www.reinerstilesets.de
Die deutsche 3D Community: http://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
 
Beiträge: 1148
Registriert: 11.01.2003, 14:21

Re: Jammer-Thread

Beitragvon MasterQ32 » 28.03.2017, 12:20

Krishty, das passt doch sicher perfekt in deine Sicht zu VS: https://blog.fefe.de/?ts=a6278e32
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

VorherigeNächste

Zurück zu Allgemeines Talk-Brett

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast