 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Falco Hirschenberger Guest
|
Posted: Wed Nov 12, 2003 10:47 am Post subject: Welcher Container? |
|
|
Hallo,
Ich möchte ein Prefetching System entwickeln, welches über eine
Iteratorschnittstelle entweder aus dem Speicher oder von Platte, Slices von
großen 3d Bilddaten liest und in einem Prefetchingpuffer speichert, damit
eine Anwendung dann schell auf die schon aufbereiteten Daten zugreifen
kann.
Nun frage ich mich welcher Container für sowas am geeignetsten ist, ich
möchte in einem Intervall um die aktuelle Position im Bild, die Slices
prefetchen.
Ich hatte mir gedacht mit 2 std::deques (eine für jede Richtung) könnte man
sowas machen, aber ich muss ggf. nicht nur Sliceweise, sondern auch größere
"Sprünge machen", ist da eine Deque noch sinnvoll.
Als andere Möglichkeit dachte ich mir eine std::map, mit Index als Schlüssel
und Slice als Wert, dann könnte ich einfach überprüfen ob sich ein index im
Puffer befindet, und die Slices mit dem größten "Abstand" zum aktuellen
Slice löschen. Aber wie sieht es mit der Performance aus?
Beim Laden von Platte macht das nicht so viel aus, weil das ja um
Größenordnungen langsamer ist, aber beim Laden aus dem Speicher sollte
schon eine "flotte" ein-/ausgabe möglich sein. (Wenn es überhaupt Sinn
macht zu prefetchen, muss man halt benchmarken)
Hatte auch schon Dinge wie Ringpuffer angedacht.
Was denkt Ihr?
Mit freundlichen Grüßen
Falco
--
Falco Hirschenberger <hirschen (AT) fraunhofer (DOT) de>
ICQ: 66107367
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Albrecht Fritzsche Guest
|
Posted: Wed Nov 12, 2003 9:51 pm Post subject: Re: Welcher Container? |
|
|
Falco Hirschenberger wrote:
| Quote: | Ich möchte ein Prefetching System entwickeln, welches über eine
Iteratorschnittstelle
^^^^^^^^^^^^^^^^^^^^^^ |
Was meinst Du damit? Wenn das heisst, dass das Iterieren ueber
alle Elemente die haeufigste Anwendung ist, dann kommen IMO nur deque
und vector infrage.
| Quote: | und in einem Prefetchingpuffer speichert, damit
eine Anwendung dann schell auf die schon aufbereiteten Daten zugreifen
kann.
|
In welcher Form? Wahrscheinlich reicht auch hier wieder ein vector?
| Quote: |
Nun frage ich mich welcher Container für sowas am geeignetsten ist, ich
möchte in einem Intervall um die aktuelle Position im Bild, die Slices
prefetchen.
Ich hatte mir gedacht mit 2 std::deques (eine für jede Richtung) könnte man
sowas machen, aber ich muss ggf. nicht nur Sliceweise, sondern auch größere
"Sprünge machen", ist da eine Deque noch sinnvoll.
Als andere Möglichkeit dachte ich mir eine std::map, mit Index als Schlüssel
und Slice als Wert, dann könnte ich einfach überprüfen ob sich ein index im
Puffer befindet, und die Slices mit dem größten "Abstand" zum aktuellen
Slice löschen. Aber wie sieht es mit der Performance aus?
|
Genau - daher solltest Du Dir erst klar werden, welche Anforderungen Du
bzw Deine Anwendung an einen Container hat. Also, erst das Programm
sozusagen designen, die Funktionen festlegen und wichten (ist
indizierter Zugriff die wichtigste/haeufigste Funktion bzw. das Loeschen
von Daten, etc...). Danach kannst Du Dir dann den COntainer nehmen bzw
selbst basteln - mitunter kann zB eine Klasse mit zB zwei Containern
Wunder vollbringen
std::vector<Polygon> polygone_;
typedef std::vector<int> PolygonSet; // --> Indizees in polygone_
std::map<BoundingBox, PolygonSet> cullingTree_;
Das ist jetzt an den Haaren herbeigezogen, zeigt aber, dass man nicht
immer an einem Container festhalten muss.
Ali
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|