PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm zur Simulation speicherintensiver Anwendungen



Wishmaster
06-04-2008, 21:25
Hallo!

Im Prinzip möchte ich ein kleines Testprogramm schreiben, mit Hilfe dessen ich verschiedene Rechner auf ihre Geschwindigkeit bei Speicherintensiven Anwendungen testen kann.

Ich habe ein kleines Programm geschrieben, das mir 10-mal ca. 16 MB Speicher mit Zufallswerten füllt und anschließend 1000x verschiedene dieser Speicherstellen in andere kopiert.

Den Speicher habe ich mit "alloc()" reserviert und anschließend mit "rand()" und "srand()" mit Inhalt gefüllt, wobei es im Augenblick keinen Unterschied macht, ob da nun Inhalt drin steht oder nicht.

Das kopieren der Speicherstellen wird durch "memcpy()" durchgeführt.

Ich stelle allerdings fest, das der Kern, auf dem die Anwendung läuft, teilweise bis zu 100% belastet ist. Die CPU sollte aber eigentlich nicht der limitierende Teil (Bottleneck) des Tests sein. Meine Frage ist daher: Ist das normal oder habe ich einen gravierenden Denkfehler in dem Verfahren?

VG Wishy

bischi
07-04-2008, 04:41
Das Problem in deinem Fall könnte darin liegen, dass die Werte andauernd zwischen den verschiedenen Speicherebenen kopiert werden müssen (was für eine übliche speicherintensive Anwendung wenig Sinn macht...).

Evtl. etwas realistischer: Matlab/Octave nehmen und grosse Zufallsmatrizen miteinander multiplizieren. Dürfte aber unter Umständen die CPU auch auslasten ;)

MfG Bischi

Wishmaster
07-04-2008, 14:37
Danke für deine Antwort!

Was genau meinst du mit verschiedenen Speicherebenen? Also welche Ebenen sind das? Hast du vllt. einen Link, wo ich etwas darüber nachlesen kann?

Ist C evtl. einfach die falsche Sprache für so einen Test?

bischi
07-04-2008, 22:59
Speicherebenen: L1 Cache, L2 Cache, Ram, Swap auf HDD (ich hoffe, ich hab jetzt nichts übersprungen ;) ). Und zur Sprache / Anwendung: Kommt halt sehr darauf an, was genau du machen willst. Ob die Anwendung eher realitätsbezogen sein soll, ob es nur auf den Speicher ankommt (bspw. Zugriffszeiten,...).

MfG Bischi

Wishmaster
09-04-2008, 11:34
Ah okay, also wenn das herumkopieren, zwischen diesen Speicherebenen soviel CPU Last erzeugt, dann ist es genau das, was ich haben möchte. Ich dachte es gibt vielleicht noch logische Ebenen und der Code arbeitet dort auf der falschen Ebene.

Der Code soll in der Tat einfach nur testen, wie schnell das System bestimmte Speicherblöcke hin- und herkopieren kann.

RapidMax
13-04-2008, 19:05
What every programmer should know about memory (http://people.redhat.com/drepper/cpumemory.pdf)

Die CPU ist zu 100% ausgelastet weil sie hauptsächlich auf die Daten aus dem RAM wartet.

Gruss, Andy