Hi Leute.
ich hoffe es kann mir hier geholfen werden. ich versuche als kleines projekt u.a. auf einem 386 (32 KByte extern),468 (8 KByte interner Datencache) und pentium (16 KByte interner Datencache) zu untersuchen, wie effizient die Caches auf den systemen sind. hierzu gehören u.a. folgende aufgabenteile:
1.)
ich will die systeme einmal mit und ohne cache betreiben. ichh habe gelesen, dass man caches auf diesen prozessoren ausschalten kann, weiß aber nicht wie das geht? kann mir jemand weiterhelfen? dazu muss man auf die assemblerebene absteigen ????
2.)
ich versuche die datenarrays unterschiedlich groß zu machen, um den cache zu überfluten. daraus soll eine kennzahl ermittelt werden, die in etwa die datenmenge angibt, die ganz in den cache passt und somit schnell (d.h. ohne speicherzugriffe) arbeitet.
Probleme:
bei einer arraygröße von ca. 32000 Integerwerten = 2 Byte (wobei das nicht die untere grenze ist, welche ich noch nicht rausgefunden habe) sagt der Compiler, dass das array zu groß ist. bei der cache größe der o.g. prozessoren erweist sich die untersuchung unter diesen bedingungen als sehr hinderlich.
Die Programmierumgebung
Ich arbeite unter DOS mit Borland C++ 3.1 (für DOS). In jeder dieser Umgebungen wird diese Meldung ausgegeben.
Ich habe schon die Speicher-Modelle umgestellt und auch die Übersetzung des Zielcode auf den x86, 286, 386, 486 in den Optionen ausprobiert. Aber leider ergab das immer wieder den o.g. übersetzungsfehler. Wieso?
Würde mich freuen, wenn ihr eine antwort darauf wißt. aber bitte leicht verständlich ausführen, da ich neu in der C Programmierung unter Borland bin :-).
Nachtrag
Für die Cache-Überflutung des L1 Cache sollte ja eigentlich das, durch das speichermodell LARGE oder HUGE bereitgestellte, Datensegment groß genug Beide Modelle erlaufen ein 1 MB großes Datensegment. Das sollte auch ausreichen um den Nutzen des L2 Cache in die Knie zu zwingen ???
Umso weniger kann ich verstehen, dass mir der Compiler bereits bei ca. 32000 Integerwerte = ca. 64 KB einen strich durch die rechnung macht.
ich hoffe es kann mir hier geholfen werden. ich versuche als kleines projekt u.a. auf einem 386 (32 KByte extern),468 (8 KByte interner Datencache) und pentium (16 KByte interner Datencache) zu untersuchen, wie effizient die Caches auf den systemen sind. hierzu gehören u.a. folgende aufgabenteile:
1.)
ich will die systeme einmal mit und ohne cache betreiben. ichh habe gelesen, dass man caches auf diesen prozessoren ausschalten kann, weiß aber nicht wie das geht? kann mir jemand weiterhelfen? dazu muss man auf die assemblerebene absteigen ????
2.)
ich versuche die datenarrays unterschiedlich groß zu machen, um den cache zu überfluten. daraus soll eine kennzahl ermittelt werden, die in etwa die datenmenge angibt, die ganz in den cache passt und somit schnell (d.h. ohne speicherzugriffe) arbeitet.
Probleme:
bei einer arraygröße von ca. 32000 Integerwerten = 2 Byte (wobei das nicht die untere grenze ist, welche ich noch nicht rausgefunden habe) sagt der Compiler, dass das array zu groß ist. bei der cache größe der o.g. prozessoren erweist sich die untersuchung unter diesen bedingungen als sehr hinderlich.
Die Programmierumgebung
Ich arbeite unter DOS mit Borland C++ 3.1 (für DOS). In jeder dieser Umgebungen wird diese Meldung ausgegeben.
Ich habe schon die Speicher-Modelle umgestellt und auch die Übersetzung des Zielcode auf den x86, 286, 386, 486 in den Optionen ausprobiert. Aber leider ergab das immer wieder den o.g. übersetzungsfehler. Wieso?
Würde mich freuen, wenn ihr eine antwort darauf wißt. aber bitte leicht verständlich ausführen, da ich neu in der C Programmierung unter Borland bin :-).
Nachtrag
Für die Cache-Überflutung des L1 Cache sollte ja eigentlich das, durch das speichermodell LARGE oder HUGE bereitgestellte, Datensegment groß genug Beide Modelle erlaufen ein 1 MB großes Datensegment. Das sollte auch ausreichen um den Nutzen des L2 Cache in die Knie zu zwingen ???
Umso weniger kann ich verstehen, dass mir der Compiler bereits bei ca. 32000 Integerwerte = ca. 64 KB einen strich durch die rechnung macht.
Comment