c++ libraries für matrixoperationen und matlab
NullSpace 13.06.2004 - 18:10 2160 41
mat
AdministratorLegends never die
|
ich würde die ganze sache nicht auf 1x in den speicher laden sondern segmentiert auf der festplatte speichern und dann über einen CacheManager immer wieder teile davon einladen und mit diesen teilstücken dann relativ arbeiten.
|
NullSpace
katzenknuddler
|
genau das hab ich mir auch schon überlegt. aber es erhöht den arbeitsaufwand doch um einiges, deshalb wärs mir lieber wenn ich große matrizen (im bereich 10000x10000) laden könnte. aber vielleicht komm ich eh nicht drum rum.
|
Ringding
Pilot
|
Jo aber genau dieser Cache Manager ist ja das komplizierte daran. Da kann schon mal leicht Käse rauskommen, wenn man nicht genau weiß, was man tut.
|
NullSpace
katzenknuddler
|
gibts gute literatur für cache manager?
|
mat
AdministratorLegends never die
|
"CacheManager".. das war nur so dahingesagt. wennst einfach machen willst dann implementier einfach first in - last out und alles was dazu gehört. ansonsten brauchst ein "bewertungssystem", quasi ein scoreboard für deine tiles.
der vorteil des CacheManagers soll eigentlich in 1. linie nur die abstrahierung zu den rechenoperationen sein. du könntest ihn so programmieren, dass man die tiles wie bei einem normalen 2d array herausholt (overloaded operators). wenn du später draufkommst du brauchst den manager gar nicht oder wwi, dann kannst ihn einfach alle tiles laden lassen bzw. den caching algorithmus überspringen usw.
|
Ringding
Pilot
|
Wegen einer PM von NullSpace werde ich kurz versuchen, zu erklären, wie das mit dem Adressraum ist.
Du willst eine Matrix von 800MB verarbeiten und einfachen Zugriff darauf haben. Zugriff auf das Element an der Stelle 4000, 3000 erfolgt dann ungefähr so: m[WIDTH * 4000 + 3000]. So einfach geht das. Es muss nicht unbedingt im RAM sein, es kann auch von der Platte gepaged werden. Das Problem ist nur, dass so eine 800MB Matrix 800MB Adressraum braucht, und auf 32bittigen Systemen hat ein Prozess üblicherweise 2GB Adressraum zur Verfügung (max. 3GB), d.h. du bringst genau 2 Matrizen unter und nicht mehr. Wenn du mehr brauchst, musst du komplizierte Verfahren erfinden, um das irgendwie hinzubiegen, oder du steigst auf eine 64bit-Architektur um, wo du über dieses Problem nur mehr lächeln kannst, weil du plötzlich terabyteweise Adressraum zur Verfügung hast.
|
SYSMATRIX
Legend Legend
|
Es gibt aber ausgezeichnete papers über extreme lanscape visualisation, könnte ich wiederfinden wenn ich mal zeit hab.
|
SYSMATRIX
Legend Legend
|
Wegen einer PM von NullSpace werde ich kurz versuchen, zu erklären, wie das mit dem Adressraum ist.
Du willst eine Matrix von 800MB verarbeiten und einfachen Zugriff darauf haben. Zugriff auf das Element an der Stelle 4000, 3000 erfolgt dann ungefähr so: m[WIDTH * 4000 + 3000]. So einfach geht das. Es muss nicht unbedingt im RAM sein, es kann auch von der Platte gepaged werden. Das Problem ist nur, dass so eine 800MB Matrix 800MB Adressraum braucht, und auf 32bittigen Systemen hat ein Prozess üblicherweise 2GB Adressraum zur Verfügung (max. 3GB), d.h. du bringst genau 2 Matrizen unter und nicht mehr. Wenn du mehr brauchst, musst du komplizierte Verfahren erfinden, um das irgendwie hinzubiegen, oder du steigst auf eine 64bit-Architektur um, wo du über dieses Problem nur mehr lächeln kannst, weil du plötzlich terabyteweise Adressraum zur Verfügung hast. Ist das unter Windows auch so? Unter Linux gibts eben (1-3), 2-2, 3-1 configs.
|
Ringding
Pilot
|
3-1 gibt's auch unter Windows. Ich weiß zwar nicht, wie man's aktiviert, aber möglich ist es.
|
SYSMATRIX
Legend Legend
|
ah, k
|
that
Hoffnungsloser Optimist
|
3-1 gibt's auch unter Windows. Ich weiß zwar nicht, wie man's aktiviert, aber möglich ist es. /3GB als Parameter in der boot.ini anhängen, und das Programm muss mit der richtigen Option gelinkt sein. Geht angeblich mit WinXP und den Serverversionen. http://www.microsoft.com/whdc/syste...PAE/PAEmem.mspx
|
Ringding
Pilot
|
Hab's auch grad gesehen, geht mit folgenden Windosen (laut MSDN)
Windows NT 4.0 SP3 Server Enterprise Edition, Windows 2000 Advanced Server, and Windows .NET Server 2003 Enterprise Edition
|