CINXE.COM

CPU cache - Wikipedia

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="it" dir="ltr"> <head> <meta charset="UTF-8"> <title>CPU cache - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )itwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t."," \t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"wgRequestId":"6d2a85e8-8089-4837-adbb-a40932fc6af4","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"CPU_cache","wgTitle":"CPU cache","wgCurRevisionId":141722009,"wgRevisionId":141722009,"wgArticleId":460443,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Contestualizzare fonti - informatica","Contestualizzare fonti - febbraio 2013","Organizzare - informatica","Organizzare - maggio 2018","Aggiornare - informatica","Aggiornare subito","Correggere - informatica","Correggere - settembre 2019","Microprocessore"],"wgPageViewLanguage":"it","wgPageContentLanguage":"it","wgPageContentModel":"wikitext","wgRelevantPageName":"CPU_cache","wgRelevantArticleId":460443,"wgIsProbablyEditable":true, "wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"it","pageLanguageDir":"ltr","pageVariantFallbacks":"it"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":50000,"wgRelatedArticlesCompat":[],"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q352090","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled" :false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.coloriDarkMode-default":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.MainPageWikiList","ext.gadget.stru-commonsupload","ext.gadget.HiddenCat","ext.gadget.ReferenceTooltips","ext.gadget.TitoloErrato","ext.gadget.NewSection","ext.gadget.RichiediRevisioneBozza","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups", "ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=it&amp;modules=ext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=it&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=it&amp;modules=ext.gadget.coloriDarkMode-default&amp;only=styles&amp;skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=it&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="CPU cache - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//it.m.wikipedia.org/wiki/CPU_cache"> <link rel="alternate" type="application/x-wiki" title="Modifica" href="/w/index.php?title=CPU_cache&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (it)"> <link rel="EditURI" type="application/rsd+xml" href="//it.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://it.wikipedia.org/wiki/CPU_cache"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.it"> <link rel="alternate" type="application/atom+xml" title="Feed Atom di Wikipedia" href="/w/index.php?title=Speciale:UltimeModifiche&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-CPU_cache rootpage-CPU_cache skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Vai al contenuto</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Sito"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Menu principale" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Menu principale</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Menu principale</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">sposta nella barra laterale</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">nascondi</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigazione </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Pagina_principale" title="Visita la pagina principale [z]" accesskey="z"><span>Pagina principale</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Speciale:UltimeModifiche" title="Elenco delle ultime modifiche del sito [r]" accesskey="r"><span>Ultime modifiche</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Speciale:PaginaCasuale" title="Mostra una pagina a caso [x]" accesskey="x"><span>Una voce a caso</span></a></li><li id="n-nearby-pages-title" class="mw-list-item"><a href="/wiki/Speciale:NelleVicinanze"><span>Nelle vicinanze</span></a></li><li id="n-vetrina" class="mw-list-item"><a href="/wiki/Wikipedia:Vetrina"><span>Vetrina</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Aiuto:Aiuto" title="Pagine di aiuto"><span>Aiuto</span></a></li><li id="n-Sportello-informazioni" class="mw-list-item"><a href="/wiki/Aiuto:Sportello_informazioni"><span>Sportello informazioni</span></a></li> </ul> </div> </div> <div id="p-Comunità" class="vector-menu mw-portlet mw-portlet-Comunità" > <div class="vector-menu-heading"> Comunità </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Portale:Comunit%C3%A0" title="Descrizione del progetto, cosa puoi fare, dove trovare le cose"><span>Portale Comunità</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikipedia:Bar"><span>Bar</span></a></li><li id="n-wikipediano" class="mw-list-item"><a href="/wiki/Wikipedia:Wikipediano"><span>Il Wikipediano</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="/wiki/Wikipedia:Contatti"><span>Contatti</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Pagina_principale" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="L&#039;enciclopedia libera" src="/static/images/mobile/copyright/wikipedia-tagline-it.svg" width="120" height="13" style="width: 7.5em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Speciale:Ricerca" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Cerca in Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Ricerca</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Cerca in Wikipedia" aria-label="Cerca in Wikipedia" autocapitalize="sentences" title="Cerca in Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Speciale:Ricerca"> </div> <button class="cdx-button cdx-search-input__end-button">Ricerca</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Strumenti personali"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Aspetto"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Modifica la dimensione, la larghezza e il colore del testo" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Aspetto" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Aspetto</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_it.wikipedia.org&amp;uselang=it" class=""><span>Fai una donazione</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciale:CreaUtenza&amp;returnto=CPU+cache" title="Si consiglia di registrarsi e di effettuare l&#039;accesso, anche se non è obbligatorio" class=""><span>registrati</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciale:Entra&amp;returnto=CPU+cache" title="Si consiglia di effettuare l&#039;accesso, anche se non è obbligatorio [o]" accesskey="o" class=""><span>entra</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Altre opzioni" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Strumenti personali" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Strumenti personali</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Menu utente" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_it.wikipedia.org&amp;uselang=it"><span>Fai una donazione</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciale:CreaUtenza&amp;returnto=CPU+cache" title="Si consiglia di registrarsi e di effettuare l&#039;accesso, anche se non è obbligatorio"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>registrati</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciale:Entra&amp;returnto=CPU+cache" title="Si consiglia di effettuare l&#039;accesso, anche se non è obbligatorio [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>entra</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pagine per utenti anonimi <a href="/wiki/Aiuto:Benvenuto" aria-label="Ulteriori informazioni sulla contribuzione"><span>ulteriori informazioni</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Speciale:MieiContributi" title="Un elenco delle modifiche fatte da questo indirizzo IP [y]" accesskey="y"><span>contributi</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Speciale:MieDiscussioni" title="Discussioni sulle modifiche fatte da questo indirizzo IP [n]" accesskey="n"><span>discussioni</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Sito"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Indice" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Indice</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">sposta nella barra laterale</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">nascondi</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Inizio</div> </a> </li> <li id="toc-Caratteristiche" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Caratteristiche"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Caratteristiche</span> </div> </a> <ul id="toc-Caratteristiche-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Alcuni_dettagli_operativi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Alcuni_dettagli_operativi"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Alcuni dettagli operativi</span> </div> </a> <ul id="toc-Alcuni_dettagli_operativi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Associatività" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Associatività"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Associatività</span> </div> </a> <ul id="toc-Associatività-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Cache_miss" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Cache_miss"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Cache miss</span> </div> </a> <ul id="toc-Cache_miss-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Cache_hit" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Cache_hit"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Cache hit</span> </div> </a> <ul id="toc-Cache_hit-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Traduzione_degli_indirizzi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Traduzione_degli_indirizzi"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Traduzione degli indirizzi</span> </div> </a> <button aria-controls="toc-Traduzione_degli_indirizzi-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Attiva/disattiva la sottosezione Traduzione degli indirizzi</span> </button> <ul id="toc-Traduzione_degli_indirizzi-sublist" class="vector-toc-list"> <li id="toc-Virtual_indexing_e_virtual_aliases" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Virtual_indexing_e_virtual_aliases"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.1</span> <span>Virtual indexing e virtual aliases</span> </div> </a> <ul id="toc-Virtual_indexing_e_virtual_aliases-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Virtual_tags_and_vhints" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Virtual_tags_and_vhints"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.2</span> <span>Virtual tags and vhints</span> </div> </a> <ul id="toc-Virtual_tags_and_vhints-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Page_coloring" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Page_coloring"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.3</span> <span>Page coloring</span> </div> </a> <ul id="toc-Page_coloring-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Gerarchia_delle_cache_in_un_processore_moderno" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Gerarchia_delle_cache_in_un_processore_moderno"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Gerarchia delle cache in un processore moderno</span> </div> </a> <button aria-controls="toc-Gerarchia_delle_cache_in_un_processore_moderno-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Attiva/disattiva la sottosezione Gerarchia delle cache in un processore moderno</span> </button> <ul id="toc-Gerarchia_delle_cache_in_un_processore_moderno-sublist" class="vector-toc-list"> <li id="toc-Cache_specializzate" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Cache_specializzate"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Cache specializzate</span> </div> </a> <ul id="toc-Cache_specializzate-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Victim_cache" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Victim_cache"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.2</span> <span>Victim cache</span> </div> </a> <ul id="toc-Victim_cache-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Trace_cache" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Trace_cache"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.3</span> <span>Trace cache</span> </div> </a> <ul id="toc-Trace_cache-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Cache_multilivello" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Cache_multilivello"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Cache multilivello</span> </div> </a> <button aria-controls="toc-Cache_multilivello-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Attiva/disattiva la sottosezione Cache multilivello</span> </button> <ul id="toc-Cache_multilivello-sublist" class="vector-toc-list"> <li id="toc-Esempio:_architettura_AMD_K8" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Esempio:_architettura_AMD_K8"> <div class="vector-toc-text"> <span class="vector-toc-numb">8.1</span> <span>Esempio: architettura AMD K8</span> </div> </a> <ul id="toc-Esempio:_architettura_AMD_K8-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Altre_gerarchie" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Altre_gerarchie"> <div class="vector-toc-text"> <span class="vector-toc-numb">8.2</span> <span>Altre gerarchie</span> </div> </a> <ul id="toc-Altre_gerarchie-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Implementazione" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Implementazione"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Implementazione</span> </div> </a> <ul id="toc-Implementazione-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Note" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Note"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Note</span> </div> </a> <ul id="toc-Note-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Voci_correlate" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Voci_correlate"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Voci correlate</span> </div> </a> <ul id="toc-Voci_correlate-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Altri_progetti" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Altri_progetti"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>Altri progetti</span> </div> </a> <ul id="toc-Altri_progetti-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Collegamenti_esterni" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Collegamenti_esterni"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>Collegamenti esterni</span> </div> </a> <ul id="toc-Collegamenti_esterni-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Indice" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Mostra/Nascondi l&#039;indice" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Mostra/Nascondi l&#039;indice</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">CPU cache</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Vai a una voce in un&#039;altra lingua. Disponibile in 30 lingue" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-30" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">30 lingue</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%B0%D8%A7%D9%83%D8%B1%D8%A9_%D9%88%D8%AD%D8%AF%D8%A9_%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9_%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9" title="ذاكرة وحدة المعالجة المركزية - arabo" lang="ar" hreflang="ar" data-title="ذاكرة وحدة المعالجة المركزية" data-language-autonym="العربية" data-language-local-name="arabo" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D0%B5%D0%BD_%D0%BA%D0%B5%D1%88" title="Процесорен кеш - bulgaro" lang="bg" hreflang="bg" data-title="Процесорен кеш" data-language-autonym="Български" data-language-local-name="bulgaro" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bh mw-list-item"><a href="https://bh.wikipedia.org/wiki/%E0%A4%95%E0%A5%88%E0%A4%B6_%E0%A4%AE%E0%A5%87%E0%A4%AE%E0%A5%8B%E0%A4%B0%E0%A5%80" title="कैश मेमोरी - Bhojpuri" lang="bh" hreflang="bh" data-title="कैश मेमोरी" data-language-autonym="भोजपुरी" data-language-local-name="Bhojpuri" class="interlanguage-link-target"><span>भोजपुरी</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Mem%C3%B2ria_cau_de_la_CPU" title="Memòria cau de la CPU - catalano" lang="ca" hreflang="ca" data-title="Memòria cau de la CPU" data-language-autonym="Català" data-language-local-name="catalano" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Befehlscache" title="Befehlscache - tedesco" lang="de" hreflang="de" data-title="Befehlscache" data-language-autonym="Deutsch" data-language-local-name="tedesco" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/CPU_cache" title="CPU cache - inglese" lang="en" hreflang="en" data-title="CPU cache" data-language-autonym="English" data-language-local-name="inglese" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Cach%C3%A9_de_CPU" title="Caché de CPU - spagnolo" lang="es" hreflang="es" data-title="Caché de CPU" data-language-autonym="Español" data-language-local-name="spagnolo" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Protsessori_vahem%C3%A4lu" title="Protsessori vahemälu - estone" lang="et" hreflang="et" data-title="Protsessori vahemälu" data-language-autonym="Eesti" data-language-local-name="estone" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%86%D9%87%D8%A7%D9%86_%D8%B3%DB%8C%E2%80%8C%D9%BE%DB%8C%E2%80%8C%DB%8C%D9%88" title="حافظه نهان سی‌پی‌یو - persiano" lang="fa" hreflang="fa" data-title="حافظه نهان سی‌پی‌یو" data-language-autonym="فارسی" data-language-local-name="persiano" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Cache_de_processeur" title="Cache de processeur - francese" lang="fr" hreflang="fr" data-title="Cache de processeur" data-language-autonym="Français" data-language-local-name="francese" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/Taisc-chuimhne" title="Taisc-chuimhne - irlandese" lang="ga" hreflang="ga" data-title="Taisc-chuimhne" data-language-autonym="Gaeilge" data-language-local-name="irlandese" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Tembolok_CPU" title="Tembolok CPU - indonesiano" lang="id" hreflang="id" data-title="Tembolok CPU" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonesiano" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%83%A1%E3%83%A2%E3%83%AA" title="キャッシュメモリ - giapponese" lang="ja" hreflang="ja" data-title="キャッシュメモリ" data-language-autonym="日本語" data-language-local-name="giapponese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/CPU_%EC%BA%90%EC%8B%9C" title="CPU 캐시 - coreano" lang="ko" hreflang="ko" data-title="CPU 캐시" data-language-autonym="한국어" data-language-local-name="coreano" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Procesoriaus_spartinan%C4%8Dioji_atmintin%C4%97" title="Procesoriaus spartinančioji atmintinė - lituano" lang="lt" hreflang="lt" data-title="Procesoriaus spartinančioji atmintinė" data-language-autonym="Lietuvių" data-language-local-name="lituano" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Procesora_ke%C5%A1atmi%C5%86a" title="Procesora kešatmiņa - lettone" lang="lv" hreflang="lv" data-title="Procesora kešatmiņa" data-language-autonym="Latviešu" data-language-local-name="lettone" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%BA%D0%B8_%D0%BC%D0%B5%D1%93%D1%83%D1%81%D0%BA%D0%BB%D0%B0%D0%B4" title="Обработувачки меѓусклад - macedone" lang="mk" hreflang="mk" data-title="Обработувачки меѓусклад" data-language-autonym="Македонски" data-language-local-name="macedone" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%B8%E0%B4%BF.%E0%B4%AA%E0%B4%BF.%E0%B4%AF%E0%B5%81._%E0%B4%95%E0%B4%BE%E0%B4%B7%E0%B5%8D" title="സി.പി.യു. കാഷ് - malayalam" lang="ml" hreflang="ml" data-title="സി.പി.യു. കാഷ്" data-language-autonym="മലയാളം" data-language-local-name="malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/CPU-cache" title="CPU-cache - olandese" lang="nl" hreflang="nl" data-title="CPU-cache" data-language-autonym="Nederlands" data-language-local-name="olandese" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Hurtigminne" title="Hurtigminne - norvegese bokmål" lang="nb" hreflang="nb" data-title="Hurtigminne" data-language-autonym="Norsk bokmål" data-language-local-name="norvegese bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Pami%C4%99%C4%87_podr%C4%99czna_procesora" title="Pamięć podręczna procesora - polacco" lang="pl" hreflang="pl" data-title="Pamięć podręczna procesora" data-language-autonym="Polski" data-language-local-name="polacco" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Cache_do_processador" title="Cache do processador - portoghese" lang="pt" hreflang="pt" data-title="Cache do processador" data-language-autonym="Português" data-language-local-name="portoghese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0" title="Кэш процессора - russo" lang="ru" hreflang="ru" data-title="Кэш процессора" data-language-autonym="Русский" data-language-local-name="russo" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/R%C3%BDchla_vyrovn%C3%A1vacia_pam%C3%A4%C5%A5_procesora" title="Rýchla vyrovnávacia pamäť procesora - slovacco" lang="sk" hreflang="sk" data-title="Rýchla vyrovnávacia pamäť procesora" data-language-autonym="Slovenčina" data-language-local-name="slovacco" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9A%D0%B5%D1%88_%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B5_%D1%98%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D0%B5" title="Кеш централне процесорске јединице - serbo" lang="sr" hreflang="sr" data-title="Кеш централне процесорске јединице" data-language-autonym="Српски / srpski" data-language-local-name="serbo" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%AA%E0%AE%A4%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81_%E0%AE%A8%E0%AE%BF%E0%AE%A9%E0%AF%88%E0%AE%B5%E0%AE%95%E0%AE%AE%E0%AF%8D" title="பதுக்கு நினைவகம் - tamil" lang="ta" hreflang="ta" data-title="பதுக்கு நினைவகம்" data-language-autonym="தமிழ்" data-language-local-name="tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/%C4%B0%C5%9Flemci_%C3%B6nbelle%C4%9Fi" title="İşlemci önbelleği - turco" lang="tr" hreflang="tr" data-title="İşlemci önbelleği" data-language-autonym="Türkçe" data-language-local-name="turco" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9A%D0%B5%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D0%B0" title="Кеш процесора - ucraino" lang="uk" hreflang="uk" data-title="Кеш процесора" data-language-autonym="Українська" data-language-local-name="ucraino" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/CPU_cache" title="CPU cache - vietnamita" lang="vi" hreflang="vi" data-title="CPU cache" data-language-autonym="Tiếng Việt" data-language-local-name="vietnamita" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/CPU%E7%BC%93%E5%AD%98" title="CPU缓存 - cinese" lang="zh" hreflang="zh" data-title="CPU缓存" data-language-autonym="中文" data-language-local-name="cinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q352090#sitelinks-wikipedia" title="Modifica collegamenti interlinguistici" class="wbc-editpage">Modifica collegamenti</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespace"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/CPU_cache" title="Vedi la voce [c]" accesskey="c"><span>Voce</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Discussione:CPU_cache" rel="discussion" title="Vedi le discussioni relative a questa pagina [t]" accesskey="t"><span>Discussione</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Cambia versione linguistica" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">italiano</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Visite"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/CPU_cache"><span>Leggi</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;veaction=edit" title="Modifica questa pagina [v]" accesskey="v"><span>Modifica</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;action=edit" title="Modifica il wikitesto di questa pagina [e]" accesskey="e"><span>Modifica wikitesto</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;action=history" title="Versioni precedenti di questa pagina [h]" accesskey="h"><span>Cronologia</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Strumenti pagine"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Strumenti" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Strumenti</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Strumenti</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">sposta nella barra laterale</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">nascondi</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Altre opzioni" > <div class="vector-menu-heading"> Azioni </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/CPU_cache"><span>Leggi</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;veaction=edit" title="Modifica questa pagina [v]" accesskey="v"><span>Modifica</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;action=edit" title="Modifica il wikitesto di questa pagina [e]" accesskey="e"><span>Modifica wikitesto</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;action=history"><span>Cronologia</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Generale </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Speciale:PuntanoQui/CPU_cache" title="Elenco di tutte le pagine che sono collegate a questa [j]" accesskey="j"><span>Puntano qui</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Speciale:ModificheCorrelate/CPU_cache" rel="nofollow" title="Elenco delle ultime modifiche alle pagine collegate a questa [k]" accesskey="k"><span>Modifiche correlate</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Speciale:PagineSpeciali" title="Elenco di tutte le pagine speciali [q]" accesskey="q"><span>Pagine speciali</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;oldid=141722009" title="Collegamento permanente a questa versione di questa pagina"><span>Link permanente</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;action=info" title="Ulteriori informazioni su questa pagina"><span>Informazioni pagina</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Speciale:Cita&amp;page=CPU_cache&amp;id=141722009&amp;wpFormIdentifier=titleform" title="Informazioni su come citare questa pagina"><span>Cita questa voce</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Speciale:UrlShortener&amp;url=https%3A%2F%2Fit.wikipedia.org%2Fwiki%2FCPU_cache"><span>Ottieni URL breve</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Speciale:QrCode&amp;url=https%3A%2F%2Fit.wikipedia.org%2Fwiki%2FCPU_cache"><span>Scarica codice QR</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Stampa/esporta </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Speciale:Libro&amp;bookcmd=book_creator&amp;referer=CPU+cache"><span>Crea un libro</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Speciale:DownloadAsPdf&amp;page=CPU_cache&amp;action=show-download-screen"><span>Scarica come PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=CPU_cache&amp;printable=yes" title="Versione stampabile di questa pagina [p]" accesskey="p"><span>Versione stampabile</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In altri progetti </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:CPU_cache" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://it.wikibooks.org/wiki/Architetture_dei_processori/Cache" hreflang="it"><span>Wikibooks</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q352090" title="Collegamento all&#039;elemento connesso dell&#039;archivio dati [g]" accesskey="g"><span>Elemento Wikidata</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Strumenti pagine"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Aspetto"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Aspetto</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">sposta nella barra laterale</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">nascondi</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">Da Wikipedia, l&#039;enciclopedia libera.</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="it" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r133964453">.mw-parser-output .avviso .mbox-text-div>div,.mw-parser-output .avviso .mbox-text-full-div>div{font-size:90%}.mw-parser-output .avviso .mbox-image{flex-basis:52px;flex-grow:0;flex-shrink:0}.mw-parser-output .avviso .mbox-text-full-div .hide-when-compact{display:block}</style><div style="" class="ambox metadata noprint plainlinks avviso avviso-contenuto"> <div class="avviso-immagine mbox-image noprint"><span typeof="mw:File"><a href="/wiki/File:Question_book_magnify.svg" class="mw-file-description" title="Nessuna nota a piè di pagina"><img alt="Nessuna nota a piè di pagina" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Question_book_magnify.svg/45px-Question_book_magnify.svg.png" decoding="async" width="45" height="45" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Question_book_magnify.svg/68px-Question_book_magnify.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Question_book_magnify.svg/90px-Question_book_magnify.svg.png 2x" data-file-width="60" data-file-height="60" /></a></span></div> <div class="avviso-testo mbox-text"> <div class="mbox-text-div"><b>Questa voce o sezione &#32;sull'argomento informatica è priva o carente di <a href="/wiki/Wikipedia:Uso_delle_fonti" title="Wikipedia:Uso delle fonti">note</a> e <a href="/wiki/Aiuto:Uso_delle_fonti#Citazioni_nel_testo_.28citazioni_interne.29_e_alla_fine" title="Aiuto:Uso delle fonti">riferimenti bibliografici puntuali</a></b>. <div class="hide-when-compact"> <div class="noprint"><hr />Sebbene vi siano una <a href="/wiki/Aiuto:Bibliografia" title="Aiuto:Bibliografia">bibliografia</a> e/o dei <a href="/wiki/Wikipedia:Collegamenti_esterni" title="Wikipedia:Collegamenti esterni">collegamenti esterni</a>, manca la contestualizzazione delle fonti con <a href="/wiki/Aiuto:Note" title="Aiuto:Note">note a piè di pagina</a> o altri riferimenti precisi che indichino puntualmente la provenienza delle informazioni. Puoi <a class="external text" href="https://it.wikipedia.org/w/index.php?title=CPU_cache&amp;action=edit">migliorare questa voce</a> <a href="/wiki/Wikipedia:Uso_delle_fonti" title="Wikipedia:Uso delle fonti">citando le fonti</a> più precisamente. Segui i suggerimenti del <a href="/wiki/Progetto:Informatica" title="Progetto:Informatica">progetto di riferimento</a>.</div> </div> </div> </div> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r133964453"><div style="" class="ambox metadata noprint plainlinks avviso avviso-contenuto"> <div class="avviso-immagine mbox-image noprint"><span typeof="mw:File"><a href="/wiki/File:Crystal128-file-broken.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Crystal128-file-broken.svg/40px-Crystal128-file-broken.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Crystal128-file-broken.svg/60px-Crystal128-file-broken.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Crystal128-file-broken.svg/80px-Crystal128-file-broken.svg.png 2x" data-file-width="128" data-file-height="128" /></a></span></div> <div class="avviso-testo mbox-text"> <div class="mbox-text-div"><b>Questa voce o sezione &#32;sull'argomento Informatica ha problemi di struttura e di organizzazione delle informazioni</b>. <div class="hide-when-compact"><b>Motivo</b>: <i>La voce è trattata in maniera eccessivamente specialistica. Bisognerebbe semplificarla per non renderla troppo simile a quanto si trova su un manuale specialistico di informatica e migliorarne la leggibilità per un utente non tecnico</i> <div class="noprint"><hr />Risistema la struttura espositiva, logica e/o bibliografica dei contenuti. Nella <a href="/wiki/Discussione:CPU_cache" title="Discussione:CPU cache">discussione</a> puoi collaborare con altri utenti alla risistemazione. Segui i suggerimenti del <a href="/wiki/Progetto:Informatica" title="Progetto:Informatica">progetto di riferimento</a>.</div> </div> </div> </div> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r133964453"><div style="" class="ambox metadata plainlinks avviso avviso-contenuto"> <div class="avviso-immagine mbox-image noprint"><span typeof="mw:File"><a href="/wiki/File:Orologio_arancio.svg" class="mw-file-description" title="Da aggiornare"><img alt="Da aggiornare" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Orologio_arancio.svg/45px-Orologio_arancio.svg.png" decoding="async" width="45" height="45" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Orologio_arancio.svg/68px-Orologio_arancio.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Orologio_arancio.svg/90px-Orologio_arancio.svg.png 2x" data-file-width="48" data-file-height="48" /></a></span></div> <div class="avviso-testo mbox-text"> <div class="mbox-text-div"><b>Questa voce o sezione deve essere rivista e aggiornata appena possibile</b>. <div class="hide-when-compact"><b>Commento</b>: <i>Buona parte della voce è ferma al 2004, e parla pure al futuro...</i> <div class="noprint"><hr />Sembra infatti che questa voce contenga informazioni superate e/o obsolete. Se puoi, <a class="external text" href="https://it.wikipedia.org/w/index.php?title=CPU_cache&amp;action=edit">contribuisci</a> ad aggiornarla.</div> </div> </div> </div> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r133964453"><div style="" class="ambox metadata noprint plainlinks avviso avviso-stile"> <div class="avviso-immagine mbox-image noprint"><span typeof="mw:File"><a href="/wiki/File:Squola_SVG.svg" class="mw-file-description" title="Grammatica da correggere!"><img alt="Grammatica da correggere!" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Squola_SVG.svg/45px-Squola_SVG.svg.png" decoding="async" width="45" height="45" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Squola_SVG.svg/68px-Squola_SVG.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Squola_SVG.svg/90px-Squola_SVG.svg.png 2x" data-file-width="125" data-file-height="125" /></a></span></div> <div class="avviso-testo mbox-text"> <div class="mbox-text-div"><b>Questa voce o sezione &#32;sull'argomento informatica contiene errori <a href="/wiki/Ortografia" title="Ortografia">ortografici</a> o <a href="/wiki/Sintassi" title="Sintassi">sintattici</a> oppure è scritta in una forma migliorabile</b>. <div class="hide-when-compact"> <div class="noprint"><hr /><a class="external text" href="https://it.wikipedia.org/w/index.php?title=CPU_cache&amp;action=edit">Contribuisci</a> a correggerla secondo le convenzioni della <a href="/wiki/Lingua_italiana" title="Lingua italiana">lingua italiana</a> e del <a href="/wiki/Aiuto:Manuale_di_stile" title="Aiuto:Manuale di stile">manuale di stile di Wikipedia</a>. Segui i suggerimenti del <a href="/wiki/Progetto:Informatica" title="Progetto:Informatica">progetto di riferimento</a>.</div> </div> </div> </div> </div> <style data-mw-deduplicate="TemplateStyles:r130657691">body:not(.skin-minerva) .mw-parser-output .vedi-anche{font-size:95%}</style><style data-mw-deduplicate="TemplateStyles:r139142988">.mw-parser-output .hatnote-content{align-items:center;display:flex}.mw-parser-output .hatnote-icon{flex-shrink:0}.mw-parser-output .hatnote-icon img{display:flex}.mw-parser-output .hatnote-text{font-style:italic}body:not(.skin-minerva) .mw-parser-output .hatnote{border:1px solid #CCC;display:flex;margin:.5em 0;padding:.2em .5em}body:not(.skin-minerva) .mw-parser-output .hatnote-text{padding-left:.5em}body.skin-minerva .mw-parser-output .hatnote-icon{padding-right:8px}body.skin-minerva .mw-parser-output .hatnote-icon img{height:auto;width:16px}body.skin--responsive .mw-parser-output .hatnote a.new{color:#d73333}body.skin--responsive .mw-parser-output .hatnote a.new:visited{color:#a55858}</style> <div class="hatnote noprint vedi-anche"> <div class="hatnote-content"><span class="noviewer hatnote-icon" typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/8/87/Magnifying_glass_icon_mgx2.svg/18px-Magnifying_glass_icon_mgx2.svg.png" decoding="async" width="18" height="18" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/87/Magnifying_glass_icon_mgx2.svg/27px-Magnifying_glass_icon_mgx2.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/87/Magnifying_glass_icon_mgx2.svg/36px-Magnifying_glass_icon_mgx2.svg.png 2x" data-file-width="286" data-file-height="280" /></span></span> <span class="hatnote-text">Lo stesso argomento in dettaglio: <b><a href="/wiki/Memoria_cache" title="Memoria cache">Memoria cache</a></b>.</span></div> </div> <p>La <b>CPU cache</b> è una <a href="/wiki/Memoria_(informatica)" title="Memoria (informatica)">memoria</a> veloce e di piccole dimensioni integrata nel <a href="/wiki/Processore" title="Processore">processore</a>, progettata per migliorare le prestazioni riducendo il tempo necessario per accedere ai dati dalla memoria principale (<a href="/wiki/RAM" title="RAM">RAM</a>). </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Caratteristiche">Caratteristiche</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=1" title="Modifica la sezione Caratteristiche" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=1" title="Edit section&#039;s source code: Caratteristiche"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <figure class="mw-default-size mw-halign-left" typeof="mw:File/Thumb"><a href="/wiki/File:Cache,basic.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Cache%2Cbasic.svg/220px-Cache%2Cbasic.svg.png" decoding="async" width="220" height="96" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Cache%2Cbasic.svg/330px-Cache%2Cbasic.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Cache%2Cbasic.svg/440px-Cache%2Cbasic.svg.png 2x" data-file-width="320" data-file-height="140" /></a><figcaption>Confronto tra memoria RAM e memoria CPU cache</figcaption></figure> <p>Il diagramma a sinistra mostra due memorie, la principale e la cache. Ogni posizione della memoria cache contiene un dato (una <i>linea di cache</i>), che, tra i diversi tipi di cache, varia tra 512 <a href="/wiki/Byte" title="Byte">byte</a> e 8 <a href="/wiki/Megabyte" class="mw-redirect" title="Megabyte">MB</a>. La dimensione della posizione di memoria della cache è normalmente più piccola di quella di una memoria normale, che tipicamente varia tra 1 e 16 <a href="/wiki/Gigabyte" class="mw-redirect" title="Gigabyte">GB</a>. Ogni posizione di memoria ha un indice (anche chiamato indirizzo di memoria), cioè un identificatore univoco utilizzato per riferirsi a quella specifica posizione. Ogni posizione nella cache possiede anche un'etichetta (tag) che contiene l'indice in memoria principale del dato ivi caricato. Nelle cache dati, questi valori sono chiamati blocchi di cache o linee di cache. Finché la maggior parte degli accessi alla memoria avviene per i dati memorizzati nella cache, la <a href="/wiki/Latenza" title="Latenza">latenza</a> media dell'accesso alla memoria sarà più vicina alla latenza della cache piuttosto che a quella della memoria principale, perciò le performance saranno migliori. </p><p>Quando il processore necessita di leggere o scrivere in una data collocazione in memoria principale, inizialmente controlla se il contenuto di questa posizione è caricato in cache. Questa operazione viene effettuata confrontando l'indirizzo della posizione di memoria con tutte le etichette nella cache che potrebbero contenere il dato a quell'indirizzo. Se il processore trova che la posizione di memoria è in cache, si parla di cache hit (accesso avvenuto con successo), altrimenti di cache miss (fallimento dell'accesso). Nel caso di un cache hit, il processore legge o scrive immediatamente il dato sulla linea di cache. Il rapporto tra cache hit e accessi totali è chiamato anche hit rate ed è una misura indiretta dell'efficacia dell'algoritmo di cache. </p><p>Nel caso di un cache miss, ne consegue (per la maggior parte delle cache) la creazione di una nuova entità, che comprende l'etichetta appena richiesta dal processore e una copia del dato nella memoria principale. Un fallimento del genere è relativamente lento, in quanto richiede il trasferimento del dato dalla memoria principale, in taluni casi dopo avere cancellato il dato non più valido. </p><p>Questo è il motivo per cui una cache molto capiente, anche se gestita con un algoritmo efficiente, in alcune circostanze può essere controproducente in termini di prestazioni. Infatti, il processo di cancellazione di un dato in cache, scaduto e non più valido, e il caricamento nella cache del dato corretto richiede tipicamente più tempo rispetto a quando la CPU legge il dato direttamente dalla memoria principale senza valersi della cache. In altre parole, una cache ampia può comportare, in specifiche situazioni di calcolo, per esempio non iterativi, un numero superiore di cache miss che di cache hit, con un sensibile degrado delle prestazioni. </p> <div class="mw-heading mw-heading2"><h2 id="Alcuni_dettagli_operativi">Alcuni dettagli operativi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=2" title="Modifica la sezione Alcuni dettagli operativi" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=2" title="Edit section&#039;s source code: Alcuni dettagli operativi"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Per poter far spazio a nuovi dati nel caso di un <i>cache miss</i>, la cache generalmente deve eliminare il contenuto di una delle linee. L'<a href="/wiki/Euristica_(informatica)" class="mw-redirect" title="Euristica (informatica)">euristica</a> che utilizza per scegliere quale dato eliminare è chiamata politica di rimpiazzamento. Il problema fondamentale di ogni politica di rimpiazzamento è quello di dover predire il dato della cache che verrà richiesto nel futuro con minor probabilità. </p><p>Predire il futuro è difficile, soprattutto per le cache hardware che devono sfruttare regole facilmente implementabili in circuiteria, perciò esistono una serie di politiche di rimpiazzamento e nessuna di esse può essere ritenuta perfetta. Una delle più popolari, la <a href="/wiki/Least_Recently_Used" class="mw-redirect" title="Least Recently Used">LRU</a> (dall'inglese <i>Least Recently Used</i>, cioè <i>usato meno recentemente</i>), rimpiazza, appunto, il dato al quale si è fatto accesso meno recentemente. </p><p>Quando un dato è scritto nella cache, dopo un po' di tempo deve comunque essere scritto in <a href="/wiki/Memoria_(informatica)#Memoria_primaria" title="Memoria (informatica)">memoria principale</a>. La decisione del momento in cui questa scrittura deve aver luogo è controllata dalla politica di scrittura. In una cache <i>write-through,</i> ogni scrittura sulla cache comporta una scrittura contemporanea nella memoria principale. In alternativa, una cache <i>write-back</i> non esegue immediatamente questa azione: al contrario, la cache tiene traccia delle linee che contengono dati da aggiornare settando opportunamente quello che viene chiamato il <i>dirty bit</i>. Il dato viene effettivamente scritto in memoria solo quando esso deve essere eliminato dalla cache per far spazio a nuove informazioni. Per questa ragione, una ricerca fallita in una cache write-back spesso genera due accessi alla memoria: uno per leggere il nuovo dato, l'altro per scrivere la vecchia informazione (se indicato dal dirty bit). Sia il write-back, sia il write-through servono a mantenere la coerenza tra i livelli di memoria. </p><p>Esistono anche alcune politiche intermedie. La cache potrebbe essere ad esempio write-through, ma le scritture potrebbero essere temporaneamente inserite in una coda, così da processare insieme scritture multiple, ottimizzando l'accesso al <a href="/wiki/Bus_(informatica)" title="Bus (informatica)">bus</a>. </p><p>I dati in memoria principale, dei quali esiste una copia nella cache, potrebbero essere modificati da altre cause (evento non improbabile, ad esempio, in un sistema <a href="/wiki/Multiprocessore" title="Multiprocessore">multiprocessore</a>), perciò i dati nella cache potrebbero diventare obsoleti. I protocolli di comunicazione tra i sistemi di gestione delle cache che conservano la consistenza dei dati sono chiamati protocolli di coerenza. </p><p>Il tempo impiegato per leggere un dato dalla memoria (la latenza di lettura) è importante, perché spesso una CPU potrebbe completare la propria coda di operazioni mentre aspetta l'arrivo del dato richiesto. Quando un microprocessore raggiunge questo stato, si parla di stallo della CPU. Con l'aumento della velocità dei microprocessori, l'andare in stallo per cache miss spreca molta potenza di calcolo; le CPU moderne, infatti, possono eseguire centinaia d'istruzioni nello stesso tempo necessario per caricare un singolo dato dalla memoria. Sono state studiate, perciò, varie tecniche per "tenere occupata" la CPU durante questa fase. Alcuni microprocessori, come il <a href="/wiki/Pentium_Pro" title="Pentium Pro">Pentium Pro</a>, tentano di eseguire le operazioni che seguono quella che sta aspettando il dato, se indipendenti da essa (per questo in inglese sono chiamati <i><a href="/wiki/Esecuzione_fuori_ordine" title="Esecuzione fuori ordine">out-of-order</a></i>). Il <a href="/wiki/Pentium_4" title="Pentium 4">Pentium 4</a> usa il <a href="/wiki/Multithreading" title="Multithreading">multithreading</a> simultaneo (chiamato <a href="/wiki/HyperThreading" class="mw-redirect" title="HyperThreading">HyperThreading</a> nella terminologia <a href="/wiki/Intel" title="Intel">Intel</a>), che permette a un altro programma di usare la CPU mentre un primo programma sta aspettando l'arrivo di dati dalla memoria principale. </p> <div class="mw-heading mw-heading2"><h2 id="Associatività"><span id="Associativit.C3.A0"></span>Associatività</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=3" title="Modifica la sezione Associatività" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=3" title="Edit section&#039;s source code: Associatività"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Cache,associative-fill-both.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/93/Cache%2Cassociative-fill-both.png/440px-Cache%2Cassociative-fill-both.png" decoding="async" width="440" height="218" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/9/93/Cache%2Cassociative-fill-both.png 1.5x" data-file-width="546" data-file-height="271" /></a><figcaption>Quali posizioni di memoria possono essere caricate in quali posizioni della cache</figcaption></figure> <p>La politica di rimpiazzamento decide dove, nella cache, può risiedere una copia di una particolare posizione di memoria. Se tale politica è libera di scegliere in quale linea di cache caricare il dato, la cache viene chiamata <i>fully associative</i> (o anche completamente associativa). Invece, se ogni dato in memoria può essere posizionato solo in una particolare linea di cache, essa è detta <i>direct mapped</i> (o anche a mappatura diretta). La maggior parte delle cache, però, implementa un compromesso chiamato <i>set associative</i> (o anche parzialmente associativa). Per esempio, la cache dati di livello 1 dell'<a href="/wiki/Advanced_Micro_Devices" title="Advanced Micro Devices">AMD</a> <a href="/wiki/Athlon" title="Athlon">Athlon</a> è <i>2-way set associative</i>, cioè una particolare posizione di memoria può essere caricata in cache in due distinte posizioni nella cache dati di livello 1. </p><p>Se ogni posizione in memoria principale può essere caricata in due posizioni diverse, la domanda sorge spontanea: quali? Lo schema utilizzato più frequentemente è mostrato nel diagramma a lato: i bit meno significativi dell'indice della posizione di memoria vengono usati come indici per la cache e a ognuno di questi indici sono associate due linee di cache. Una buona proprietà di questo schema è che le etichette dei dati caricati in cache non devono includere quella parte dell'indice già codificata dalla linea di cache scelta. Poiché i tag sono espressi su meno bit, occupano meno memoria e il tempo per processarli è minore. </p><p>Sono stati suggeriti altri schemi, come quello della <i>skewed cache</i>, dove l'indice della <i>way 0</i> è diretto, come sopra, mentre l'indice per la <i>way 1</i> è calcolato attraverso una funzione di hash. Una buona funzione di hash ha la proprietà che gli indirizzi che sono in conflitto con il direct mapping tendono a non collidere quando sono mappati con la funzione di hash, così è meno probabile che un programma soffra di un numero imprevedibilmente grande di collisioni dovuti a un metodo d'accesso particolarmente patologico. Lo svantaggio è il ritardo aggiuntivo necessario per calcolare il risultato della funzione di hash. In aggiunta, quando diventa necessario caricare una nuova linea ed eliminarne una vecchia, potrebbe rivelarsi difficile determinare quale tra le linee esistenti è stata usata meno recentemente, in quanto la nuova linea entra in conflitto con differenti "set" di linee per ogni "way"; il tracciamento LRU è infatti normalmente calcolato per ogni set di linee. </p><p>L'associatività rappresenta un compromesso. Se ci sono dieci posizioni, la politica di rimpiazzamento può riempire una nuova linea, ma quando si cerca un dato, è necessario controllare tutte e 10 le posizioni. La necessità di controllare più posizioni richiede più potenza, spazio e tempo. D'altra parte, le cache con più associatività soffrono di meno di cache miss (di cui si parlerà nel paragrafo successivo). La regola generale è che raddoppiare l'associatività ha circa lo stesso effetto sull'hit rate del raddoppiare della dimensione della cache, passando da 1-way (direct mapping) a 4-way. Aumenti dell'associatività oltre il 4-way hanno un impatto molto meno significativo sull'hit rate e sono generalmente utilizzati per altri motivi (come il virtual aliasing, trattato nella sezione "Traduzione degli Indizi"). </p><p>Uno dei vantaggi della cache direttamente mappata, è che permette un'esecuzione speculativa semplice e veloce. Una volta calcolato l'indirizzo, è noto quale linea di cache potrebbe contenere il dato. Questa può essere letta e il processore può continuare a lavorare con quel dato prima di completare il controllo per verificare se l'etichetta corrisponde effettivamente all'indirizzo richiesto. </p><p>L'idea che il processore utilizzi i dati in cache prima ancora di verificare la corrispondenza tra etichetta e indirizzo può essere applicata anche alle cache associative. Un sottoinsieme dell'etichetta, chiamato hint in inglese, può essere utilizzato temporaneamente per selezionare una delle linee di cache associate all'indirizzo richiesto. Questo dato può essere utilizzato dalla CPU in parallelo, mentre l'etichetta viene controllata completamente. Questa tecnica funziona meglio quando è utilizzata nel contesto della traduzione degli indirizzi, come spiegato più avanti. </p> <div class="mw-heading mw-heading2"><h2 id="Cache_miss">Cache miss</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=4" title="Modifica la sezione Cache miss" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=4" title="Edit section&#039;s source code: Cache miss"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Con fallimento della cache (in inglese cache miss) ci si riferisce a un intento fasullo nel leggere o scrivere un pezzo di dati nella cache, che ha come risultato una latenza molto più lunga nell'accesso alla memoria principale. Per un fallimento nella lettura dalla cache istruzioni, il processore deve aspettare (<i>stallo</i>) finché l'istruzione non è caricata dalla memoria principale. Un fallimento della cache causato dal caricamento di un dato può invece essere meno doloroso, perché le altre istruzioni non correlate a esso possono comunque essere eseguite, finché l'operazione che richiede i dati da caricare può essere eseguita. Comunque, i dati sono spesso usati immediatamente dopo l'istruzione di caricamento. L'ultimo caso di <i>cache miss</i>, cioè un fallimento in scrittura, è il meno preoccupante, perché di solito la scrittura è bufferizzata. Il processore può continuare tranquillamente finché il buffer non è pieno. (Non esiste un fallimento nella scrittura della cache istruzioni perché esse sono di sola lettura.) </p><p>Per minimizzare la frequenza di <i>cache miss</i>, un grande sforzo di analisi è stato fatto sul comportamento della cache per trovare la miglior combinazione di dimensione, associatività, dimensione dei blocchi e così via. Sequenze di referenze di memoria create dai programmi di <a href="/wiki/Benchmark_(informatica)" title="Benchmark (informatica)">benchmark</a> sono salvati come <i>address traces</i>. Ulteriori analisi simulano molte differenti possibilità d'implementazione della cache basate su queste lunghe <i>address traces</i>. Far capire come le molteplici variabili modifichino la frequenza di <a href="/wiki/Cache_hit" class="mw-redirect" title="Cache hit">cache hit</a> può risultare abbastanza confusionario. </p><p>Un contributo significante fu fatto da Mark Hill, il quale separò i vari fallimenti della cache in tre categorie (conosciute come <i>"le tre C"</i>): </p> <ul><li><i>Compulsory misses</i> sono quei fallimenti causati dalla prima referenza a un dato. La dimensione della cache e la associatività non fanno differenze al numero di <i>compulsory misses</i>. Il prefetching può aiutare qui, così come lo possono fare larghe dimensioni dei blocchi della cache (che sono un tipo di prefetching).</li> <li><i>Capacity misses</i> sono quei fallimenti che una cache di una data dimensione avrà, a dispetto dell'associatività o della dimensione del blocco. La curva della frequenza dei <i>capacity misses </i>rispetto alla dimensione della cache fornisce una qualche misura della località temporanea di un particolare flusso di referenze.</li> <li><i>Conflict misses</i> sono quei fallimenti che avrebbero potuto essere evitati se la cache non avesse ripulito un dato precedentemente. I <i>conflict misses</i> potrebbero essere ulteriormente divisi in <i>mapping misses</i>, che sono inevitabili data una particolare associatività, e <i>replacement misses</i>, che sono causati dalla particolare scelta della regola di rimpiazzamento.</li></ul> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Cache,missrate.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Cache%2Cmissrate.png/220px-Cache%2Cmissrate.png" decoding="async" width="220" height="140" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Cache%2Cmissrate.png/330px-Cache%2Cmissrate.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Cache%2Cmissrate.png/440px-Cache%2Cmissrate.png 2x" data-file-width="453" data-file-height="288" /></a><figcaption>Frequenza di fallimento (<i>miss rate</i>) a confronto con la dimensione della cache (Cache size) sulla porzione degli interi di SPEC CPU2000</figcaption></figure> <p>Il grafico a destra riassume la performance della cache vista dai benchmarks della porzione degli interi di un SPEC CPU2000, ripresa da Hill e Cantin <a rel="nofollow" class="external autonumber" href="http://www.cs.wisc.edu/multifacet/misc/spec2000cache-data/">[1]</a>. Questi benchmark servono a rappresentare il tipo di carico di lavoro che una postazione di lavoro potrebbe subire un giorno qualsiasi. In questo grafico possiamo vedere i differenti effetti delle <i>tre C</i>. </p><p>All'estrema destra, quando la cache size assume un valore "Inf" (che, in altre parole, tende all'infinito), abbiamo i <i>compulsory misses</i>. Se volessimo migliorare le caratteristiche dello SpecInt2000, aumentare la dimensione della cache oltre 1MB sarebbe praticamente inutile. </p><p>La frequenza di fallimento della <i>cache fully-associative</i> rappresenta a pieno la frequenza dei <i>capacity misses</i>. Nelle simulazioni, è stata scelta una regola di rimpiazzamento LRU: questo mostra che per minimizzare la frequenza dei <i>capacity misses</i> sarebbe necessaria una regola di rimpiazzamento perfetta, come se ad esempio un veggente indagasse nel futuro per trovare una posizione della cache che non stia per essere utilizzata. </p><p>Notare come, nella nostra approssimazione della frequenza dei <i>capacity misses</i>, il grafico abbia una brusca caduta tra i 32KB e i 64KB. Questo indica che il benchmark ha un <a href="/w/index.php?title=Working_set&amp;action=edit&amp;redlink=1" class="new" title="Working set (la pagina non esiste)">working set</a> di circa 64KB. Un progettista di cache, esaminando questi benchmark, sarebbe fortemente tentato d'impostare la dimensione della cache appena sopra i 64KB, piuttosto che appena sotto questo valore. Bisogna notare inoltre che, su questa simulazione, nessun tipo di associatività può far andare una cache a 32KB bene come una da 64KB 4-way, o addirittura come una direct-mapped da 128KB. </p><p>Infine, notare che tra i 64KB ed 1MB c'è una grande differenza tra la cache di tipo direct-mapped e quella fully-associative. Questa differenza è la frequenza dei <i>conflict misses</i>. Secondo i dati del 2004, le cache di secondo livello montate direttamente sul <a href="/wiki/Circuito_integrato" title="Circuito integrato">chip</a> del processore tendono a stare in questo intervallo di valori, in quanto le cache piccole sono veloci abbastanza da essere cache di primo livello, mentre quelle più grandi sono troppo costose per essere montate economicamente sul chip stesso (l'<a href="/wiki/Itanium_2" title="Itanium 2">Itanium 2</a> ha una cache di terzo livello da 9MB, la più grande cache on-chip disponibile sul mercato nel 2004). Dal punto di vista della frequenza dei <i>conflict misses</i>, risulta che la cache di secondo livello trae un grande beneficio dall'alta associatività. </p><p>Questo beneficio era ben conosciuto nei tardi <a href="/wiki/Anni_1980" title="Anni 1980">anni ottanta</a> e primi <a href="/wiki/Anni_1990" title="Anni 1990">anni novanta</a>, quando i progettisti di CPU non potevano far stare grandi cache sui chip e non disponevano di sufficiente larghezza di banda per implementare alta associatività sulle cache al di fuori del chip del processore. Furono provate varie soluzioni: il <a href="/wiki/Architettura_MIPS" title="Architettura MIPS">MIPS</a> R8000 usava delle costose <a href="/wiki/SRAM" title="SRAM">SRAM</a> off-chip dedicate, che includevano dei comparatori di etichette e dei grandi driver, per implementare una cache associativa 4-way da 4MB. Il MIPS R10000 usava dei chip ordinari di SRAM per le etichette. L'accesso alle etichette, in entrambe le direzioni, necessitava di due cicli: per ridurre la latenza, il R10000, per ogni accesso, cercava di predire quale modo della cache sarebbe stato quello corretto. </p> <div class="mw-heading mw-heading2"><h2 id="Cache_hit">Cache hit</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=5" title="Modifica la sezione Cache hit" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=5" title="Edit section&#039;s source code: Cache hit"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Con cache colpita (in inglese cache hit) ci si riferisce invece a un successo da parte del processore nel trovare l'indirizzo della posizione di memoria tra le varie etichette della cache che potrebbero contenerlo. In caso di successo, il processore può leggere (<i>Hit di lettura di cache</i>) o scrivere (<i>Hit di scrittura di cache</i>) il dato sulla linea di cache. </p><p>In caso di <i>Hit di lettura</i>, il processore legge la parola direttamente dalla cache senza coinvolgere la memoria centrale. Per quanto riguarda la <i>Hit di scrittura</i>, ci si rimanda all'approfondimento sulla <a href="#Alcuni_dettagli_operativi">politica di scrittura della cache</a> </p> <div class="mw-heading mw-heading2"><h2 id="Traduzione_degli_indirizzi">Traduzione degli indirizzi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=6" title="Modifica la sezione Traduzione degli indirizzi" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=6" title="Edit section&#039;s source code: Traduzione degli indirizzi"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>La maggior parte delle CPU comunemente utilizzate implementano un qualche tipo di <a href="/wiki/Memoria_virtuale" title="Memoria virtuale">memoria virtuale</a>. In pratica, ogni programma che gira sulla macchina vede il proprio spazio di memoria, che contiene codice e dati per il solo programma stesso, in maniera semplificata. Ogni programma mette tutto nel proprio spazio di memoria senza preoccuparsi di quello che gli altri programmi fanno nei loro rispettivi spazi di memoria. </p><p>La memoria virtuale richiede che il processore traduca gli indirizzi virtuali generati dal programma in indirizzi fisici nella memoria principale. La porzione del processore che fa questa traduzione è conosciuta come la <i><a href="/wiki/Memory_management_unit" class="mw-redirect" title="Memory management unit">memory management unit</a></i> (MMU). La MMU può accedere velocemente alla tabella di traduzioni attraverso il <a href="/wiki/Translation_Lookaside_Buffer" title="Translation Lookaside Buffer">Translation Lookaside Buffer</a> (TLB), che è una cache di mappature per la <a href="/w/index.php?title=Page_table&amp;action=edit&amp;redlink=1" class="new" title="Page table (la pagina non esiste)">page table</a> del sistema operativo. </p><p>La traduzione degli indirizzi ha tre caratteristiche importanti: </p> <ul><li>Latenza: Generalmente, la MMU rende disponibile l'indirizzo fisico pochi cicli dopo che l'indirizzo virtuale è computato dal generatore d'indirizzi.</li> <li>Aliasing: Più indirizzi virtuali possono riferirsi a uno stesso indirizzo fisico. La maggior parte dei processori garantisce che tutti gli aggiornamenti al singolo indirizzo fisico vengano eseguiti in ordine. Per permettere ciò, il processore deve assicurarsi che, in ogni istante, esista in cache una sola copia di ogni indirizzo fisico.</li> <li>Granularità: Lo spazio degli indirizzi virtuali è suddiviso in pagine. Per esempio, uno spazio virtuale d'indirizzi di 4GB potrebbe essere spezzettato in 1048576 pagine da 4Kb, ognuna delle quali può essere referenziata indipendentemente. Per il supporto di pagine di dimensioni variabili, vedere la voce <a href="/wiki/Memoria_virtuale" title="Memoria virtuale">memoria virtuale</a>.</li></ul> <p>Una nota storica: i primi sistemi con memoria virtuale erano molto lenti, perché richiedevano un accesso alla page table (residente in memoria) prima di ogni accesso programmato alla memoria. Senza cache, questo dimezza la velocità di accesso alla memoria della macchina. Per questo motivo, la prima cache hardware usata in un computer non è stata una cache di dati o d'istruzioni, ma invece una TLB. </p><p>L'esistenza d'indirizzi fisici e virtuali pone la questione su quali di essi utilizzare per le etichette e gli indici della cache. La motivazione di usare indirizzi virtuali è la velocità: una cache di dati con indici ed etichette virtuali esclude la MMU dalle operazioni di caricamento e uso dei dati dalla memoria. Il ritardo provocato dal caricamento dei dati dalla memoria RAM (<i>load latency</i>) è cruciale per le prestazioni della CPU: per questo motivo, la maggior parte delle cache di livello 1 sono indicizzate con indirizzi virtuali, permettendo alla MMU di ricercare nella TLB in parallelo con il recupero dei dati dalla cache della RAM. </p><p>L'indirizzamento virtuale non è sempre la scelta migliore: introduce, ad esempio, il problema degli <i>alias virtuali</i>, cioè la cache potrebbe immagazzinare in più posizioni il valore di uno stesso indirizzo fisico. Il costo per la gestione degli alias virtuali cresce con la dimensione della cache e, come risultato, la maggior parte delle cache di livello 2 e superiori sono indicizzate con indirizzi fisici. </p><p>Non è comune, invece, l'uso degli indirizzi virtuali per le etichette (<i>virtual tagging</i>). Se la ricerca nella TLB finisse prima di quella nella cache RAM, allora l'indirizzo fisico sarebbe disponibile in tempo per il confronto delle etichette e, quindi, il virtual tagging non sarebbe necessario. Cache di grandi dimensioni, quindi, tendono a essere etichettate con indirizzi fisici (<i>physically tagged</i>) e solo le piccole cache con bassa latenza sono virtually tagged. Nelle CPU più recenti il virtual tagging è stato sostituito dai <i>vhints</i>, come descritto più in basso. </p> <div class="mw-heading mw-heading3"><h3 id="Virtual_indexing_e_virtual_aliases">Virtual indexing e virtual aliases</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=7" title="Modifica la sezione Virtual indexing e virtual aliases" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=7" title="Edit section&#039;s source code: Virtual indexing e virtual aliases"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Il tipico modo con cui il processore garantisce che gli alias virtuali funzionino correttamente è ordinarli in maniera che, in ogni istante, solo un alias virtuale possa essere nella cache. </p><p>Ogni volta che un nuovo valore è aggiunto alla cache, il processore cerca altri alias virtuali e li rimuove. Questa operazione avviene solo in caso di un fallimento della cache. Nessun lavoro particolare è necessario durante un cache hit, il che aiuta a mantenere il più rapido possibile il percorso veloce nella cache. </p><p>La via più immediata per trovare gli alias è di mapparli tutti alla stessa area della cache. Questo succede, per esempio, se il TLB ha pagine da 4KB, e la cache è direct-mapped e a 4KB o meno. </p><p>Le moderne cache di primo livello sono molto più grandi di 4KB, ma le pagine di memoria virtuale sono rimaste della stessa dimensione. Se, per esempio, la cache è da 16KB e indicizzata virtualmente, ogni indirizzo fisico può essere indirizzato da 4 diverse posizioni della cache, per altrettanti indirizzi virtuali. Se la cache fallisce, tutte e quattro le posizioni devono essere controllate per verificare se i loro indirizzi fisici corrispondenti effettivamente coincidono con l'indirizzo fisico dell'accesso che ha generato il fallimento. </p><p>Questi controlli sono gli stessi che una cache <i>set associative</i> usa per selezionare una particolare corrispondenza. Quindi se un cache indicizzata virtualmente da 16KB, 4-way set associative, viene usata con pagine di memoria virtuale da 4KB, non è necessario alcun lavoro aggiuntivo per eliminare gli alias virtuali in caso di cache miss, in quanto i controlli sono già stati effettuati durante il controllo della cache. </p><p>Usiamo ancora un <a href="/wiki/Advanced_Micro_Devices" title="Advanced Micro Devices">AMD</a> <a href="/wiki/Athlon_Classic" title="Athlon Classic">Athlon</a> come esempio: esso ha una cache dati di primo livello da 64KB, con pagine da 4KB, set associative 2-way. Quando la cache dati di primo livello risente di un fallimento, 2 dei 16 (=64KB/4KB) possibili alias virtuali sono già stati controllati e sono necessari sette ulteriori cicli del circuito di controllo delle etichette per completare l'eliminazione degli ulteriori alias virtuali. </p> <div class="mw-heading mw-heading3"><h3 id="Virtual_tags_and_vhints">Virtual tags and vhints</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=8" title="Modifica la sezione Virtual tags and vhints" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=8" title="Edit section&#039;s source code: Virtual tags and vhints"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>È possibile anche l'etichettatura virtuale (Virtual tagging). Il grande vantaggio del virtual tag è che, per le cache associative, permettono la corrispondenza delle etichette prima che la traduzione da virtuale a fisica sia fatta. Comunque: </p> <ul><li>Controlli di coerenza e rimozione presentano un indirizzo fisico per azione. L'hardware deve avere qualche metodo per convertire l'indirizzo fisico in un indirizzo della cache, generalmente immagazzinando etichette fisiche così come le etichette virtuali. Per confronto, una cache etichettata fisicamente non necessita di mantenere etichette virtuali, il che è più semplice.</li> <li>Quando un riferimento da virtuale a fisico viene eliminato dalla TLB, le informazioni della cache con quegli indirizzi virtuali dovranno essere svuotati in qualche maniera. Se le informazioni della cache sono permesse su pagine non mappate dalla TLB, allora queste informazioni dovranno essere svuotate quando i diritti di accesso su queste pagine cambiano nella page table.</li></ul> <p>È possibile per il sistema operativo assicurarsi che più virtual aliases siano contemporaneamente residenti nella cache. Il sistema operativo garantisce questo sforzando il <i>page coloring</i> che viene descritto più avanti. Alcuni recenti processori RISC (SPARC, RS/6000) hanno preso questo approccio. Non è stato usato di recente, siccome il costo dell'hardware per scoprire e rimuovere gli alias virtuali si è abbassato mentre la complessità e il prezzo prestazionale del software per un perfetto page coloring si è alzato. </p><p>Potrebbe essere utile distinguere le due funzioni di etichettatura in una cache associativa: vengono utilizzate per determinare quale modalità del set d'informazioni da selezionare, e vengono utilizzate per determinare se la cache fallisce o no. La seconda funzione deve essere sempre corretta, ma è permesso alla prima funzione d'indovinare, e avere la risposta sbaglia occasionalmente. </p><p>Alcuni processori (Ad esempio recenti SPARC) hanno le cache sia con etichette virtuali che fisiche. Le etichette virtuali vengono utilizzate per la selezione del modo, e le etichette fisiche sono utilizzate per determinare il centro o il fallimento. Questo tipo di cache favorisce il vantaggio della latenza di una cache a etichette virtuali, e la semplice interfaccia software di una cache a etichette fisiche. Supporta il costo aggiunto di etichette duplicate, comunque. Anche durante i processi di fallimento, i modi alternati della linea della cache devono essere controllati per virtual alias e per ogni corrispondenza rimossa. </p><p>L'area extra (e qualche latenza) può essere mitigata mantenendo <i>virtual hints</i> con ogni informazione della cache invece che con etichette virtuali. Questi hints sono un sottoinsieme o hash di un'etichetta virtuale, e vengono utilizzati per selezionare il modo della cache tramite cui prelevare un dato e un'etichetta fisica. Con una cache virtually tagged, ci potrebbe essere una corrispondenza di virtual hint ma una non corrispondenza di etichetta fisica, in questo caso la informazione nella cache con la corrispondenza dell'hint deve essere rimossa cosicché accessi alla cache dopo il riempimento della cache in questo indirizzo avranno solamente una sola corrispondenza di hint. Siccome gli hint hanno minori bit delle etichette virtuali distinguerli uno dall'altro, una cache con hint virtuali soffre di più mancanze di conflitti di una cache a etichette virtuali. </p><p>Forse la riduzione finale di hint virtuali può essere trovata nel Pentium 4 (Willamette and Northwood cores). In questi processori, l'hint virtuale è effettivamente di soli 2 bit, e la cache è 4-way associative. In effetti, l'hardware mantiene una semplice permutazione da indirizzi virtuali a indirizzi di cache, cosicché nessun CAM sia necessario per selezionare quello giusto dei quattro modi di recupero. </p> <div class="mw-heading mw-heading3"><h3 id="Page_coloring">Page coloring</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=9" title="Modifica la sezione Page coloring" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=9" title="Edit section&#039;s source code: Page coloring"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Cache indicizzate fisicamente larghe (solitamente cache secondarie) riscontrano un problema: il sistema operativo piuttosto che le applicazioni controlla quali pagine collidono vicendevolmente nella cache. Differenze nell'allocazione delle pagine da un programma portano al prossimo livello di differenze nei percorsi di collisione della cache, i quali possono portare a differenze molto larghe nelle prestazioni dei programmi. Queste differenze possono far diventare molto difficile ottenere un consistente e ripetibile tempo di benchmark per i programmi in esecuzione, che porta ingegneri pagati e sconsolati a richiedere che gli autori del sistema operativo risolvano il problema. </p><p>Per capire il problema, consideriamo una CPU con 1MB di cache di livello-2 direct-mapped indicizzata fisicamente e 4KB di pagine di memoria virtuale. Pagine fisiche in sequenza si mappano in posizioni in sequenza nella cache fino a che dopo 256 pagine il percorso torna su se stesso. Possiamo etichettare ogni pagina fisica con un colore da 0-255 per denotare dove nella cache può andare. Posizioni all'interno di pagine fisiche con colori differenti non possono entrare in conflitto nella cache. </p><p>Un programmatore che voglia usare al massimo l'uso della cache potrebbe arrangiare i suoi accessi del programma cosicché solo 1MB di data necessiti di essere messo in cache per volta, tutto questo evitando fallimenti di capacità. Ma dovrebbe anche assicurarsi che gli accessi non abbiano fallimenti di conflitto. Un modo per pensare a questo problema è di suddividere le pagine virtuali che utilizza il programma e assegnare a loro colori virtuali nello stesso modo come colori fisici erano assegnati a pagine fisiche precedentemente. Il programmatore può poi arrangiare gli accessi del suo codice in modo che due pagine con lo stesso colore virtuale non siano in uso nello stesso momento. C'è una distesa letteratura su queste ottimizzazioni (per esempio. <a href="/w/index.php?title=Loop_nest_optimization&amp;action=edit&amp;redlink=1" class="new" title="Loop nest optimization (la pagina non esiste)">Loop nest optimization</a>), proveniente soprattutto dalla comunità <a href="/wiki/High_Performance_Computing" class="mw-redirect" title="High Performance Computing">High Performance Computing</a> (HPC). </p><p>Il concetto è che mentre tutte le pagine in uso in un determinato momento, potrebbero avere differenti colori virtuali, alcune potrebbero avere lo stesso colore fisico, Infatti, se il sistema operativo assegna pagine fisiche a pagine virtuali in modo casuale e uniforme, è molto probabile che alcune pagine abbiano lo stesso colore fisico, e quindi posizioni da queste pagine coincidano nella cache (questo è il <a href="/w/index.php?title=Birthday_paradox&amp;action=edit&amp;redlink=1" class="new" title="Birthday paradox (la pagina non esiste)">Birthday paradox</a>). </p><p>La soluzione sta nel fare in modo che il sistema operativo tenti di assegnare pagine fisiche colorate diversamente a differenti colori virtuali, una tecnica chiamata <i>page coloring</i>. Sebbene la mappatura attuale da colori virtuali a fisici sia irrilevante per le prestazioni del sistema, mappature dispari sono difficili da tracciare e hanno piccoli benefici, quindi la maggior parte degli approcci alla colorazione delle pagine tenta semplicemente di tenere pagine fisiche e virtuali colorate nello stesso modo. </p><p>Se il sistema operativo può garantire che ogni pagina fisica si riferisca a un solo colore virtuale, allora non vi sono virtual alias, e il processore può usare cache virtually indexed senza la necessità di controlli su extra virtual alias durante la gestione del fallimento. Alternativamente il sistema operativo può svuotare una pagina dalla cache quantunque cambi da un colore virtuale a un altro. Come menzionato prima, questo approccio fu usato da qualche recente progettazione SPARC e RC/6000. </p> <div class="mw-heading mw-heading2"><h2 id="Gerarchia_delle_cache_in_un_processore_moderno">Gerarchia delle cache in un processore moderno</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=10" title="Modifica la sezione Gerarchia delle cache in un processore moderno" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=10" title="Edit section&#039;s source code: Gerarchia delle cache in un processore moderno"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>I processori moderni dispongono sul chip di cache multiple con cui interagire. Due motivi, in particolare, hanno portato allo sviluppo della attuale gerarchia delle cache. </p> <div class="mw-heading mw-heading3"><h3 id="Cache_specializzate">Cache specializzate</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=11" title="Modifica la sezione Cache specializzate" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=11" title="Edit section&#039;s source code: Cache specializzate"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Il primo motivo è che CPU con pipeline accedono alla memoria da molteplici punti nella pipeline: recupero delle istruzioni, traduzione indirizzi da virtuali a fisici, e recupero dei dati. La naturale implementazione è di utilizzare differenti cache fisiche per ognuno di questi punti, cosicché nessuna risorsa fisica debba essere programmata per servire due punti nella pipeline. Sebbene la pipeline finisca naturalmente con almeno tre cache separate (istruzioni, TLB, e data), ognuna è specializzata in un ruolo particolare. </p> <div class="mw-heading mw-heading3"><h3 id="Victim_cache">Victim cache</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=12" title="Modifica la sezione Victim cache" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=12" title="Edit section&#039;s source code: Victim cache"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Una victim cache è una cache utilizzata per mantenere blocchi rimossi dalla cache della CPU a causa di un conflict miss o capacity miss. La victim cache è situata tra la cache primaria e la memoria sottostante, e mantiene solamente i blocchi rimossi dopo un miss. Questa tecnica è utilizzata per ridurre la penalità in cui si incorre per un fallimento della cache, perché può accadere che i dati che sono nella victim cache vengano richiesti qualche tempo dopo, e allora invece di dichiarare un miss, e andare in memoria a recuperare questi dati, si controlla la victim cache e si utilizzano i dati che sono ancora dentro di essa. </p><p>La victim cache originale su un HP PA7200 fu una cache piccola, fully-associative. Processori posteriori, come gli <a href="/wiki/Advanced_Micro_Devices" title="Advanced Micro Devices">AMD</a> <a href="/wiki/Athlon_Classic" title="Athlon Classic">Athlon</a>, <a href="/wiki/Athlon_XP" title="Athlon XP">Athlon XP</a> e <a href="/wiki/Athlon_64" title="Athlon 64">Athlon 64</a> utilizzavano la cache secondaria molto grande come una victim cache, per evitare ripetizioni d'immagazzinamenti del contesto sulla cache primaria. </p> <div class="mw-heading mw-heading3"><h3 id="Trace_cache">Trace cache</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=13" title="Modifica la sezione Trace cache" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=13" title="Edit section&#039;s source code: Trace cache"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Uno dei più estremi esempi di specializzazione della cache è quello della trace cache utilizzata nei microprocessori <a href="/wiki/Pentium_4" title="Pentium 4">Pentium 4</a>. Una trace cache è un meccanismo per aumentare il <a href="/w/index.php?title=Fetch_bandwidth&amp;action=edit&amp;redlink=1" class="new" title="Fetch bandwidth (la pagina non esiste)">fetch bandwidth</a> d'istruzioni immagazzinando tracce d'istruzioni che sono già state immagazzinate. Il meccanismo fu per la prima volta proposta da <a href="/w/index.php?title=Eric_Rotenberg&amp;action=edit&amp;redlink=1" class="new" title="Eric Rotenberg (la pagina non esiste)">Eric Rotenberg</a>, <a href="/w/index.php?title=Steve_Bennett&amp;action=edit&amp;redlink=1" class="new" title="Steve Bennett (la pagina non esiste)">Steve Bennett</a> e Jim Smith nel loro articolo del 1996: "<i>Trace Cache: a Low Latency Approach to High Bandwidth Instruction Fetching.</i>" </p><p>Una trace cache immagazzina le istruzioni anche dopo che esse siano state eseguite, o come vengono ritirate. Generalmente, le istruzioni vengono aggiunte alle trace cache in gruppi che rappresentano sia blocchi individuali di base che tracce d'istruzioni dinamiche. Un blocco base consiste in un gruppo d'istruzioni non-branch (Non suddivise) che finiscono con una ramificazione. Una traccia dinamica ("trace path" o "traccia del percorso") consistono nelle solo istruzioni di cui il risultato viene effettivamente utilizzato, ed elimina le istruzioni seguenti che prendono ramificazioni (Siccome non sono eseguite); una traccia dinamica può essere il concatenamento di multipli di blocchi base. Questo permette all'unità di recupero delle istruzioni di recuperare parecchi blocchi basici, senza la preoccupazioni riguardante la ramificazione nel flusso dell'esecuzione. </p><p>Le linee di traccia vengono immagazzinate nella trace cache in base al <a href="/wiki/Program_counter" title="Program counter">program counter</a> della prima istruzione nella traccia e un set di predizioni di ramificazioni. Questo permette l'immagazzinamento di differenti tracce di percorsi che iniziano con lo stesso indirizzo, ognuna delle quali rappresenta differenti risultati di ramificazione. Nello stage dell'immagazzinamento delle istruzioni di un'<a href="/w/index.php?title=Instruction_pipeline&amp;action=edit&amp;redlink=1" class="new" title="Instruction pipeline (la pagina non esiste)">Instruction pipeline</a>, il program counter corrente insieme a un set di predizioni di ramificazione viene controllato nella trace cache per un hit. Se un hit avviene, una linea di trace viene fornita per recuperare quale non deve andare in una cache regolare o in memoria per queste istruzioni. La trace cache continua ad alimentare la fetch unit fino a che la linea di traccia finisce o fino a che vi sia una <a href="/w/index.php?title=Misprediction&amp;action=edit&amp;redlink=1" class="new" title="Misprediction (la pagina non esiste)">misprediction</a> nella pipeline. Se c'è un fallimento, una nuova traccia inizia a essere creata. Il vantaggio rispetto alle normali cache per il codice è che non vengono mantenute in cache tutte le istruzioni successive a un branch che sia incondizionato o predetto come non seguito: il risultato è che non si formano "bolle" di codice non utilizzato che sprecano spazio di memoria della cache. </p><p>Le Trace cache vengono anche impiegate in processori quali l'<a href="/wiki/Pentium_4" title="Pentium 4">Intel Pentium 4</a> per immagazzinare micro operazioni già decodificate, o traduzioni di complesse istruzioni x86, cosicché alla successiva richiesta della stessa istruzione, non debba essere decodificata. </p><p>L'idea che sta alla base della trace cache è che nei processori <a href="/wiki/CISC" class="mw-redirect" title="CISC">CISC</a> che internamente utilizzano istruzioni <a href="/wiki/Reduced_instruction_set_computer" title="Reduced instruction set computer">RISC</a>, come il Pentium 4, la decodifica delle istruzioni è un'operazione estremamente onerosa, e il suo risultato dovrebbe essere sfruttato al meglio. Utilizzare una trace cache in luogo di una normale cache ha proprio questo vantaggio: non dover decodificare un'istruzione già incontrata durante l'esecuzione di un programma. </p><p>Ultimamente la trace cache non gode di molti favori a causa di alcuni difetti. Il primo è che molte istruzioni RISC sono tradotte in una singola istruzione CISC in un solo ciclo di clock, e le istruzioni che necessitano di più cicli di clock per essere tradotte in più istruzioni di tipo RISC sono relativamente poche e poco frequenti, per cui il vantaggio effettivo della trace cache è limitato. A questo si aggiunge il fatto che, nel caso dell'architettura di Intel, le istruzioni di tipo CISC hanno lunghezza variabile in genere tra 1 e 6 byte (tra gli 8 e i 48 bit), mentre tutte le istruzioni RISC utilizzate internamente hanno lunghezza fissa di 118 bit. Quindi a parità di dimensioni una trace cache contiene molte meno istruzioni di una cache normale. </p><p>Vedi il testo <cite class="citation testo" style="font-style:normal"> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080403043445/http://citeseer.ist.psu.edu/rotenberg96trace.html"><span style="font-style:italic;">Smith, Rotenberg and Bennett s paper</span></a>. <small>URL consultato il 30 novembre 2019</small> <small>(archiviato dall'<abbr title="http&#58;//citeseer.ist.psu.edu/rotenberg96trace.html">url originale</abbr> il 3 aprile 2008)</small>.</cite> In <a href="/w/index.php?title=Citeseer&amp;action=edit&amp;redlink=1" class="new" title="Citeseer (la pagina non esiste)">Citeseer</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Cache_multilivello">Cache multilivello</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=14" title="Modifica la sezione Cache multilivello" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=14" title="Edit section&#039;s source code: Cache multilivello"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Il secondo motivo è il fondamentale compromesso tra la cache latency e lo hit rate. Le cache più grandi sono più lente e hanno migliori hit rate. Per migliorare questo <i>tradeoff</i>, molti sistemi utilizzano livelli multipli di cache, con cache piccole e veloci che si appoggiano a cache più grandi e più lente. Siccome la differenza di latenza tra la memoria principale e le cache più veloci è diventata più grande, alcuni processori hanno cominciato a utilizzare anche tre livelli di cache nel chip. Per esempio nel 2003, Itanium II iniziò a essere fornito con una cache sul chip unificata di livello 3 di 6MB. L'IBM Power 4 series ha una cache di livello 3 a 256 MB fuori dal chip, condivisa attraverso parecchi processori. </p><p>Le cache multilivello generalmente operano controllando dapprima le cache a livello 1; se avviene un hit, il processore procede ad alta velocità. Se la cache più piccola “fallisce”, allora viene controllata quella più grande e così via, fino a dover accedere alla memoria principale. </p><p>Le cache multi livello introducono un nuovo modello decisionale. Per esempio, in alcuni processori (come gli <a href="/wiki/Intel" title="Intel">Intel</a> <a href="/wiki/Pentium_II" title="Pentium II">Pentium 2</a>, <a href="/wiki/Pentium_III" title="Pentium III">3</a>, e <a href="/wiki/Pentium_4" title="Pentium 4">4</a>, così come in molti <a href="/wiki/RISC" class="mw-redirect" title="RISC">RISC</a>), i dati nella cache L1 possono essere anche in quella L2. Queste cache vengono denominato inclusive. Altri processori (come l'<a href="/wiki/Advanced_Micro_Devices" title="Advanced Micro Devices">AMD</a> <a href="/wiki/Athlon_Classic" title="Athlon Classic">Athlon</a>) hanno cache exclusive in cui è garantito che i dati siano al massimo in una delle cache L1 o L2. </p><p>Il vantaggio delle cache esclusive è che possono memorizzare più dati. Questo vantaggio diventa più evidente con cache di dimensioni maggiori, sebbene questa caratteristica non sia presente nelle implementazioni <a href="/wiki/Architettura_x86" title="Architettura x86">Intel x86</a>. D'altra parte, un vantaggio delle cache inclusive è che quando dispositivi esterni o altri processori in un sistema <a href="/wiki/Multiprocessore" title="Multiprocessore">multiprocessore</a> vogliono rimuovere una linea di cache dal processore, devono far controllare al processore solo la cache L2. Nelle gerarchie di cache che non utilizzano l'inclusione, è necessario controllare anche le cache L1. Inoltre, esiste una correlazione tra l'associatività delle cache L1 e L2: se le cache L2 non hanno almeno tanti modi quanti le cache L1 complessivamente, l'effettiva associatività delle cache L1 risulta limitata. </p><p>Un altro vantaggio delle cache inclusive è che le cache più grandi possono usare linee di cache più grandi, che riducono la dimensione delle etichette delle cache secondarie. Se la cache secondaria è di un ordine di grandezza maggiore di quella primaria, e i dati della cache sono di un ordine di grandezza più grande delle etichette della cache, queste etichette di dati salvati può essere confrontato con l'area incrementale necessaria a immagazzinare i dati nella cache L1 ed L2. </p><p>Come menzionato prima, grandi computer hanno a volte un'altra cache tra quella L2 e la memoria principale chiamata cache L3. Questa cache è implementata generalmente su un chip separato dalla CPU, e come nel <a href="/wiki/2004" title="2004">2004</a>, ha una capacità dai 2MB ai 256 MB. Queste cache costeranno ben oltre i $1000 da costruire, e i loro benefici dipenderanno dai percorsi di accesso delle applicazioni. Workstation x86 di fascia alta e server sono ora disponibili con un'opzione per la cache L3. </p><p>Infine, dall'altro lato della gerarchia della memoria, il <a href="/w/index.php?title=Register_file&amp;action=edit&amp;redlink=1" class="new" title="Register file (la pagina non esiste)">Register file</a> della CPU può essere considerato la più piccola, veloce cache nel sistema, con la speciale caratteristica che viene richiamata dal software—tipicamente da un <a href="/wiki/Compilatore" title="Compilatore">compilatore</a>, siccome alloca registri che devono mantenere valori recuperati dalla memoria principale. </p> <div class="mw-heading mw-heading3"><h3 id="Esempio:_architettura_AMD_K8">Esempio: architettura AMD K8</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=15" title="Modifica la sezione Esempio: architettura AMD K8" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=15" title="Edit section&#039;s source code: Esempio: architettura AMD K8"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Per illustrare sia la specializzazione che il multilivello delle cache, qui è la gerarchia della cache di un AMD <a href="/wiki/Athlon_64" title="Athlon 64">Athlon 64</a>, la cui implementazione del core è conosciuta come <i>architettura K8</i>. La K8 ha 4 cache specializzate: una cache d'istruzioni, una d'istruzioni <a href="/wiki/Translation_Lookaside_Buffer" title="Translation Lookaside Buffer">TLB</a>, una cache di dati e una di dati TLB. Ognuna di queste cache è specializzata: </p> <ol><li>La cache d'istruzione mantiene copie di line di memoria da 64 bytes, e recupera 16 bytes per ogni ciclo. Ogni byte in questa cache è immagazzinato in 10 bit piuttosto che 8, con gli extra bit che segnano i limiti delle istruzioni (Questo è un esempio del precoding). La cache ha solamente una protezione di <a href="/w/index.php?title=Parity&amp;action=edit&amp;redlink=1" class="new" title="Parity (la pagina non esiste)">parità</a> piuttosto che una <a href="/wiki/Error-correcting_code" title="Error-correcting code">ECC</a>, perché la parità è più piccola, e ogni dato danneggiato può essere sostituito da un dato fresco dalla memoria (che ha sempre una copia aggiornata delle istruzioni).</li> <li>La TLB d'istruzioni tiene copia delle informazioni nella page table (PTE). Ogni ciclo di recupero d'istruzione ha il suo indirizzo virtuale tradotto attraverso questo TLB in uno fisico. Ogni informazione è sia da 4 che da 8 byte in memoria. Ogni TLB è suddivisa in due sezioni, una per mantenere il PTE che mappa 4KB, e una per tenere i PTE per mappare 4MB o 2MB. La suddivisione permette un circuito semplice per un confronto fully associative in ogni sezione. Il sistema operativo mappa sezioni differenti dello spazio d'indirizzi virtuali con differenti dimensioni di PTE.</li> <li>La TLB dei dati ha due differenti copie che mantengono le stesse informazioni. Le due copie permettono due accessi ai dati per ogni ciclo per tradurre indirizzi virtuali in fisici. Come la TLB d'istruzioni, questa TLB è suddivisa in due tipi d'informazioni.</li> <li>La cache dei dati mantiene copie di memoria di linee da 64 bytes. È suddivisa in 8 banchi (ognuno immagazzina 8KB di dati), e può recuperare due dati da 8-byte per ogni ciclo per tanto che questi dati siano in banchi diversi. Vi sono due copie delle etichette, perché ogni line da 64 byte è sparsa in tutti gli 8 banchi. Ogni copia di etichetta gestisce uno dei due accessi per ciclo.</li></ol> <p>La K8 ha anche cache a multilivello. Vi sono TLB d'istruzioni e dati di secondo livello, che immagazzinano solo mappature di PTE da 4KB. Sia le cache d'istruzioni che di dati e le varie TLB, possono essere riempite dalla grande cache unified di livello 2. Questa cache è esclusiva per entrambe le cache L1 di dati e istruzioni, il che significa che qualsiasi line a 8-byte può risiedere in una delle cache d'istruzioni L1, cache di dati L1 o cache L2. È comunque possibile per una linea nella cache dei dati di avere un PTE che sta anche in una delle cache TLB—il sistema operativo è responsabile di tenere le TLB coerenti scaricandone porzioni quando la page table nella memoria vengono aggiornate. </p><p>La K8 memorizza informazioni che non vengono mai immagazzinate in memoria—prediction information. Queste cache non vengono visualizzate nel diagramma precedente. Siccome è solito per questa classe di CPU, la K8 ha un <a href="/wiki/Predizione_delle_diramazioni" title="Predizione delle diramazioni">branch prediction</a> abbastanza complesso, con tabelle che aiutano a predire quali percorsi vengono presi e altre tabelle che predicono gli obbiettivi dei percorsi e salti. Alcune di queste informazioni vengono associate con delle istruzioni, sia nella cache d'istruzioni L1 sia in quella unified L2. </p><p>La K8 utilizza un interessante meccanismo per immagazzinare le informazioni di predizione con le istruzioni nella cache secondaria. Le linee nella cache secondaria sono protette dalla corruzione dei dati involontaria (ad esempio un colpo di <a href="/wiki/Particelle_alfa" class="mw-redirect" title="Particelle alfa">particelle alfa</a> tramite l'<a href="/wiki/Error-correcting_code" title="Error-correcting code">ECC</a> o tramite la <a href="/w/index.php?title=Parit%C3%A0_(informatica)&amp;action=edit&amp;redlink=1" class="new" title="Parità (informatica) (la pagina non esiste)">parità</a>, in dipendenza che queste linee siano state rimosse dalla cache dei dati o da quella delle istruzioni. Siccome il controllo di parità occupa meno bit di quello ECC, le linee dalla cache d'istruzioni hanno pochi bit in avanzo. Questi bits vengono usati dal calcolo delle predizioni dei percorsi associati con quelli delle istruzioni. Il risultato finale è che il predittore di percorsi ha un grande tabella storica, quindi ha una migliore accuratezza. </p> <div class="mw-heading mw-heading3"><h3 id="Altre_gerarchie">Altre gerarchie</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=16" title="Modifica la sezione Altre gerarchie" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=16" title="Edit section&#039;s source code: Altre gerarchie"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Altri processori hanno altri tipi di predittori. (ad esempio lo store-to-load bypass predictor nel DEC Alpha 21264), e altri svariati predittori specializzati sono facilmente pensabili da essere integrati nei futuri processori. </p><p>Questi predittori sono cache nel senso che immagazzinano informazioni che sono costose da calcolare. Alcune delle terminologie utilizzate nel discutere i predittori sono le stesse di quelle per le cache (si parla di hit nel predittore di percorsi), ma i predittori non sono generalmente pesati come parte della gerarchia delle cache. </p><p>La K8 mantiene le istruzioni e i dati delle cache <a href="/wiki/Cache_coherency" class="mw-redirect" title="Cache coherency">coerenti</a> nell'hardware, il che significa che un immagazzinamento in un'istruzione appena dopo l'immagazzinamento dell'istruzione cambierà l'istruzione seguente. Altri processori, come quelli nella famiglia Alpha e MPS, sono basati sul software per mantenere le cache d'istruzioni coerenti. Gli immagazzinamenti non sono garantiti di essere visti nel fiume d'istruzioni a meno che un programma chiami un'opzione del sistema operativo per assicurarsi della coerenza. L'idea è quella di risparmiare la complessità dell'hardware sull'assunzione che il <a href="/wiki/Codice_automodificante" title="Codice automodificante">codice automodificante</a> è raro. </p><p>La gerarchia di cache si allarga se consideriamo il software come l'hardware. Il register file nel core di un processore può essere considerata una cache molto piccola, veloce i quali hit, fallimenti, e riempimenti sono previsti dal compilatore prima del tempo (vedi specialmente <a href="/w/index.php?title=Loop_nest_optimization&amp;action=edit&amp;redlink=1" class="new" title="Loop nest optimization (la pagina non esiste)">Loop nest optimization</a>). I register file a volte hanno anch'essi una gerarchia: la <a href="/wiki/Cray-1" title="Cray-1">Cray-1</a> (circa del 1976) aveva 8 registri scalari e 8 registri d'indirizzi che erano generalmente utilizzabili, aveva anche 64 registri scalari e 64 registri d'indirizzi di tipo "B". I registri di tipo "B" potevano essere caricati più velocemente di quelli nella memoria principale, in quanto il Cray-1 non aveva una cache di dati. </p> <div class="mw-heading mw-heading2"><h2 id="Implementazione">Implementazione</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=17" title="Modifica la sezione Implementazione" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=17" title="Edit section&#039;s source code: Implementazione"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Dato che le letture dalla cache sono operazioni comuni che richiedono più cicli di clock, il percorso critico nel design dei processori è spesso il trasferimento di dati dalla cache a un'istruzione. Questo percorso è essenziale per ottimizzare le prestazioni della CPU, poiché un accesso veloce alla cache L1 è fondamentale per ridurre i ritardi. La cache più semplice è una cache direttamente mappata, dove l'indirizzo virtuale è calcolato da un sommatore e utilizzato per indicizzare una SRAM (Static Random Access Memory), dalla quale vengono letti i dati corrispondenti. Non è necessario alcun controllo di etichetta nel ciclo interno, poiché le etichette non devono essere lette fino a quando non viene verificato un cache hit. Se la verifica fallisce, la cache viene aggiornata e il processo riparte. </p><p>Le cache associative sono più complesse, poiché richiedono la lettura di alcuni dati per determinare quale punto della cache selezionare. Ad esempio, una cache level-1 set-associative N-way legge tutte le possibili etichette e dati in parallelo e seleziona quelli associati all'etichetta corrispondente. Le cache level-2 possono risparmiare potenza leggendo prima le etichette e selezionando quindi i dati dalla SRAM. </p><p>Il diagramma a destra illustra l'organizzazione degli indirizzi nella cache. Ad esempio, una cache 4KB, 2-way set-associative con linee da 64B utilizza 64 linee e legge due alla volta da una SRAM con 32 righe. Sebbene qualsiasi funzione degli indirizzi virtuali da 31 a 6 possa indicizzare etichette e dati SRAM, è più comune utilizzare i bit meno significativi. </p><p>Inoltre, una cache più moderna potrebbe essere di dimensioni diverse e utilizzare diverse tecniche, come indicizzazione virtuale, suggerimenti virtuali e indicizzazione fisica. Queste cache seguono un percorso di lettura simile, ma utilizzano diversi tipi di dati, come vhints anziché etichette, per determinare un cache hit. </p><p>Alcune implementazioni SPARC hanno migliorato le prestazioni delle loro cache L1 riducendo i ritardi del sommatore dell'indirizzo virtuale nei decoder SRAM. </p> <div class="mw-heading mw-heading2"><h2 id="Note">Note</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=18" title="Modifica la sezione Note" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=18" title="Edit section&#039;s source code: Note"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><br /> </p> <div class="mw-heading mw-heading2"><h2 id="Voci_correlate">Voci correlate</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=19" title="Modifica la sezione Voci correlate" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=19" title="Edit section&#039;s source code: Voci correlate"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Cache" title="Cache">Cache</a></li> <li><a href="/wiki/Memoria_cache" title="Memoria cache">Memoria cache</a></li> <li><a href="/wiki/Coerenza_della_cache" class="mw-redirect" title="Coerenza della cache">Coerenza della cache</a></li> <li><a href="/wiki/CPU" title="CPU">CPU</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Altri_progetti">Altri progetti</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=20" title="Modifica la sezione Altri progetti" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=20" title="Edit section&#039;s source code: Altri progetti"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <div id="interProject" class="toccolours" style="display: none; clear: both; margin-top: 2em"><p id="sisterProjects" style="background-color: #efefef; color: black; font-weight: bold; margin: 0"><span>Altri progetti</span></p><ul title="Collegamenti verso gli altri progetti Wikimedia"> <li class="" title=""><a href="https://it.wikibooks.org/wiki/Architetture_dei_processori/Cache" class="extiw" title="b:Architetture dei processori/Cache">Wikibooks</a></li> <li class="" title=""><span class="plainlinks" title="commons:Category:CPU cache"><a class="external text" href="https://commons.wikimedia.org/wiki/Category:CPU_cache?uselang=it">Wikimedia Commons</a></span></li></ul></div> <ul><li><span typeof="mw:File"><a href="https://it.wikibooks.org/wiki/" title="Collabora a Wikibooks"><img alt="Collabora a Wikibooks" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/18px-Wikibooks-logo.svg.png" decoding="async" width="18" height="18" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/27px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/36px-Wikibooks-logo.svg.png 2x" data-file-width="300" data-file-height="300" /></a></span> <a href="https://it.wikibooks.org/wiki/" class="extiw" title="b:">Wikibooks</a> contiene testi o manuali sulla <b><a href="https://it.wikibooks.org/wiki/Architetture_dei_processori/Cache" class="extiw" title="b:Architetture dei processori/Cache">CPU cache</a></b></li> <li><span typeof="mw:File"><a href="https://commons.wikimedia.org/wiki/?uselang=it" title="Collabora a Wikimedia Commons"><img alt="Collabora a Wikimedia Commons" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png" decoding="async" width="18" height="24" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/27px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/36px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></a></span> <span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/?uselang=it">Wikimedia Commons</a></span> contiene immagini o altri file sulla <b><span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/Category:CPU_cache?uselang=it">CPU cache</a></span></b></li></ul> <div class="mw-heading mw-heading2"><h2 id="Collegamenti_esterni">Collegamenti esterni</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=CPU_cache&amp;veaction=edit&amp;section=21" title="Modifica la sezione Collegamenti esterni" class="mw-editsection-visualeditor"><span>modifica</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=CPU_cache&amp;action=edit&amp;section=21" title="Edit section&#039;s source code: Collegamenti esterni"><span>modifica wikitesto</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <a rel="nofollow" class="external text" href="ftp://ftp.cs.wisc.edu/markhill/Papers/toc89_cpu_cache_associativity.pdf">Evaluating Associativity in CPU Caches</a> — Hill and Smith — 1989 — Introduces capacity, conflict, and compulsory classification.</li> <li>(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <cite class="citation testo" style="font-style:normal"> <a rel="nofollow" class="external text" href="http://www.cs.wisc.edu/multifacet/misc/spec2000cache-data/"><span style="font-style:italic;">Cache Performance for SPEC CPU2000 Benchmarks</span></a>.</cite> — Hill and Cantin — 2003 — This reference paper has been updated several times. It has thorough and lucidly presented simulation results for a reasonably wide set of benchmarks and cache organizations.</li> <li>(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <cite class="citation testo" style="font-style:normal"> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090915041601/http://www.sun.com/blueprints/1102/817-0742.pdf"><span style="font-style:italic;">Memory Hierarchy in Cache-Based Systems</span></a> (<span style="font-weight: bolder; font-size:80%"><abbr title="documento in formato PDF">PDF</abbr></span>) <small>(archiviato dall'<abbr title="http&#58;//www.sun.com/blueprints/1102/817-0742.pdf">url originale</abbr> il 15 settembre 2009)</small>.</cite>, by Ruud van der Pas, 2002, Sun Microsystems, is a nice introductory article to CPU memory caching.</li> <li>(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <cite class="citation testo" style="font-style:normal"> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080725055641/http://www.freescale.com/files/32bit/doc/app_note/AN2663.pdf"><span style="font-style:italic;">A Cache Primer</span></a> (<span style="font-weight: bolder; font-size:80%"><abbr title="documento in formato PDF">PDF</abbr></span>) <small>(archiviato dall'<abbr title="http&#58;//www.freescale.com/files/32bit/doc/app_note/AN2663.pdf">url originale</abbr> il 25 luglio 2008)</small>.</cite> by Paul Genua, P.E., 2004, Freescale Semiconductor, another introductory article.</li></ul> <div class="noprint" style="width:100%; padding: 3px 0; display: flex; flex-wrap: wrap; row-gap: 4px; column-gap: 8px; box-sizing: border-box;"><div style="flex-grow: 1"><style data-mw-deduplicate="TemplateStyles:r140555418">.mw-parser-output .itwiki-template-occhiello{width:100%;line-height:25px;border:1px solid #CCF;background-color:#F0EEFF;box-sizing:border-box}.mw-parser-output .itwiki-template-occhiello-progetto{background-color:#FAFAFA}@media screen{html.skin-theme-clientpref-night .mw-parser-output .itwiki-template-occhiello{background-color:#202122;border-color:#54595D}html.skin-theme-clientpref-night .mw-parser-output .itwiki-template-occhiello-progetto{background-color:#282929}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .itwiki-template-occhiello{background-color:#202122;border-color:#54595D}html.skin-theme-clientpref-os .mw-parser-output .itwiki-template-occhiello-progetto{background-color:#282929}}</style><div class="itwiki-template-occhiello"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Computer_n_screen.svg" class="mw-file-description" title="Informatica"><img alt="&#160;" src="//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/24px-Computer_n_screen.svg.png" decoding="async" width="24" height="25" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/37px-Computer_n_screen.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/48px-Computer_n_screen.svg.png 2x" data-file-width="119" data-file-height="123" /></a></span>&#32;<b><a href="/wiki/Portale:Informatica" title="Portale:Informatica">Portale Informatica</a></b>&#58; accedi alle voci di Wikipedia che trattano di informatica</div></div></div> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐5695644f9d‐dwxhw Cached time: 20241128002724 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.197 seconds Real time usage: 0.269 seconds Preprocessor visited node count: 9213/1000000 Post‐expand include size: 24645/2097152 bytes Template argument size: 7485/2097152 bytes Highest expansion depth: 16/100 Expensive parser function count: 9/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 3319/5000000 bytes Lua time usage: 0.068/10.000 seconds Lua memory usage: 2498526/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 209.182 1 -total 31.17% 65.199 4 Template:Avviso 23.83% 49.855 4 Template:Categorie_avviso 19.22% 40.202 9 Template:Rp 17.89% 37.428 1 Template:NN 15.63% 32.694 1 Template:Vedi_anche 14.80% 30.969 4 Template:Cita_testo 13.70% 28.648 1 Template:Interprogetto 12.19% 25.498 1 Template:Portale 7.83% 16.383 1 Template:Organizzare --> <!-- Saved in parser cache with key itwiki:pcache:460443:|#|:idhash:canonical and timestamp 20241128002724 and revision id 141722009. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&amp;useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Estratto da "<a dir="ltr" href="https://it.wikipedia.org/w/index.php?title=CPU_cache&amp;oldid=141722009">https://it.wikipedia.org/w/index.php?title=CPU_cache&amp;oldid=141722009</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Categoria:Categorie" title="Categoria:Categorie">Categoria</a>: <ul><li><a href="/wiki/Categoria:Microprocessore" title="Categoria:Microprocessore">Microprocessore</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Categorie nascoste: <ul><li><a href="/wiki/Categoria:Contestualizzare_fonti_-_informatica" title="Categoria:Contestualizzare fonti - informatica">Contestualizzare fonti - informatica</a></li><li><a href="/wiki/Categoria:Contestualizzare_fonti_-_febbraio_2013" title="Categoria:Contestualizzare fonti - febbraio 2013">Contestualizzare fonti - febbraio 2013</a></li><li><a href="/wiki/Categoria:Organizzare_-_informatica" title="Categoria:Organizzare - informatica">Organizzare - informatica</a></li><li><a href="/wiki/Categoria:Organizzare_-_maggio_2018" title="Categoria:Organizzare - maggio 2018">Organizzare - maggio 2018</a></li><li><a href="/wiki/Categoria:Aggiornare_-_informatica" title="Categoria:Aggiornare - informatica">Aggiornare - informatica</a></li><li><a href="/wiki/Categoria:Aggiornare_subito" title="Categoria:Aggiornare subito">Aggiornare subito</a></li><li><a href="/wiki/Categoria:Correggere_-_informatica" title="Categoria:Correggere - informatica">Correggere - informatica</a></li><li><a href="/wiki/Categoria:Correggere_-_settembre_2019" title="Categoria:Correggere - settembre 2019">Correggere - settembre 2019</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Questa pagina è stata modificata per l'ultima volta il&#160;20 ott 2024 alle 15:32.</li> <li id="footer-info-copyright">Il testo è disponibile secondo la <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.it">licenza Creative Commons Attribuzione-Condividi allo stesso modo</a>; possono applicarsi condizioni ulteriori. Vedi le <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use/it">condizioni d'uso</a> per i dettagli.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/it">Informativa sulla privacy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:Sala_stampa/Wikipedia">Informazioni su Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Avvertenze_generali">Avvertenze</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Codice di condotta</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Sviluppatori</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/it.wikipedia.org">Statistiche</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Dichiarazione sui cookie</a></li> <li id="footer-places-mobileview"><a href="//it.m.wikipedia.org/w/index.php?title=CPU_cache&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Versione mobile</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6dfcdd5ff5-5wdg7","wgBackendResponseTime":141,"wgPageParseReport":{"limitreport":{"cputime":"0.197","walltime":"0.269","ppvisitednodes":{"value":9213,"limit":1000000},"postexpandincludesize":{"value":24645,"limit":2097152},"templateargumentsize":{"value":7485,"limit":2097152},"expansiondepth":{"value":16,"limit":100},"expensivefunctioncount":{"value":9,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":3319,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 209.182 1 -total"," 31.17% 65.199 4 Template:Avviso"," 23.83% 49.855 4 Template:Categorie_avviso"," 19.22% 40.202 9 Template:Rp"," 17.89% 37.428 1 Template:NN"," 15.63% 32.694 1 Template:Vedi_anche"," 14.80% 30.969 4 Template:Cita_testo"," 13.70% 28.648 1 Template:Interprogetto"," 12.19% 25.498 1 Template:Portale"," 7.83% 16.383 1 Template:Organizzare"]},"scribunto":{"limitreport-timeusage":{"value":"0.068","limit":"10.000"},"limitreport-memusage":{"value":2498526,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-5695644f9d-dwxhw","timestamp":"20241128002724","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"CPU cache","url":"https:\/\/it.wikipedia.org\/wiki\/CPU_cache","sameAs":"http:\/\/www.wikidata.org\/entity\/Q352090","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q352090","author":{"@type":"Organization","name":"Contributori ai progetti Wikimedia"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2006-05-29T20:56:01Z","dateModified":"2024-10-20T14:32:44Z","headline":"cache utilizzata dalla CPU di un computer"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10