Heute so gecodet...

Es gibt 2.379 Antworten in diesem Thema, welches 480.600 mal aufgerufen wurde. Der letzte Beitrag (1. November 2025 um 13:53) ist von Unseen.

  • Dim MaxThreads As New ParallelOptions

    MaxThreads.MaxDegreeOfParallelism =31

    Da muss man auch erst mal drauf kommen, dass das ein PARALLEL.FOR beeinflusst... Microsoft ist also seiner Linie über Jahrzehnte treu geblieben, dass nicht alles eindeutig sein muss :lol27:

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Dim MaxThreads As New ParallelOptions

    MaxThreads.MaxDegreeOfParallelism =31

    Da muss man auch erst mal drauf kommen, dass das ein PARALLEL.FOR beeinflusst... Microsoft ist also seiner Linie über Jahrzehnte treu geblieben, dass nicht alles eindeutig sein muss :lol27:

    Das hatte mir die KI von Perplexity gesagt. ;)

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Ich würde mal versuchen mindestens 1 Thread mehr zu benutzen. Bei Make wurden damals sogar 2*Kerne+1 empfohlen. Ich denke Du hast Einbrüche, wenn ein Thread fertig ist, und die Daten für den nächsten Thread aufgesetzt werden. Da hast Du dann wohl Aussetzer.

    Ach ja: wie ist die Speicherauslastung? Kannst Du da evtl Rechenzeit gegen Speicher tauschen?

  • Rechenzeit gegen Speicher tauschen? Das ginge nur wenn ich einen Cache bauen würde, sonst gibt es da keine Möglichkeiten.

    Einige kleine Optimierungen haben eben zwei Minuten Ersparnis gebracht. Am Wochenende werde ich weitere Test machen.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Bei Make wurden damals sogar 2*Kerne+1 empfohlen

    Die paar wenigen Threads, die ich bisher programmiert habe, habe ich immer mit Kerne*2 (aber nicht im Sinne von Cores) programmiert. Aber da macht die von Dir erwähnte Thematik keine Probleme, denn die laufen dann Minuten- bis Stundenlang.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Einige kleine Optimierungen haben eben zwei Minuten Ersparnis gebracht. Am Wochenende werde ich weitere Test machen.

    Dauerte der erste Durchlauf noch 12min, so hatte ich gestern mit Optimierungen 10min und später 8min gebraucht.

    Vor dem Schlafen noch ne Idee bekommen, welche noch viel mehr Zeit sparen könnte, sofern die Rechenergebnisse

    brauchbar sind. :)

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Hier mal ein kurzer Zwischenstand zum Thema #BomberfunTournament.

    Da gibt es echt Dinge... die machen mich fertig. Insbesondere, da ich mich mit Bereichen aus dem Spiel auseinandersetze, die damals (also vor 25 Jahren) gar nicht meine waren.

    Mir fehlt da nicht selten komplett das notwendige Fachvokabular, um die Probleme zu beschreiben, die ich hier erlebe.

    Beispiel:

    Zwar habe ich inzwischen raus - und allein daran habe ich TAGE gearbeitet - mit welcher Version (und zwar mit _genau_ der Version) von Blender (nämlich 2.79b) ich in der Lage bin, 3D Assets zu erstellen, sie in ein für mich verarbeitbares x-File Format (.x) zu exportieren (inkl. Animationen), mit einem uralten Tool einzulesen und wieder zu exportieren, damit etwas dabei herauskommt, was unser eigener, proprietärer Editor importieren kann... aber dann das: Sobald ich im Spiel das Bumpmapping-Feature aktiviere, sind alle neuen Assets einfach schwarz; egal, was ich ihnen für Materialfarben im Editor verpasse.

    Ich habe das Thema nun drei Nächte lang durchdacht, in meinem Gedächtnis gekramt, recherchiert, experimentiert, versucht, unsere Arbeitsweise von damals zu rekonstruieren und das Thema sowohl schriftlich versucht irgendwie festzuhalten und auch einem befreundeten Entwickler von damals zu erläutern... und meiner Frau. Im Ergebnis denke ich, es nun geknackt zu haben!

    Bitte melde dich an, um diesen Anhang zu sehen.

    Auf dem Bild ganz gut zu erkennen ist das aktivierte Bumpmapping (sieht man schön am Steinboden und z.B. auch am Biohazzard-Symbol).

    UND: Die blaue, neue Eisbombe ist... nunja: Blau (nicht schwarz) und der Rahmen drum herum ist auch so eisblau + über der Taucherfigur zu sehen: Ein sich drehender Torus - ebenfalls in "bunt".

    Naja... drehen tut er sich noch nicht; das ist ein anderes Problem.

    Bevor ich herausgefunden habe, was da los ist, waren diese Dinger allesamt schlichtweg schwarz.

    Der Trick nun war, dass unsere Game Engine beim Laden der Objekte schlichtweg erwartet, dass es Normal-Maps auf den Dingern gibt... und halt Texturen, die damit überlegt werden können. Im Zweifel genügt also eine einfarbige Textur und eine plane Normalmap im reinen Tangent-Space-Blau. :wink:

    Warum bin ich da vorher nicht drauf gekommen?

    Nun, ich habe zwar gigabyteweise Backups aus der Zeit von damals, aber halt nicht alles.

    Unser erstes Spiel, BomberFUN, kannte noch kein echtes Bumpmapping. Wir haben zwar etwas ähnliches erreicht mittels Graustufen-Heightmaps (Emboss-Bumpmapping, wie ich heute erfahren habe), so dass das auch auf Hardware lief, die keine Shader kannte, aber echte Normalmaps kannte BomberFUN noch nicht. Zudem hat der Editor für BomberFUN ausschließlich .x-Dateien geladen und bearbeitete Ergebniss im hauseigenen .d3d-Format gespeichert.

    Bomberfun Tournament aber kennt echtes Bumpmapping und Normalmaps. UND nutzt eine Weiterentwicklung unserer hauseigenen 3D Engine. Die kommt zwar mit einem eigenen "Editor" daher, der kann aber im Prinzip nichts anderes als .d3d-Dateien aus dem alten Editor laden und im neuen .the-Format speichern.

    In meinen Backups von damals sind also nur noch .the-Dateien im Media-Verzeichnis von Bomberfun Tournament und im Verzeichnis von BomberFUN sind noch die originalen .d3d-Dateien, aus denen sie einst hervorgingen.

    Was fehlt?

    Genau... der Zwischenschritt.

    An einem Punkt in der Zeit haben ein paar Kollegen damals sämtliche .d3d-Dateien manuell im alten Editor angefasst und Normalmaps für sämtliche Texturen und alle 3D Objekte ergänzt, diese gespeichert und dann mit dem neuen Editor ins .the-Format überführt. Nur... genau _diese_ .d3d-Dateien, die also auch Bumpmaps enthalten, die fehlen mir. Deshalb wusste ich schlicht nicht (mehr), dass da ja noch was war, lol.

    Hier kann man das ganz gut sehen:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Unter 001 und 002 sind zwei Texturen: eine white.mft (die schwarz ist, lol) und eine white_nm.mft (die Normalmap).

    In den Multitextureinstellungen ist unter der Texturstufe 1 white.mft ausgewählt (unter Operationen allerdings farblich deaktiviert) und unter Texturstufe 2 steckt die Normalmap.

    In den Körpereinstellungen des Torus ist das Texture Set ausgewählt und das Material; in den Materialeinstellungen sieht man die ausgewählten Farben (Diffus, Ambient, etc.).

    Tja. Und so funktioniert es dann auch im Spiel.

    Zwei Dinge fehlen mir jetzt noch zur Glückseligkeit:

    - Animierte Texturen (sowas haben wir nämlich auch an ein oder zwei Stellen)

    - Animierte Objekte (in den Editor bekomme ich sie schon hinein... und lerne dabei gerade en passent, wie man in Blender Objekte animiert)

    Auf jeden Fall macht es abnorm Spaß, an dem Projekt zu arbeiten. :wink:

  • Hab zum Spaß eine RLE (Lauflängenkodierung) geschrieben. Diesmal hat es funktioniert, im Gegensatz zum Versuch in Z80 Ende der 80er Jahre. :D

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Hab zum Spaß eine RLE (Lauflängenkodierung) geschrieben. Diesmal hat es funktioniert, im Gegensatz zum Versuch in Z80 Ende der 80er Jahre. :D

    Es ist immer schön, wenn der eingepackte Datenstrom nach dem Auspacken mit dem zu erwartenden ursprünglichen übereinstimmt :)

  • Nach durchstöbern alter Bücher fiel mir die Änderung des Zeichensatzes ins Auge.

    Mir kam die Idee verschiedene Männchen zu gestalten und diese so aneinanderreiht

    bis eine flüssige Bewegung entsteht.

    Ich habe quasi ein "Zeichensatzsprite" erstellt.

  • Hab zum Spaß eine RLE (Lauflängenkodierung) geschrieben. Diesmal hat es funktioniert, im Gegensatz zum Versuch in Z80 Ende der 80er Jahre. :D

    Ich habe mir nochmal eine andere Version einer RLE erstellt. Demnach ist es mir gelungen 13107 Bit auf 1594 Bit zu komprimieren. :puhh:

    Laut KI habe ich 87,84% gespart. 8o

    Der in .net eingebaute ZIP braucht 365 Byte, bei mir sind es 1594/8=199,25 Byte. :thumbsup:

    Bei den Bits gibt es aber nur wenige Einer. Bei meinem Test kommt ungefähr auf 85 Nullen eine Eins.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

    Einmal editiert, zuletzt von oobdoo (9. September 2025 um 22:41)

  • Laut KI habe ich 87,84% gespart. 8o

    KI für so eine Berechnung? AUA.

    Alles was man machen muss um den Prozentsatz-Quotienten zu berechnen:

    (gesparte Bytes) / TotalBytes

    Als Prozentsatz: (gesparte Bytes) / TotalBytes * 100

    Calc.exe oder online scientific calculator verwenden:

    Bitte melde dich an, um diesen Anhang zu sehen.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • Schöne Formel, die ich aber bis zur nächsten Anwendung wieder vergessen habe. ;)

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Schöne Formel, die ich aber bis zur nächsten Anwendung wieder vergessen habe. ;)

    Berechnest Du nach dem Tanken Deinen Verbrauch? Ist eine ähnliche Formel. Oder über den Dreisatz dürfte es auch gehen.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Uri, Pui und Pewegetelgleichpehundertstel, meine Lieblingsformeln.

    Pw/G = P/100, mehr muss man nicht wissen. Und Formeln umstellen können, je nachdem, was man davon wissen will, Prozentwert, Grundwert oder Prozentsatz.

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Die "Formel" ist an sich auch ein Dreisatz.

    Ausserdem ist das nichts Spezielles sondern Grundschule Prozentrechnen:

    Auf eine typische Frage wie "Wieviel Prozent des Kuchens habe ich gegessen?" kommt man als Quotient mit:

    Teil / GanzerKuchen

    oder ein bisschen mehr in der Retrothematik:

    "Wieviel Prozent von Pac-Man machen seinen Waka-waka Mund aus?"

    Ich teile den Pac-Man z.B. in 8 Sektoren ein und es wird ersichtlich dass der Mund etwa ein Achtel seiner Fläche ausmachen:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Berechnung: (1/8 Pac-Man) / (1 Ganzer Pac-Man) =  0.125

    Bitte melde dich an, um diesen Anhang zu sehen. (Formel kann man hier eingeben: Bitte melde dich an, um diesen Link zu sehen.)

    in Prozent:

    Bitte melde dich an, um diesen Anhang zu sehen.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • Ärgerlich. Da hat man einen 64Bit Rechner mit 64GB Hauptspeicher zur Verfügung und dazu nur ein StringBuilder.Insert(Int32, String, Int32) = System.OutOfMemoryException. X(

    Jetzt darf ich mit StreamWriter experimentieren. *motz*

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Du musst auch nicht Deine GB-grosse Errata der CPC Version von FruttyMan auch nicht in eine Stringvariable in den Speicher laden. :bgdev

    StringReader und Writer sind doch einfach.

    Nur sicherstellen, dass beim Writer auch geflushed wird, wenn Du sicherstellen willst dass auf die Disk committed wurde bevor Du wieder das File liest/weiterverwendest.

    Gerade bei Threading und anderen zeitsensitiven Tasks musst Du da aufpassen.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • StringReader und Writer sind doch einfach.

    Nur sicherstellen, dass beim Writer auch geflushed wird

    STREAMwriter, nicht StringWriter :wink:

    Bei der Methode .close() flusht .Net aber automatisch. Und alle paar MB. Wenn Herrn Z80 der Stringbuilder nicht reicht, sind es mehr als 2 GB, da flusht Windows dauernd.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".