Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.11.2013, 11:33

ca. 300 Millionen Shorts sinnvoll speichern

Hallo liebes Forum,

Ich hoffe ich bin im richtigen Unterforum gelandet.

Mein Problem: Eine Formel spuckt mir {i = 6 (n-2) n+8, 2^x+1 = n} 3d-Punkte aus, wobei mehr als x=12, also {i = 100663298, n = 4097, x = 12} vorerst nicht nötig sein wird. Jeder Punkt besitzt 3 Dimensionen, die jeweils zwei Bytes an Größe fassen. Es sollen ausschließlich die Punkte und keine Verbindungen zwischen den Punkten oder gar Flächen gespeichert werden können.

Zuerst dachte ich an Grafikformate, aber da werden meist 2 Byte für ein ganzes Pixel veranschlagt, die ich gern pro farbkanal hätte.

Rentiert es sich in diesem Fall ein eigenes Dateiformat zu beschreiben?

Vielen Dank für euere Hilfe
Cheiron

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

02.11.2013, 11:37

Mir ist absolut nicht klar was du da überhaupt vor hast. Ist für das Problem vielleicht auch erst mal völlig egal. Du könntest sie theoretisch einfach in eine Datei rein schreiben. Du schreibst einfach die Bytes für alle 3 Dimensionen nacheinander in die Datei. Beim einlesen weißt du, immer 6 Byte nacheinander gehören zusammen zu einem Punkt wobei jeweils 2 Byte eine Komponente beschreiben. Das wäre doch das einfachste und Platzsparend wäre es auch.

edit: Wenn du bestimmte Annahmen über die Punkte machen kannst kannst du das ganze vielleicht sogar noch verkleinern. Wenn die Punkte zueinander immer den selben Abstand haben und keine Lücken im ganzen vorhanden sind, so musst du nicht unbedingt jeden Punkt abspeichern, sondern nur Start-, Endpunkt und den Abstand dazwischen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

02.11.2013, 11:44

Was genau ist das für eine Formel? Wenn du die Punkte einfach ausrechnen kannst, wieso musst du sie dann überhaupt speichern?

4

02.11.2013, 11:44

Danke für die schnelle Antwort.

@Schorsch: Das ist aus mejner Problemschilderung vllt nicht ganz ersichtlich geworden, aber die Kenntnis von x ist sehr wichtig fürs auslesen. Da könnte ich in dem Fall des allererste byte für x reservieren.
Also meinst du auch ich sollte mich an nem eigenen Format versuchen?

@dot: Die Berechnung der Punkte ist zeitintensiv und ich muss nachher eh nur teile der datei auslesen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Cheiron« (02.11.2013, 11:51)


eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

5

02.11.2013, 11:57

Die Berechnung der Punkte ist zeitintensiv und ich muss nachher eh nur teile der datei auslesen.

Ohne ein wirkliches Profiling gemacht zu haben, bezweifle ich dass du ein "Performance" Problem hast. Harddisk Zugriffe sind auch sehr Zeit intensiv, während CPUs Milliarden von Berechnungen pro Sekunde machen können.
Und da du ja nur gewisse Punkte wissen musst, sollte man die Brechnung ja auch minimal halten können. ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

6

02.11.2013, 12:18

Ohne ein wirkliches Profiling gemacht zu haben, bezweifle ich dass du ein "Performance" Problem hast. Harddisk Zugriffe sind auch sehr Zeit intensiv, während CPUs Milliarden von Berechnungen pro Sekunde machen können.
Und da du ja nur gewisse Punkte wissen musst, sollte man die Brechnung ja auch minimal halten können.
Das Problem ist, dass die eigentliche arbeit dann erst kommt, wenn die Grundpunkte berechnet sind.
Aber um sicher zu sagen, was effektiv ist müsste ich die Berechnungsschritte fertig haben um dann Ressourcentests zu machen.
Sicher kann ich sagen, dass minimal die falsche größenordnung ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

02.11.2013, 12:25

Wie aufwändig ist die Berechnung eines einzelnen Punktes? Wie viele Punkte werden zu jedem Zeitpunkt so in etwa benötigt?

8

02.11.2013, 12:39

Mehrere Algorithmen müssen die Punkte jeweils rekursiv durchlaufen. Also ja die Berechnung ist nicht trivial.

Circa 250000 Punkte werden maximal auf einmal benötigt, in der Regel weniger.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

02.11.2013, 12:50

Lasst ihn doch das bissl Krempel in einer Datei speichern, wenn er das will. Alle Punkte binär hintereinander rein, 600MB, fertig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

10

02.11.2013, 12:53

100 Mio Punkte zu je 3xshort sind doch stressfrei im Hauptspeicher unterzubringen. Generier die Punkte, schreibe den Gesamtspeicherblock einfach binär auf Platte und lies ihn auch wieder im Ganzen. Problem gelöst, 10min Arbeit.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige