Nie ma powodu, aby w ogóle używać do tego zadania. Twoje rozwiązanie nie wymaga montażu C również działa. Zakładam, że korzystasz z systemu operacyjnego, więc będzie to przeszkadzało w twoim pomiarze, zarówno przy wykonywaniu zadań, o których wiesz, że wiesz, gdzie są, jak i przy mierzeniu tego, co myślisz, że mierzysz.
Podstawy pamięci podręcznej dotyczące wykonywania tych pomiarów ... powiedzmy, że istnieją cztery warstwy pamięci. L1, najszybszy, ale także najdroższy i najmniejszy. Następnie L2. wolniej, nie tak drogie, prawdopodobnie większe niż L1. L3 tańszy, wolniejszy, większy, a potem pamięć główna najwolniejsza, najtańsza i największa.
Powiedzmy, że mamy cztery porcje pamięci, z którymi będziemy pracować z A, B, C i D. L1 może pomieścić tylko jedną porcję na raz. L2 dwa na raz, L3 trzy z czterech i pamięć główna wszystkie cztery.
Jeśli zrobimy odczyt, najpierw przechodzi przez L1, jeśli jest brak, to L2, jeśli brak, to L3, a jeśli brak, to zawsze będzie w pamięci głównej. Zrozum, że te dane są buforowane w drodze powrotnej, więc L3, L2 i L1 będą zawierały właśnie przeczytane dane, ewakuując je w razie potrzeby (nie zawsze prawdziwe, ale przyjmij ten prosty model pamięci podręcznej, aby zrozumieć, jak wykonać swoje zadanie). Jeśli więc przeczytamy fragment A, wówczas L1, L2 i L3 będą zawierały fragment A. Teraz w tym hipotetycznym modelu, jeśli odczytamy fragment B, wówczas L1 będzie zawierał B, eksykcję A. L2 będzie zawierać A i b, a l3 będzie zawierać A i B. Czytaj C i L1 będą zawierały C, eksmitując B, powiedzmy, że L2 wybiera eksmitować A, i zawiera B i C, a L3 zawiera A, B i C. Czytaj D i L1 będą zawierały C, powiedzmy L2 eksmisje B i zawiera C i D, i powiedzmy, że L3 eksmituje A i zawiera B, C i D.
Załóżmy, że nie wiemy dokładnie, jak każda pamięć podręczna wybiera, co należy eksmitować i co zachować. Załóżmy jednak, że wiemy lub możemy dowiedzieć się ze specyfikacji płyty głównej lub z innych źródeł, jak duża jest każda pamięć podręczna. Jeśli powyższy przykład wystąpił w tej kolejności, a L1 ma D, L2 ma C i D, L3 ma B, C i D, a główne ma wszystkie cztery a, b, c, d. Następnie, jeśli w tym stanie odczytamy cały blok A i czas, w jakim jesteśmy w teorii, odczytując go z pamięci głównej, to nie tylko czas na odczytanie tej pamięci, ale także, jeśli któraś z eksmitowanych pamięci się zmieniła, musi napisz do góry możliwe trafienia do końca. Ale najlepiej, jeśli robisz głównie czytasz, będziesz mieć czas głównie na czytanie.
Powiedzmy, że znaleźliśmy się w sytuacji, w której fragment D jest w l1, cid w l2, b, c, d w l3 i czytamy cały fragment B i czas. Czy to nie byłby czas na dostęp do L3? z tymi samymi warunkami początkowymi odczytanie C dałoby nam czas l2. Przy tych samych warunkach początkowych odczytanie D byłoby właściwym czasem w czasie l1?
Sztuką jest dostać się do tych warunków. Rozmiary pamięci podręcznych najprawdopodobniej nie są takie, że l2 jest dwa razy większe od l1 i tak aby całkowicie kontrolować, co jest w L1, musisz odczytać wystarczającą ilość danych, aby wypełnić L1. Moreso, jeśli odczytywałeś dane wielkości L3, wtedy teoretycznie L3 ma wszystkie te dane, L2 ma ostatnią L2 ilość tych danych, a L1 ma ostatnią LI ilość tych danych.
Korzystanie z pamięci podręcznej danych jest łatwiejsze niż pamięć podręczna instrukcji, ale możesz to zrobić w dowolny sposób, potrzebujesz co najmniej L3 wielkości instrukcji w pamięci głównej, dużej ilości nops. wykonanie liniowego fragmentu instrukcji nie różni się od czytania liniowej części pamięci. o ile chodzi o cykle odczytu. Instrukcja jest łatwiejsza w zakresie włączania i korzystania z pamięci podręcznej I. Aby włączyć buforowanie danych może być lub nie być proste w zależności od systemu operacyjnego i sposobu zarządzania pamięcią.
Może to podobne pytanie może być pomocne: http://stackoverflow.com/a/12697439/358328 –
Podczas gdy to pytanie jest istotne, nie jest skierowane na pomiar opóźnienia, który jest jedyną rzeczą, zmartwiony o. Dzięki za post! Próbuję pracować od tego miejsca. – mrkanaly