{"id":4181,"date":"2019-03-06T16:20:55","date_gmt":"2019-03-06T15:20:55","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=4181"},"modified":"2019-03-06T16:20:55","modified_gmt":"2019-03-06T15:20:55","slug":"profiler-readwrite-miss-gedanken","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=4181","title":{"rendered":"Profiler read\/write miss Gedanken"},"content":{"rendered":"<p>Profiler read\/write miss Gedanken<\/p>\n<p>write miss: unterscheiden zwischen permanenten und tempor\u00e4re Daten:<br \/>\nPermanente Daten: wohl unausweichlich, denn die neuen Daten M\u00dcSSEN ja vom Chache in den Hauptspeicher geschrieben werden.<br \/>\nTempor\u00e4re Daten: eventuell vermeidbar, wenn man sie an einer sp\u00e4teren Stelle im Code erstellt. Wann immer Daten in den Cache geschrieben werden, fliegen andere Daten raus die eventuell gerade erst aufwendig geladen wurden.<\/p>\n<p>read miss: Unterscheiden zwischen permanent und tempor\u00e4ren Daten:<br \/>\nPermanente Daten: wohl unausweichlich. wenn man \u00fcber einen Datensatz iteriert der gr\u00f6\u00dfer als der Cache ist, M\u00dcSSEN die Daten vom Hauptspeicher in den Cache geladen werden.<br \/>\nTempor\u00e4re Daten: eventuell vermeidbar. Selbe Argumentation wie bei write miss.<\/p>\n<p>Eine tempor\u00e4re\/local scope Variable wird erstellt und in den Cache geschrieben. Dabei fallen eventuell wichtige Daten aus dem Cache. Nun passieren andere Berechnungen die auch in den Cache geschrieben werden. Dabei kann die temp. Variable in den Hauptspeicher ausgelagert werden. Sp\u00e4ter muss sie wieder vom Hauptspeicher wieder in den Cache geladen werden.<\/p>\n<p>Cache misses auf tempor\u00e4re Daten wom\u00f6glich vermeidbar. Auf permanente Daten wohl unvermeidlich. Sso kann es vorkommen, dass das Laden der Daten mehr Zeit kostet als die eigentlichen arithmetischen Berechnungen damit. Profiler die nur Zeiten anzeigen, k\u00f6nnen nicht benutzt werden um zu Entscheiden ob etwas optimiert werden kann.<br \/>\nDie Addressberechnung und das Laden der Daten in den Cache ist teuer. Vorallem wenn die Daten nicht hintereinander im RAM liegen.<br \/>\nWenn 10 Werte aus 10 Container geladen werden, sind 10 Cache Zeilen belegt. Da immer Cachezeilen-Byte viele Daten geladen werden (64byte??)<br \/>\nWenn ein struct a 10 Member geladen wird, geschieht nur Speicherzugriff an einer Stelle im RAM und es wird auch nur eine (oder wenige) Cache Zeilen belegt.<br \/>\nCache Zeilen sind wertvoll. es gibt nur wenige davon (CPU abh\u00e4ngig).<br \/>\nGanz schlimm ist es, wenn in der n\u00e4chsten Iteration an ganz anderer Stelle im Array zugegriffen wird. Dann sind alle geladenen Cachezeilen ung\u00fcltig. Auch bei kontinuierlicher RAM Benutzung.<br \/>\n(Das ist DAS Problem bei Dreiecksnetzten)<br \/>\nFaustformel: arithmetische Operation +-*\/ kostet 1-40. Main RAM read kostet 100-500<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Profiler read\/write miss Gedanken write miss: unterscheiden zwischen permanenten und tempor\u00e4re Daten: Permanente Daten: wohl unausweichlich, denn die neuen Daten M\u00dcSSEN ja vom Chache in den Hauptspeicher geschrieben werden. Tempor\u00e4re Daten: eventuell vermeidbar, wenn man sie an einer sp\u00e4teren Stelle im Code erstellt. Wann immer Daten in den Cache geschrieben werden, fliegen andere Daten raus [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-4181","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4181"}],"version-history":[{"count":1,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4181\/revisions"}],"predecessor-version":[{"id":4182,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4181\/revisions\/4182"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4181"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}