fb18.de
/ Bachelorstudieng
/ PM Technische Informatik
Aufgabenblatt 12
Huhu,
Habe da "eine" Frage zu Aufgabe 45:
Was will der von uns?^^
Im Script steht ja dazu fast nichts, z.B. Teilassoziativ kommt mit keinem Wort vor, das einzige was man dort findet ist ein völlig unverständliches Schaubild zu Mengenassoziativität.
Und Speicherbit? Meint er damit die Bit im Cache alle zusammen die man noch zum Speichern von Daten verwenden kann, oder die, die pro Eintrag über sind?
Meine Idee wäre jetz dass man von der Gesamtgröße des Cacheblocks alles abzieht was durch zusätzliche Informationen verloren geht:
2^4 = 16 Bit pro Cacheblock
-1 Bit Gültigkeit
-1 "Schmutzbit" was auch immer das sein mag…
-24 Bit für die Adresse (Geht zwar bis 2^27 aber da diese ja in Byte angegeben ist müsste es sich ja nur noch um ein Achtel handeln oder?)
Macht insgesamt -10 Bit zum Speichern, und dann müssen irgendwo noch die Mengen verwaltet werden. Oder passiert das auch irgendwo mit im Cache?
Help, ich versteh gar nix mehr ^^
Gruß
schonmal bei
wikipedia geschaut?
SO jungens …. Weiß einer von euch welche Fromel man in Aufgabe 42 anwenden muss?
Die aus dem script passt nicht.
Ich kenn das Script nicht, aber man braucht das hier auch nicht.
Was bedeutet "look-through"? Einfach mal google fragen.
Und wie lange dauert nun ein Zugriff auf den L1-Cache, den L2-Cache und den RAM?
Moin,
"look - through" bedeutet, dass der Cache- und der Speicherzugriff nacheinander stattfinden….
Ich hab mal folgende Frage:
In Aufgabe 45 soll man die Anzahl der Speicherbit angeben. sind damit die bit gemeint, die die werte enthalten, mit denen gerechnet werden soll oder sind damit alle gemeint, also auch die Bit, die für die Adresse beansprucht werden?
Zugriffszeit = Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS
Z1 = 2ns, Z2 = 4ns, ZHS = 50ns
Die Trefferquoten stehen ja in der Aufgabe ;)… ich habe auch ein bisschen im internet geucht und denke die Formel passt dazu und ist hoffentlich richtig :/… gebe natürlich keine Garantie!
Zugriffszeit = Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS
Z1 = 2ns, Z2 = 4ns, ZHS = 50ns
Die Trefferquoten stehen ja in der Aufgabe ;)… ich habe auch ein bisschen im internet geucht und denke die Formel passt dazu und ist hoffentlich richtig :/… gebe natürlich keine Garantie!
Nicht ganz! Du berechnest viel zu viele Zugriffe auf den Hauptspeicher. Ich hab die Aufgabe nach folgender Formel glöst:
MZ = Z1 + (1 - Tq1) * Z2
+ (1-Tq1) * (1-Tq2) * Z3.
Ist die Aufgabe 46 wirklich so einfach, dass man die beiden Zahlen einfach addieren kann oder ist da irgendwo ein Hacken?
der Haken an der Aufgabe 46 ist, dass die man die beiden Singlewerte erst nach int konvertieren muss. Ich hatte das auch fix in C geschrieben und bei Int zeigte er mir das richtige Ergebnis an, zumal printf laut Compiler sowieso einen (unsigned) int wert verlangt um ihn als Sedezimalwert darzustellen.
Zugriffszeit = Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS
Z1 = 2ns, Z2 = 4ns, ZHS = 50ns
Die Trefferquoten stehen ja in der Aufgabe ;)… ich habe auch ein bisschen im internet geucht und denke die Formel passt dazu und ist hoffentlich richtig :/… gebe natürlich keine Garantie!
Nicht ganz! Du berechnest viel zu viele Zugriffe auf den Hauptspeicher. Ich hab die Aufgabe nach folgender Formel glöst:
MZ = Z1 + (1 - Tq1) * Z2 + (1-Tq1) * (1-Tq2) * Z3.
Hi, wie bist du auf die Formel gekommen?
Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS finde ich irgendwie logischer.
Warum muss man 2x + (1-Tq1) rechnen?
Zugriffszeit = Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS
Z1 = 2ns, Z2 = 4ns, ZHS = 50ns
Die Trefferquoten stehen ja in der Aufgabe ;)… ich habe auch ein bisschen im internet geucht und denke die Formel passt dazu und ist hoffentlich richtig :/… gebe natürlich keine Garantie!
Nicht ganz! Du berechnest viel zu viele Zugriffe auf den Hauptspeicher. Ich hab die Aufgabe nach folgender Formel glöst:
MZ = Z1 + (1 - Tq1) * Z2 + (1-Tq1) * (1-Tq2) * Z3.
Hi, wie bist du auf die Formel gekommen?
Z1 + (1 − Tq1)*Z2 + (1 − Tq2)*ZHS finde ich irgendwie logischer.
Warum muss man 2x + (1-Tq1) rechnen?
Es werden doch nur 94% von 10% aller Zugriffe an den Hauptspeicher getätigt, nicht 94 von 100.
der Haken an der Aufgabe 46 ist, dass die man die beiden Singlewerte erst nach int konvertieren muss. Ich hatte das auch fix in C geschrieben und bei Int zeigte er mir das richtige Ergebnis an, zumal printf laut Compiler sowieso einen (unsigned) int wert verlangt um ihn als Sedezimalwert darzustellen.
Heißt es, dass ich das in Assembler schreiben muss oder "zu Fuss"? Ich meine es steht nirgendwo, wie man es machen soll, da dachte ich man soll es selbst ohne jede Hilfe von Programm lösen.
der Haken an der Aufgabe 46 ist, dass die man die beiden Singlewerte erst nach int konvertieren muss. Ich hatte das auch fix in C geschrieben und bei Int zeigte er mir das richtige Ergebnis an, zumal printf laut Compiler sowieso einen (unsigned) int wert verlangt um ihn als Sedezimalwert darzustellen.
Heißt es, dass ich das in Assembler schreiben muss oder "zu Fuss"? Ich meine es steht nirgendwo, wie man es machen soll, da dachte ich man soll es selbst ohne jede Hilfe von Programm lösen.
Also ich hab einfach nen Online- IEEE 754 - Umrechner benutzt, beide Zahlen umgerechnet, addiert, und zurückkonvertiert. So auf dem Papier würde ich das doch recht umständlich finden.
Wenn jemand nen guten Link zu den Aufgaben 44 und 45 gefunden hat, vor allem zu den LRU- Algorithmen, wäre es sehr schön, den ins Forum zu stellen. Ich verstehe diese Matrizenimplementation im Skript überhaupt nicht.
der Haken an der Aufgabe 46 ist, dass die man die beiden Singlewerte erst nach int konvertieren muss. Ich hatte das auch fix in C geschrieben und bei Int zeigte er mir das richtige Ergebnis an, zumal printf laut Compiler sowieso einen (unsigned) int wert verlangt um ihn als Sedezimalwert darzustellen.
Heißt es, dass ich das in Assembler schreiben muss oder "zu Fuss"? Ich meine es steht nirgendwo, wie man es machen soll, da dachte ich man soll es selbst ohne jede Hilfe von Programm lösen.
Also ich hab einfach nen Online- IEEE 754 - Umrechner benutzt, beide Zahlen umgerechnet, addiert, und zurückkonvertiert. So auf dem Papier würde ich das doch recht umständlich finden.
Wenn jemand nen guten Link zu den Aufgaben 44 und 45 gefunden hat, vor allem zu den LRU- Algorithmen, wäre es sehr schön, den ins Forum zu stellen. Ich verstehe diese Matrizenimplementation im Skript überhaupt nicht.
Könntest du diesen einfachen IEEE 754 Umrechner mal linken? Wäre nett :D
Heißt es, dass ich das in Assembler schreiben muss oder "zu Fuss"?
Laut Musterlösung soll man es zu Fuß machen. Ein Assemblerprogramm würde ich aber auch akzeptieren.
der Haken an der Aufgabe 46 ist, dass die man die beiden Singlewerte erst nach int konvertieren muss.
Was meinst Du denn damit?
Verstehe ich auch nicht mit dem integer, wieso muss man das bitte machen? Steht doch nirgendwo. Zahlen in Binärdarstellung umwandeln, auf dem Papier einbisschen addieren und Summe wieder in Sedezimaldarstellung umwandeln. Oder etwa nicht?
Naja ein Assemblerprogramm ist in dem Fall sicher nicht Sinn der Sache. Sone Aufgabe taugt sicher für die Klausur, da sollte man IEEE 754 schon verstanden haben.
Warum ihr euch komplizierte Formeln aus dem Netz besorgt für Aufgabe 42 versteh ich nicht.
Die kann man sich doch leicht herleiten:
0,9*2ns + 0,6*(2+4)ns + … (bitte selbst denken)
2+4 kommt durchs Look-Through zustande.
Verstehe ich auch nicht mit dem integer, wieso muss man das bitte machen? Steht doch nirgendwo. Zahlen in Binärdarstellung umwandeln, auf dem Papier einbisschen addieren und Summe wieder in Sedezimaldarstellung umwandeln. Oder etwa nicht?
Hm naja steht tatsächlich nirgends das man a und b auch dezimal angeben soll.
Beachten muss man aber trotzdem natürlich das IEEE Format.
Also ich hab Aufgabe 46 eben mal nach IEEE-756 für Fließkommazahlen (Single ist ja eine Fließkommazahl) durchgerechnet:
0x448AE000
= 0100 0100 1000 1010 1110 0000 0000 0000
Damit ist Vorzeichen = 0, Exponent = 137 und Mantisse = 712704
Also ist die Zahl 0,712704*10^137
0x3A449BA6
= 0011 1010 0100 0100 1001 1011 1010 0110
Damit ist Vorzeichen = 0, Exponent = 116 und Mantisse = 4496294
Also ist die Zahl 0,4496294*10^116
Wenn man dies nun zusammenaddiert, ergibt sich 0,712704*10^137 (die Zahl ist nicht genauer darstellbar als Single) also die erste Zahl, da der Exponent so stark abweicht. Ist das ne Falle, und richtig, oder die Rechnung eher am Thema vorbei?
Also vom Exponenten (Zahl a) musst du noch 127 ("bias") abziehen, dann stimmts.
Und die Mantisse bzw. der Signifikant ist irgendwie.. falsch…
Erstes Bit Vorzeichen, 8 Bit Exponent, eine "versteckte" eins, und dann kommt der 23 bittige Signifikant.
Zahlen in Binärdarstellung umwandeln, auf dem Papier ein bischen addieren und Summe wieder in Sedezimaldarstellung umwandeln. Oder etwa nicht?
Je nachdem, was Du mit dem fett gedruckten Text meinst: korrekt [28]
Auf jeden Fall reicht es nicht aus, einfach zwei 32-Bit-Ketten zu addieren. Man muss die Bits schon interpretieren (Vorzeichen, Charakteristik, Mantisse) und ein bischen überlegen.
hmm also aus dem englischen Wikipedia artikel zu Cache werd ich auch nich schlau… vll liegt das auch an 20 stunden MK… naja
Kann mir nicht jemand evtl nen kleinen Tipp geben wie dieses Teilassoziativ gemeint ist?
Und das Speicherbit..
Gruß
hmm also aus dem englischen Wikipedia artikel zu Cache werd ich auch nich schlau… vll liegt das auch an 20 stunden MK… naja
Kann mir nicht jemand evtl nen kleinen Tipp geben wie dieses Teilassoziativ gemeint ist?
Und das Speicherbit..
Gruß
"Teilassoziativ" heißt wohl daß jeder Speicherblock in mehreren Cacheblocks aufgenommen werden kann. Da der Assoziativitätsgrad 3 ist, stehen also für jeden Speicherblock drei alternative Cacheblocks zur Verfügung.
Zum Rest hab ich leider auch nichts gefunden.
Also vom Exponenten (Zahl a) musst du noch 127 ("bias") abziehen, dann stimmts.
Und die Mantisse bzw. der Signifikant ist irgendwie.. falsch…
Erstes Bit Vorzeichen, 8 Bit Exponent, eine "versteckte" eins, und dann kommt der 23 bittige Signifikant.
1. Wieso muss ich was abziehen von dem Exponenten?
2. Was ist mit dieser "versteckten" eins gemeint?
1. So ist halt das Format angelegt, damit auch Zahlen dargestellt werden können, die kleiner sind als eins.
2. Der Mantisse steht immer eine Eins voran, die in der Bitkette nicht auftaucht. Ich hatte oben den Link zu einem Umrechner gepostet, sieh dir mal an wie dort die Zahl 1 dargestellt wird.
Hast du 44 und 45 gelöst?
Danke, habe auch selbst bei Wiki das nötige gefunden.
Nein ich versuche mich nur an der und vlt noch 43.
2. Der Mantisse steht immer eine Eins voran, die in der Bitkette nicht auftaucht.
Es sei denn, es handelt sich um eine denormalisierte Zahl (zu erkennen an der Charakteristik 0).
Wenn man dies nun zusammenaddiert, ergibt sich […] die erste Zahl, da der Exponent so stark abweicht.
Das sind wahrscheinlich Rundungsfehler durch deine Umrechnung binär -> dezimal -> binär. Rechne mal direkt in binärer Darstellung. Die Summe ist recht nah an a dran, aber nicht gleich a.
Ich habe hier 0x448ae000 + 0x3a449ba6 = 0x448ae006 raus, natürlich ohne Garantie.
Mit dem einbisschen rumaddieren habe ich offenbar das richtige gemeint, ich habe nämlich dasselbe heraus wie du Fred. Juhu \o/ ^^
Für Aufgabe 45 wurde uns heute folgende Musterlösung vorgestellt:
96 * (27 + 18 + 1) + 3 * 32
Das sieht für mich in weiten Teilen auch logisch aus, aber ich verstehe ein paar Dinge nicht:
1. Woher kommen die 27? Sieht ja so aus, als wäre das die komplette Adresse (von der Größe her), aber das will für mich nun gar keinen Sinn ergeben, auch weil ja bereits die 18 Bit für den Tag drin sind.
2. Wo sind die eigentlichen Daten, die der Cache speichert, berücksichtigt? Laut Aufgabenstellung ist die Größe eines Blocks ja "2⁴" (Byte, hab ich mal angenommen), also müssten diese 128 Bit doch eigentlich in der Klammer auftauchen?
3. Sind die 5 Indexbits pro Block nur deshalb nicht aufgeführt, weil sie statisch sind und nie verändert werden? Vorhanden sein müssen sie ja irgendwo, sonst könnte man nicht mit ihnen vergleichen…
Also die Lösung ist komplett falsch, wie Lehmann auch bestätigte ;)
Richtig ist:
96*18 für Tags
96 Gültigkeitsbits
3*32 für LRU
96*128 Datenbits
demnach also 96*(128+18+1) + 3*32
ohne gewähr