ذاكرة التخزين المؤقت لوحدة المعالجة المركزية

ذاكرة التخزين المؤقت لوحدة المعالجة المركزية هي ذاكرة تخزين مؤقتة مادية تستخدمها وحدة المعالجة المركزية (CPU) في الحاسوب لتقليل متوسط ​​تكلفة الوصول إلى البيانات من الذاكرة الرئيسية (من حيث الوقت أو الطاقة) . [ 1 ] ذاكرة التخزين المؤقت هي ذاكرة أصغر وأسرع، تقع بالقرب من نواة المعالج ، وتخزن نسخًا من البيانات من مواقع الذاكرة الرئيسية المستخدمة بكثرة ، مما يغني عن الحاجة إلى الرجوع دائمًا إلى الذاكرة الرئيسية التي قد يكون الوصول إليها أبطأ بعشرات أو مئات المرات.

تُنفذ ذاكرة التخزين المؤقت عادةً باستخدام ذاكرة الوصول العشوائي الثابتة (SRAM)، التي تتطلب عدة ترانزستورات لتخزين بت واحد . وهذا يجعلها مكلفة من حيث المساحة التي تشغلها، وفي وحدات المعالجة المركزية الحديثة، تُشكل ذاكرة التخزين المؤقت عادةً الجزء الأكبر من مساحة الشريحة. يجب موازنة حجم ذاكرة التخزين المؤقت مع الرغبة العامة في الحصول على شرائح أصغر حجمًا وأقل تكلفة. تُنفذ بعض التصاميم الحديثة جزءًا من ذاكرة التخزين المؤقت أو كلها باستخدام ذاكرة الوصول العشوائي الديناميكية الإلكترونية (eDRAM) الأصغر حجمًا ، والتي تُعد أبطأ في الاستخدام من ذاكرة الوصول العشوائي الثابتة، ولكنها تسمح بسعة تخزين مؤقت أكبر لأي مساحة معينة من الشريحة.

تحتوي معظم وحدات المعالجة المركزية على تسلسل هرمي لمستويات ذاكرة التخزين المؤقت المتعددة (L1، L2، وغالبًا L3، ونادرًا L4)، مع وجود ذاكرات تخزين مؤقت منفصلة خاصة بالتعليمات (I-cache) وأخرى خاصة بالبيانات (D-cache) في المستوى 1. [ 2 ] تُنفذ المستويات المختلفة في مناطق مختلفة من الشريحة؛ يقع L1 بالقرب من نواة وحدة المعالجة المركزية قدر الإمكان، وبالتالي يوفر أعلى سرعة نظرًا لقصر مسارات الإشارة، ولكنه يتطلب تصميمًا دقيقًا. أما ذاكرات التخزين المؤقت L2 فهي منفصلة فعليًا عن وحدة المعالجة المركزية وتعمل بسرعة أبطأ، ولكنها تُقلل من متطلبات مصمم الشريحة ويمكن جعلها أكبر بكثير دون التأثير على تصميم وحدة المعالجة المركزية. وتُستخدم ذاكرات التخزين المؤقت L3 بشكل عام بشكل مشترك بين عدة نوى لوحدة المعالجة المركزية.

توجد أنواع أخرى من الذاكرة المؤقتة (لا تُحتسب ضمن "حجم الذاكرة المؤقتة" لأهم أنواع الذاكرة المؤقتة المذكورة أعلاه)، مثل مخزن الترجمة المؤقت (TLB) الذي يُعد جزءًا من وحدة إدارة الذاكرة (MMU) الموجودة في معظم وحدات المعالجة المركزية. كما تحتوي أقسام الإدخال/الإخراج غالبًا على مخازن مؤقتة للبيانات تؤدي غرضًا مشابهًا.

ملخص

للوصول إلى البيانات في الذاكرة الرئيسية ، تُستخدم عملية متعددة الخطوات، وتُضيف كل خطوة منها تأخيرًا. على سبيل المثال، لقراءة قيمة من الذاكرة في نظام حاسوبي بسيط، يختار المعالج أولًا العنوان المراد الوصول إليه من خلال التعبير عنه على ناقل العناوين ، وينتظر فترة زمنية محددة حتى تستقر القيمة. يخزن جهاز الذاكرة الذي يحتوي على تلك القيمة، والذي يُنفذ عادةً في ذاكرة الوصول العشوائي الديناميكية (DRAM )، تلك القيمة في شكل منخفض الطاقة جدًا، لا يكفي لقراءتها مباشرةً بواسطة المعالج. بدلًا من ذلك، ينسخ المعالج تلك القيمة من الذاكرة إلى مخزن مؤقت صغير متصل بناقل البيانات . ثم ينتظر المعالج فترة زمنية محددة حتى تستقر هذه القيمة قبل قراءتها من ناقل البيانات.

بتقريب الذاكرة فعليًا من وحدة المعالجة المركزية، يقل الوقت اللازم لاستقرار ناقلات البيانات، وباستبدال ذاكرة الوصول العشوائي الديناميكية (DRAM) بذاكرة الوصول العشوائي الثابتة (SRAM)، التي تخزن القيمة بشكل لا يتطلب تضخيمًا للقراءة، يُلغى التأخير داخل الذاكرة نفسها. هذا يجعل ذاكرة التخزين المؤقت أسرع بكثير في الاستجابة والقراءة والكتابة. مع ذلك، تتطلب ذاكرة الوصول العشوائي الثابتة (SRAM) ما بين أربعة إلى ستة ترانزستورات لتخزين بت واحد، حسب النوع، بينما تستخدم ذاكرة الوصول العشوائي الديناميكية (DRAM) عادةً ترانزستورًا واحدًا ومكثفًا واحدًا لكل بت، مما يُمكّنها من تخزين بيانات أكثر بكثير في أي مساحة شريحة معينة.

يمكن أن يؤدي استخدام تنسيق أسرع للذاكرة إلى تحسينات كبيرة في الأداء. فعند محاولة القراءة من موقع في الذاكرة أو الكتابة إليه، يتحقق المعالج مما إذا كانت البيانات من ذلك الموقع موجودة بالفعل في ذاكرة التخزين المؤقت (الكاش). إذا كانت كذلك، فسيقرأ المعالج من ذاكرة التخزين المؤقت أو يكتب إليها بدلاً من الذاكرة الرئيسية الأبطأ بكثير.

تحتوي العديد من وحدات المعالجة المركزية الحديثة لأجهزة سطح المكتب والخوادم والوحدات الصناعية على ثلاثة مستويات مستقلة على الأقل من ذاكرة التخزين المؤقت (L1 و L2 و L3) وأنواع مختلفة من ذاكرة التخزين المؤقت:

المخزن المؤقت للترجمة (TLB)
تُستخدم ذاكرة الترجمة المؤقتة (TLB) لتسريع ترجمة العناوين من العناوين الافتراضية إلى العناوين الفعلية لكلٍ من التعليمات القابلة للتنفيذ والبيانات. يمكن توفير ذاكرة ترجمة مؤقتة واحدة (TLB) للوصول إلى كلٍ من التعليمات والبيانات، أو يمكن توفير ذاكرتي ترجمة مؤقتتين منفصلتين: ذاكرة ترجمة مؤقتة للتعليمات (ITLB) وذاكرة ترجمة مؤقتة للبيانات (DTLB). مع ذلك، تُعد ذاكرة الترجمة المؤقتة جزءًا من وحدة إدارة الذاكرة (MMU) وليست مرتبطة مباشرةً بذاكرات التخزين المؤقت لوحدة المعالجة المركزية (CPU).
ذاكرة التخزين المؤقت للتعليمات (I-cache)
تُستخدم لتسريع جلب التعليمات القابلة للتنفيذ؛ تتضمن بعض الإصدارات المتخصصة ذاكرة تخزين مؤقتة للعمليات الدقيقة وذاكرة تخزين مؤقتة لتعليمات هدف التفرع .
ذاكرة التخزين المؤقت للبيانات (D-cache)
تُستخدم لتسريع عملية جلب البيانات وتخزينها.
ذاكرة التخزين المؤقت ذات المستوى الأعلى
عادة ما يتم تنظيم الذاكرات المؤقتة التي تقع فوق ذاكرة التخزين المؤقت I وذاكرة التخزين المؤقت D على شكل تسلسل هرمي لمستويات ذاكرة تخزين مؤقت أكثر (L2، L3، إلخ)؛ انظر أيضًا ذاكرة التخزين المؤقت متعددة المستويات أدناه).

تاريخ

لوحة أم لجهاز كمبيوتر NeXTcube (1990). في الحافة السفلية للصورة، إلى اليسار من المنتصف، يوجد معالج Motorola 68040 يعمل بتردد 25 ميجاهرتز، ويحتوي على ذاكرتي تخزين مؤقت من المستوى الأول (L1) منفصلتين، سعة كل منهما 4 كيلوبايت، إحداهما للتعليمات والأخرى للبيانات. لا تحتوي اللوحة على ذاكرة تخزين مؤقت خارجية من المستوى الثاني (L2).

من الأمثلة المبكرة على ذاكرة التخزين المؤقت لوحدة المعالجة المركزية (CPU) معالج Atlas 2 [ 3 ] ومعالج IBM System/360 Model 85 [ 4 ] [ 5 ] في ستينيات القرن الماضي. كانت وحدات المعالجة المركزية الأولى التي استخدمت ذاكرة التخزين المؤقت تحتوي على مستوى واحد فقط؛ على عكس ذاكرة التخزين المؤقت من المستوى الأول اللاحقة، لم تكن مقسمة إلى L1d (للبيانات) وL1i (للتعليمات). بدأ استخدام ذاكرة التخزين المؤقت من المستوى الأول المقسمة في عام 1976 مع معالج IBM 801 [ 6 ] [ 7 وأصبح شائعًا في أواخر ثمانينيات القرن الماضي، وفي عام 1997 دخل سوق وحدات المعالجة المركزية المدمجة مع معالج ARMv5TE. وبحلول عام 2015، أصبحت حتى أنظمة SoC منخفضة التكلفة تقسم ذاكرة التخزين المؤقت من المستوى الأول. كما أنها تحتوي على ذاكرة تخزين مؤقت من المستوى الثاني، وبالنسبة للمعالجات الأكبر حجمًا، ذاكرة تخزين مؤقت من المستوى الثالث أيضًا. عادةً ما تكون ذاكرة التخزين المؤقت من المستوى الثاني غير مقسمة، وتعمل كمستودع مشترك لذاكرة التخزين المؤقت من المستوى الأول المقسمة بالفعل. لكل نواة من نوى المعالج متعدد النوى ذاكرة تخزين مؤقت مخصصة من المستوى الأول، وعادةً لا تتم مشاركتها بين النوى. يمكن مشاركة ذاكرة التخزين المؤقت من المستوى الثاني (L2) وذاكرات التخزين المؤقت ذات المستويات الأدنى بين النوى. أما ذاكرة التخزين المؤقت من المستوى الرابع (L4) فهي غير شائعة حاليًا، وعادةً ما تكون ذاكرة وصول عشوائي ديناميكية (DRAM) على شريحة منفصلة، ​​وليست ذاكرة وصول عشوائي ثابتة (SRAM). ويُستثنى من ذلك استخدام ذاكرة الوصول العشوائي الديناميكية المدمجة (eDRAM) لجميع مستويات ذاكرة التخزين المؤقت، وصولًا إلى المستوى الأول (L1). تاريخيًا، كان المستوى الأول (L1) موجودًا أيضًا على شريحة منفصلة، ​​إلا أن أحجام الشرائح الأكبر سمحت بدمجه مع مستويات ذاكرة التخزين المؤقت الأخرى، باستثناء المستوى الأخير على الأرجح. يميل كل مستوى إضافي من ذاكرة التخزين المؤقت إلى أن يكون أصغر حجمًا وأسرع من المستويات الأدنى. [ 8 ]

Caches (like for RAM historically) have generally been sized in powers of: 2, 4, 8, 16 etc. KiB; when up to MiB sizes (i.e. for larger non-L1), very early on the pattern broke down, to allow for larger caches without being forced into the doubling-in-size paradigm, with e.g. Intel Core 2 Duo with 3 MiB L2 cache in April 2008. This happened much later for L1 caches, as their size is generally still a small number of KiB. The IBM zEC12 from 2012 is an exception however, to gain unusually large 96 KiB L1 data cache for its time, and e.g. the IBM z13 having a 96 KiB L1 instruction cache (and 128 KiB L1 data cache),[9] and Intel Ice Lake-based processors from 2018, having 48 KiB L1 data cache and 48 KiB L1 instruction cache. In 2020, some Intel Atom CPUs (with up to 24 cores) have (multiple of) 4.5 MiB and 15 MiB cache sizes.[10][11]

Operation

Cache entries

Data is transferred between memory and cache in blocks of fixed size, called cache lines or cache blocks. When a cache line is copied from memory into the cache, a cache entry is created. The cache entry will include the copied data as well as the requested memory location (called a tag).

When the processor needs to read or write a location in memory, it first checks for a corresponding entry in the cache. The cache checks for the contents of the requested memory location in any cache lines that might contain that address. If the processor finds that the memory location is in the cache, a cache hit has occurred. However, if the processor does not find the memory location in the cache, a cache miss has occurred. In the case of a cache hit, the processor immediately reads or writes the data in the cache line. For a cache miss, the cache allocates a new entry and copies data from main memory, then the request is fulfilled from the contents of the cache.

Policies

Replacement policies

To make room for the new entry on a cache miss, the cache may have to evict one of the existing entries. The heuristic it uses to choose the entry to evict is called the replacement policy. The fundamental problem with any replacement policy is that it must predict which existing cache entry is least likely to be used in the future. Predicting the future is generally difficult, so there is no perfect method to choose among the variety of replacement policies available. One popular replacement policy, least-recently used (LRU), replaces the least recently accessed entry.

يمكن تحسين الأداء بتحديد بعض نطاقات الذاكرة على أنها غير قابلة للتخزين المؤقت، وذلك بتجنب تخزين مناطق الذاكرة التي نادراً ما يُعاد الوصول إليها. وهذا يُجنّبنا عبء تحميل البيانات في ذاكرة التخزين المؤقت دون إعادة استخدامها. كما يمكن تعطيل أو قفل إدخالات ذاكرة التخزين المؤقت حسب السياق.

كتابة السياسات

إذا كُتبت البيانات في ذاكرة التخزين المؤقت، فلا بد من كتابتها في الذاكرة الرئيسية في مرحلة ما؛ ويُعرف توقيت هذه الكتابة بسياسة الكتابة. في ذاكرة التخزين المؤقت للكتابة المباشرة ، تؤدي كل عملية كتابة في ذاكرة التخزين المؤقت إلى كتابة في الذاكرة الرئيسية. أما في ذاكرة التخزين المؤقت للكتابة المؤجلة أو النسخ المؤجل، فلا تُنسخ عمليات الكتابة فورًا إلى الذاكرة الرئيسية، حيث تُعلّم المواقع التي كُتبت عليها بأنها غير مُعدّلة ، ولا تُكتب مرة أخرى إلى الذاكرة الرئيسية إلا عند إخراجها من ذاكرة التخزين المؤقت. لهذا السبب، قد يتطلب خطأ القراءة في ذاكرة التخزين المؤقت للكتابة المؤجلة أحيانًا عمليتي وصول إلى الذاكرة: الأولى لكتابة الموقع غير المُعدّل في الذاكرة الرئيسية، والثانية لقراءة الموقع الجديد من الذاكرة. كذلك، قد تؤدي الكتابة إلى موقع في الذاكرة الرئيسية لم يُعيّن بعد في ذاكرة التخزين المؤقت للكتابة المؤجلة إلى إخراج موقع غير مُعدّل بالفعل، مما يُحرر مساحة ذاكرة التخزين المؤقت للموقع الجديد.

توجد سياسات وسيطة أيضًا. قد تكون ذاكرة التخزين المؤقت قابلة للكتابة المباشرة، ولكن قد يتم الاحتفاظ بعمليات الكتابة في قائمة انتظار بيانات المتجر مؤقتًا، عادةً حتى يمكن معالجة عمليات تخزين متعددة معًا (مما قد يقلل من أوقات استجابة ناقل البيانات ويحسن من استخدام ناقل البيانات).

قد تُغيّر كيانات أخرى (مثل الأجهزة الطرفية التي تستخدم الوصول المباشر إلى الذاكرة (DMA) أو نواة أخرى في معالج متعدد النوى ) البيانات المخزنة مؤقتًا في الذاكرة الرئيسية، وفي هذه الحالة قد تصبح النسخة الموجودة في الذاكرة المؤقتة قديمة. وبالمثل، عندما تُحدّث وحدة المعالجة المركزية في نظام متعدد المعالجات البيانات في الذاكرة المؤقتة، تصبح نسخ البيانات في الذاكرة المؤقتة المرتبطة بوحدات المعالجة المركزية الأخرى قديمة. تُعرف بروتوكولات الاتصال بين مديري الذاكرة المؤقتة التي تحافظ على اتساق البيانات ببروتوكولات اتساق الذاكرة المؤقتة .

أداء ذاكرة التخزين المؤقت

أصبح قياس أداء الذاكرة المخبئية ذا أهمية بالغة في الآونة الأخيرة، حيث تتزايد الفجوة في السرعة بين أداء الذاكرة وأداء المعالج بشكلٍ كبير. وقد طُرحت الذاكرة المخبئية لتقليص هذه الفجوة. لذا، فإن معرفة مدى قدرة الذاكرة المخبئية على سد هذه الفجوة أمرٌ بالغ الأهمية، لا سيما في الأنظمة عالية الأداء. ويلعب معدل نجاح الوصول إلى الذاكرة المخبئية ومعدل فشل الوصول إليها دورًا محوريًا في تحديد هذا الأداء. ولتحسين أداء الذاكرة المخبئية، يُعدّ خفض معدل فشل الوصول إليها خطوةً أساسيةً من بين خطوات أخرى. كما يُسهم تقليل زمن الوصول إلى الذاكرة المخبئية في تعزيز أدائها وتحسينها.

توقف وحدة المعالجة المركزية

The time taken to fetch one cache line from memory (read latency due to a cache miss) matters because the CPU will run out of work while waiting for the cache line. When a CPU reaches this state, it is called a stall. As CPUs become faster compared to main memory, stalls due to cache misses displace more potential computation; modern CPUs can execute hundreds of instructions in the time taken to fetch a single cache line from main memory.

Various techniques have been employed to keep the CPU busy during this time, including out-of-order execution in which the CPU attempts to execute independent instructions after the instruction that is waiting for the cache miss data. Another technology, used by many processors, is simultaneous multithreading (SMT), which allows an alternate thread to use the CPU core while the first thread waits for required CPU resources to become available.

Associativity

An illustration of different ways in which memory locations can be cached by particular cache locations

The placement policy decides where in the cache a copy of a particular entry of main memory will go. If the placement policy is free to choose any entry in the cache to hold the copy, the cache is called fully associative. At the other extreme, if each entry in the main memory can go in just one place in the cache, the cache is direct-mapped. Many caches implement a compromise in which each entry in the main memory can go to any one of N places in the cache, and are described as N-way set associative.[12] For example, the level-1 data cache in an AMD Athlon is two-way set associative, which means that any particular location in main memory can be cached in either of two locations in the level-1 data cache.

يتطلب اختيار القيمة المناسبة للترابطية مفاضلة . فإذا كان هناك عشرة مواقع يمكن لسياسة التوزيع أن تُسند إليها موقعًا في الذاكرة، فسيتطلب التحقق من وجود هذا الموقع في الذاكرة المؤقتة البحث في عشرة مداخل. ويتطلب فحص المزيد من المواقع طاقةً ومساحةً أكبر على الشريحة، وربما وقتًا أطول. من ناحية أخرى، تُعاني الذاكرات المؤقتة ذات الترابطية الأعلى من عدد أقل من حالات عدم الوصول (انظر حالات عدم الوصول المتعارضة )، مما يُقلل من الوقت الذي يُهدره المعالج المركزي في القراءة من الذاكرة الرئيسية البطيئة. وتتمثل القاعدة العامة في أن مضاعفة الترابطية، من التعيين المباشر إلى التعيين ثنائي الاتجاه، أو من التعيين ثنائي الاتجاه إلى التعيين رباعي الاتجاه، لها نفس تأثير مضاعفة حجم الذاكرة المؤقتة تقريبًا على رفع معدل الوصول. ومع ذلك، فإن زيادة الترابطية عن أربعة لا تُحسّن معدل الوصول بنفس القدر، [ 13 ] وعادةً ما تُجرى لأسباب أخرى (انظر التداخل الظاهري ). ويمكن لبعض المعالجات المركزية تقليل ترابطية ذاكراتها المؤقتة ديناميكيًا في حالات الطاقة المنخفضة، وهو ما يُعد إجراءً لتوفير الطاقة. [ 14 ]

بالترتيب من الأسوأ (لكنه بسيط) إلى الأفضل (لكنه معقد):

  • ذاكرة التخزين المؤقت ذات التعيين المباشر - وقت جيد في أفضل الأحوال، لكنها غير قابلة للتنبؤ في أسوأ الأحوال 
  • ذاكرة تخزين مؤقتة ترابطية ثنائية الاتجاه
  • ذاكرة التخزين المؤقت الترابطية المنحرفة ثنائية الاتجاه [ 15 ]
  • ذاكرة تخزين مؤقتة رباعية الاتجاهات ذات مجموعات ترابطية
  • ذاكرة تخزين مؤقتة ثمانية الاتجاهات ذات ترابط مجموعات، وهي خيار شائع للتطبيقات اللاحقة
  • ذاكرة تخزين مؤقتة ترابطية ذات 12 اتجاهًا، على غرار ذاكرة التخزين المؤقتة ذات 8 اتجاهات
  • ذاكرة التخزين المؤقت الترابطية بالكامل أفضل معدلات الخطأ، ولكنها عملية فقط لعدد قليل من الإدخالات 

ذاكرة تخزين مؤقتة ذات تعيين مباشر

في هذا النوع من تنظيم الذاكرة المؤقتة، لا يمكن تخزين أي عنصر في الذاكرة الرئيسية إلا في مدخل واحد فقط من الذاكرة المؤقتة. لذلك، يمكن تسمية الذاكرة المؤقتة ذات التعيين المباشر بذاكرة مؤقتة "ذاتية التجميع أحادي الاتجاه". فهي لا تتبع سياسة تحديد المواقع، إذ لا يوجد خيار لتحديد أي مدخل من الذاكرة المؤقتة يُزال. هذا يعني أنه إذا تم تعيين موقعين لنفس المدخل، فقد يُزيل أحدهما الآخر باستمرار. على الرغم من بساطتها، إلا أن الذاكرة المؤقتة ذات التعيين المباشر تحتاج إلى أن تكون أكبر بكثير من الذاكرة المؤقتة ذات التعيين التجميعي لتحقيق أداء مماثل، كما أنها أقل قابلية للتنبؤ. لنفترض أن x هو رقم الكتلة في الذاكرة المؤقتة، و y هو رقم الكتلة في الذاكرة الرئيسية، و n هو عدد الكتل في الذاكرة المؤقتة، عندئذٍ يتم التعيين باستخدام المعادلة x = y mod n .

ذاكرة تخزين مؤقتة ترابطية ثنائية الاتجاه

إذا كان بالإمكان تخزين كل موقع في الذاكرة الرئيسية في أحد موقعين في ذاكرة التخزين المؤقت، فإن السؤال المنطقي هو: أيّهما؟ أبسط الطرق وأكثرها شيوعًا، كما هو موضح في الرسم البياني على اليمين أعلاه، هي استخدام أقل البتات أهمية في فهرس موقع الذاكرة كفهرس لذاكرة التخزين المؤقت، مع وجود مدخلين لكل فهرس. من مزايا هذه الطريقة أن العلامات المخزنة في ذاكرة التخزين المؤقت لا تتطلب تضمين ذلك الجزء من عنوان الذاكرة الرئيسية الذي يُستدل عليه من فهرس ذاكرة التخزين المؤقت. ولأن علامات ذاكرة التخزين المؤقت تحتوي على عدد أقل من البتات، فإنها تتطلب عددًا أقل من الترانزستورات، وتشغل مساحة أقل على لوحة دوائر المعالج أو على شريحة المعالج الدقيق، ويمكن قراءتها ومقارنتها بشكل أسرع. كما أن خوارزمية LRU بسيطة للغاية، إذ لا يلزم سوى تخزين بت واحد لكل زوج.

التنفيذ التخميني

من مزايا ذاكرة التخزين المؤقت ذات التعيين المباشر أنها تتيح التخمين البسيط والسريع . فبمجرد حساب العنوان، يُعرف فهرس ذاكرة التخزين المؤقت الوحيد الذي قد يحتوي على نسخة من ذلك الموقع في الذاكرة. ويمكن قراءة مدخل ذاكرة التخزين المؤقت هذا، ويستطيع المعالج مواصلة العمل مع تلك البيانات قبل أن ينتهي من التحقق من تطابق الوسم مع العنوان المطلوب.

يمكن تطبيق فكرة استخدام المعالج للبيانات المخزنة مؤقتًا قبل اكتمال مطابقة الوسم على ذاكرات التخزين المؤقت الترابطية أيضًا. يُمكن استخدام جزء من الوسم، يُسمى " تلميحًا" ، لاختيار أحد إدخالات ذاكرة التخزين المؤقت المُحتملة التي تُطابق العنوان المطلوب. يُمكن بعد ذلك استخدام الإدخال المُختار بواسطة التلميح بالتوازي مع فحص الوسم الكامل. تُحقق تقنية التلميح أفضل النتائج عند استخدامها في سياق ترجمة العناوين، كما هو مُوضح أدناه.

ذاكرة تخزين مؤقتة ترابطية منحرفة ثنائية الاتجاه

تم اقتراح مخططات أخرى، مثل ذاكرة التخزين المؤقت المائلة [ 15 ] ، حيث يكون فهرس المسار 0 مباشرًا، كما ذُكر أعلاه، بينما يُشكّل فهرس المسار 1 باستخدام دالة تجزئة . تتميز دالة التجزئة الجيدة بخاصية أن العناوين التي تتعارض مع التعيين المباشر لا تتعارض عادةً عند تعيينها باستخدام دالة التجزئة، وبالتالي يقل احتمال تعرض البرنامج لعدد كبير غير متوقع من حالات عدم الوصول بسبب نمط وصول غير طبيعي. أما الجانب السلبي فهو زيادة زمن الاستجابة الناتج عن حساب دالة التجزئة [ 16 ] . بالإضافة إلى ذلك، عند تحميل سطر جديد وإخراج سطر قديم، قد يصعب تحديد أي سطر موجود هو الأقل استخدامًا مؤخرًا، لأن السطر الجديد يتعارض مع البيانات في فهارس مختلفة في كل مسار؛ وعادةً ما يتم تتبع LRU لذاكرات التخزين المؤقت غير المائلة على أساس كل مجموعة. ومع ذلك، تتمتع ذاكرات التخزين المؤقت المائلة بمزايا كبيرة على ذاكرات التخزين المؤقت التقليدية القائمة على المجموعات [ 17 ] .

ذاكرة تخزين مؤقتة شبه ترابطية

تختبر ذاكرة التخزين المؤقت ذات التجميع الحقيقي جميع الطرق الممكنة في آنٍ واحد، باستخدام ما يشبه ذاكرة الوصول العشوائي للمحتوى . أما ذاكرة التخزين المؤقت ذات التجميع الزائف فتختبر كل طريقة ممكنة على حدة. وتُعد ذاكرة التخزين المؤقت ذات التجزئة وإعادة التجزئة وذاكرة التخزين المؤقت ذات التجميع العمودي مثالين على ذاكرة التخزين المؤقت ذات التجميع الزائف.

في الحالة الشائعة المتمثلة في العثور على تطابق في الطريقة الأولى المختبرة، تكون ذاكرة التخزين المؤقت شبه الترابطية بنفس سرعة ذاكرة التخزين المؤقت ذات التعيين المباشر، ولكنها تتميز بمعدل خطأ تعارض أقل بكثير من ذاكرة التخزين المؤقت ذات التعيين المباشر، وأقرب إلى معدل الخطأ لذاكرة التخزين المؤقت الترابطية الكاملة. [ 16 ]

ذاكرة تخزين مؤقتة متعددة الأعمدة

بالمقارنة مع ذاكرة التخزين المؤقت ذات التعيين المباشر، تتميز ذاكرة التخزين المؤقت ذات التعيين الجماعي بعدد أقل من البتات لفهرس مجموعة التخزين المؤقت الذي يُشير إلى مجموعة تخزين مؤقت، حيث توجد مسارات أو كتل متعددة، مثل كتلتين لذاكرة تخزين مؤقت ثنائية المسار وأربع كتل لذاكرة تخزين مؤقت رباعية المسار. وبالمقارنة مع ذاكرة التخزين المؤقت ذات التعيين المباشر، تُصبح بتات فهرس التخزين المؤقت غير المستخدمة جزءًا من بتات الوسم. على سبيل المثال، تُساهم ذاكرة التخزين المؤقت ثنائية المسار ببت واحد في الوسم، بينما تُساهم ذاكرة التخزين المؤقت رباعية المسار ببتين. وتتمثل الفكرة الأساسية لذاكرة التخزين المؤقت متعددة الأعمدة [ 18 ] في استخدام فهرس المجموعة للتعيين إلى مجموعة تخزين مؤقت كما تفعل ذاكرة التخزين المؤقت التقليدية ذات التعيين الجماعي، واستخدام بتات الوسم المُضافة لفهرسة مسار في المجموعة. على سبيل المثال، في ذاكرة تخزين مؤقتة ترابطية رباعية الاتجاهات، تُستخدم البتتان لفهرسة الاتجاهات 00 و01 و10 و11 على التوالي. يُطلق على فهرسة ذاكرة التخزين المؤقتة المزدوجة هذه اسم "تعيين الموقع الرئيسي"، وزمن استجابتها يُعادل زمن الوصول المباشر. تُظهر تجارب مُوسّعة في تصميم ذاكرة التخزين المؤقتة متعددة الأعمدة [ 18 ] أن نسبة الوصول إلى المواقع الرئيسية تصل إلى 90%. في حال تعارض تعيين ذاكرة التخزين المؤقتة مع كتلة في الموقع الرئيسي، تُنقل الكتلة الموجودة إلى اتجاه آخر في نفس المجموعة، وهو ما يُسمى "الموقع المُختار". ولأن كتلة ذاكرة التخزين المؤقتة المُفهرسة حديثًا هي كتلة مُستخدمة مؤخرًا (MRU)، تُوضع في الموقع الرئيسي في ذاكرة التخزين المؤقتة متعددة الأعمدة مع مراعاة التوطين الزمني. ولأن ذاكرة التخزين المؤقتة متعددة الأعمدة مُصممة لذاكرة تخزين مؤقتة ذات ترابطية عالية، فإن عدد الاتجاهات في كل مجموعة يكون كبيرًا؛ وبالتالي، يسهل العثور على الموقع المُختار في المجموعة. يتم الاحتفاظ بفهرس موقع محدد بواسطة جهاز إضافي للموقع الرئيسي في كتلة ذاكرة التخزين المؤقت.

Multicolumn cache remains a high hit ratio due to its high associativity, and has a comparable low latency to a direct-mapped cache due to its high percentage of hits in major locations. The concepts of major locations and selected locations in multicolumn cache have been used in several cache designs in ARM Cortex R chip,[19] Intel's way-predicting cache memory,[20] IBM's reconfigurable multi-way associative cache memory[21] and Oracle's dynamic cache replacement way selection based on address tab bits.[22]

Cache entry structure

Cache row entries usually have the following structure:

tagdata blockflag bits

The data block (cache line) contains the actual data fetched from the main memory. The tag contains (part of) the address of the actual data fetched from the main memory. The flag bits are discussed below.

The "size" of the cache is the amount of main memory data it can hold. This size can be calculated as the number of bytes stored in each data block times the number of blocks stored in the cache. (The tag, flag and error correction code bits are not included in the size,[23] although they do affect the physical area of a cache.)

An effective memory address which goes along with the cache line (memory block) is split (MSB to LSB) into the tag, the index and the block offset.[8][24]

tagindexblock offset

The index describes which cache set that the data has been put in. The index length is log2(s){\displaystyle \lceil \log _{2}(s)\rceil } bits for s cache sets.

The block offset specifies the desired data within the stored data block within the cache row. Typically the effective address is in bytes, so the block offset length is log2(b){\displaystyle \lceil \log _{2}(b)\rceil } bits, where b is the number of bytes per data block. The tag contains the most significant bits of the address, which are checked against all rows in the current set (the set has been retrieved by index) to see if this set contains the requested address. If it does, a cache hit occurs. The tag length in bits is as follows:

tag_length = address_length - index_length - block_offset_length

Some authors refer to the block offset as simply the "offset"[25] or the "displacement".[26][27]

Example

كان معالج بنتيوم 4 الأصلي مزودًا بذاكرة تخزين مؤقتة من المستوى الأول (L1) ذات بنية ترابطية رباعية الاتجاهات، بسعة 8 كيلوبايت ، مع كتل تخزين مؤقتة بحجم 64 بايت. وبالتالي، يوجد 8 كيلوبايت / 64 = 128 كتلة تخزين مؤقتة. عدد المجموعات يساوي عدد كتل التخزين المؤقتة مقسومًا على عدد طرق الترابط، مما ينتج عنه 128 / 4 = 32 مجموعة، وبالتالي 2⁵ = 32 فهرسًا مختلفًا. يوجد 2⁶ = 64 إزاحة ممكنة. بما أن عنوان وحدة المعالجة المركزية (CPU) يبلغ عرضه 32 بت، فهذا يعني أن حقل العلامة يتكون من 32 - 5 - 6 = 21 بت.                    

كان معالج بنتيوم 4 الأصلي  يحتوي أيضًا على ذاكرة تخزين مؤقتة مدمجة من المستوى الثاني (L2) ذات ثمانية اتجاهات،  بحجم 256 كيلوبايت، مع كتل ذاكرة تخزين مؤقتة بحجم 128 بايت. وهذا يعني أن حقل العلامة يحتوي على 17 بت ( 32 - 8 - 7) . [ 25 ]      

أجزاء العلم

لا تتطلب ذاكرة التخزين المؤقت للتعليمات سوى بت واحد لكل مدخل في صف ذاكرة التخزين المؤقت: بت الصلاحية. يشير بت الصلاحية إلى ما إذا كانت كتلة ذاكرة التخزين المؤقت قد تم تحميلها ببيانات صالحة أم لا.

عند بدء التشغيل، يقوم الجهاز بتعيين جميع البتات الصالحة في جميع ذاكرات التخزين المؤقت إلى "غير صالحة". كما تقوم بعض الأنظمة بتعيين بت صالح إلى "غير صالحة" في أوقات أخرى، مثل عندما يستقبل جهاز مراقبة ناقل البيانات الرئيسي المتعدد في ذاكرة التخزين المؤقت لأحد المعالجات بث عنوان من معالج آخر، ويدرك أن بعض كتل البيانات في ذاكرة التخزين المؤقت المحلية أصبحت قديمة ويجب وضع علامة "غير صالحة" عليها.

تتطلب ذاكرة التخزين المؤقت للبيانات عادةً بتّين لكل سطر تخزين مؤقت - بتّ الصلاحية وبتّ التغيير . يشير وجود بتّ التغيير إلى أن سطر التخزين المؤقت المرتبط قد تم تغييره منذ قراءته من الذاكرة الرئيسية ("مُغيّر")، مما يعني أن المعالج قد كتب بيانات إلى ذلك السطر ولم تنتقل القيمة الجديدة إلى الذاكرة الرئيسية. 

كاشميست

يُعرَّف خطأ الذاكرة المؤقتة بأنه محاولة فاشلة لقراءة أو كتابة جزء من البيانات في الذاكرة المؤقتة، مما يؤدي إلى وصول البيانات إلى الذاكرة الرئيسية بزمن استجابة أطول بكثير. وهناك ثلاثة أنواع من أخطاء الذاكرة المؤقتة: خطأ في قراءة التعليمات، وخطأ في قراءة البيانات، وخطأ في كتابة البيانات.

تتسبب حالات عدم العثور على التعليمات في ذاكرة التخزين المؤقت للتعليمات عادةً في أكبر تأخير، لأن المعالج، أو على الأقل سلسلة التنفيذ ، يضطر للانتظار (التوقف) حتى يتم جلب التعليمات من الذاكرة الرئيسية. أما حالات عدم العثور على التعليمات في ذاكرة التخزين المؤقت للبيانات فتتسبب عادةً في تأخير أقل، لأن التعليمات غير المعتمدة على قراءة ذاكرة التخزين المؤقت يمكن إصدارها ومواصلة تنفيذها حتى يتم إرجاع البيانات من الذاكرة الرئيسية، ويمكن للتعليمات المعتمدة استئناف التنفيذ. بينما تتسبب حالات عدم العثور على التعليمات في ذاكرة التخزين المؤقت للبيانات عادةً في أقصر تأخير، لأن عملية الكتابة يمكن وضعها في قائمة انتظار، وهناك قيود قليلة على تنفيذ التعليمات اللاحقة؛ ويمكن للمعالج الاستمرار حتى تمتلئ قائمة الانتظار. لمزيد من التفاصيل حول أنواع حالات عدم العثور على التعليمات، راجع قياس أداء ذاكرة التخزين المؤقت ومقاييسه .

ترجمة العناوين

تُطبّق معظم وحدات المعالجة المركزية للأغراض العامة نوعًا من الذاكرة الافتراضية . باختصار، إما أن يرى كل برنامج يعمل على الجهاز مساحة عناوين مُبسّطة خاصة به ، تحتوي على التعليمات البرمجية والبيانات الخاصة به فقط، أو أن جميع البرامج تعمل في مساحة عناوين افتراضية مشتركة. يُنفّذ البرنامج عن طريق الحساب والمقارنة والقراءة والكتابة إلى عناوين مساحة عناوينه الافتراضية، بدلاً من عناوين مساحة العناوين الفيزيائية، مما يجعل البرامج أبسط وبالتالي أسهل في الكتابة.

تتطلب الذاكرة الافتراضية من المعالج ترجمة العناوين الافتراضية التي يُنشئها البرنامج إلى عناوين فيزيائية في الذاكرة الرئيسية. يُعرف الجزء من المعالج الذي يقوم بهذه الترجمة بوحدة إدارة الذاكرة (MMU). يمكن للمسار السريع عبر وحدة إدارة الذاكرة إجراء هذه الترجمات المخزنة في مخزن الترجمة المؤقت (TLB)، وهو عبارة عن ذاكرة تخزين مؤقتة للربط بين جدول الصفحات أو جدول القطاعات أو كليهما في نظام التشغيل.

لأغراض هذه المناقشة، هناك ثلاث سمات مهمة لترجمة العناوين:

  • زمن الوصول: يتوفر العنوان الفعلي من وحدة إدارة الذاكرة (MMU) بعد فترة من الزمن، ربما بضع دورات، من توفر العنوان الظاهري من مولد العناوين.
  • التداخل: يمكن ربط عناوين افتراضية متعددة بعنوان فعلي واحد. تضمن معظم المعالجات أن جميع التحديثات التي تطرأ على هذا العنوان الفعلي ستتم بالتسلسل البرمجي. ولتحقيق هذا الضمان، يجب على المعالج التأكد من وجود نسخة واحدة فقط من العنوان الفعلي في الذاكرة المؤقتة في أي وقت.
  • مستوى التفصيل: تُقسّم مساحة العناوين الافتراضية إلى صفحات. على سبيل المثال، قد تُقسّم مساحة عناوين افتراضية بحجم 4 جيجابايت إلى 1,048,576 صفحة بحجم 4 كيلوبايت، ويمكن ربط كل صفحة منها بشكل مستقل. قد تدعم بعض الشركات أحجام صفحات متعددة؛ راجع قسم الذاكرة الافتراضية لمزيد من التفاصيل.  

تطلّب أحد أنظمة الذاكرة الافتراضية المبكرة، وهو IBM M44/44X ، الوصول إلى جدول ربط مُخزّن في الذاكرة الأساسية قبل كل عملية وصول مُبرمجة إلى الذاكرة الرئيسية. [ 28 ] [ ملاحظة 1 ] وبدون ذاكرة تخزين مؤقتة، ومع تشغيل ذاكرة جدول الربط بنفس سرعة الذاكرة الرئيسية، انخفضت سرعة الوصول إلى الذاكرة إلى النصف فعليًا. استخدم جهازان مبكران جدول صفحات في الذاكرة الرئيسية للربط، وهما IBM System/360 Model 67 و GE 645 ، ذاكرة ترابطية صغيرة كذاكرة تخزين مؤقتة للوصول إلى جدول الصفحات الموجود في الذاكرة. سبق كلا الجهازين أول جهاز مزود بذاكرة تخزين مؤقتة للذاكرة الرئيسية، وهو IBM System/360 Model 85 ، لذا لم تكن أول ذاكرة تخزين مؤقتة للأجهزة تُستخدم في نظام حاسوبي ذاكرة تخزين مؤقتة للبيانات أو التعليمات، بل كانت ذاكرة ترجمة العناوين (TLB).

يمكن تقسيم ذاكرة التخزين المؤقت إلى أربعة أنواع، بناءً على ما إذا كان الفهرس أو العلامة يتوافق مع عناوين فعلية أو افتراضية:

  • تستخدم ذاكرة التخزين المؤقت المفهرسة والموسومة فعليًا (PIPT) العنوان الفعلي لكل من الفهرس والوسم. ورغم بساطة هذه الطريقة وتجنبها لمشاكل التداخل، إلا أنها بطيئة، إذ يجب البحث عن العنوان الفعلي (مما قد يؤدي إلى خطأ في ذاكرة الترجمة السريعة والوصول إلى الذاكرة الرئيسية) قبل البحث عنه في ذاكرة التخزين المؤقت.
  • تستخدم ذاكرة التخزين المؤقت ذات الفهرسة والوسم الافتراضيين (VIVT) العنوان الافتراضي لكلٍ من الفهرس والوسم. يمكن أن يؤدي نظام التخزين المؤقت هذا إلى عمليات بحث أسرع بكثير، حيث لا يلزم الرجوع إلى وحدة إدارة الذاكرة (MMU) أولاً لتحديد العنوان الفعلي لعنوان افتراضي معين. مع ذلك، تعاني VIVT من مشكلة التداخل، حيث قد تشير عدة عناوين افتراضية مختلفة إلى نفس العنوان الفعلي. والنتيجة هي تخزين هذه العناوين بشكل منفصل على الرغم من إشارتها إلى نفس الذاكرة، مما يُسبب مشاكل في التناسق. على الرغم من وجود حلول لهذه المشكلة [ 31 إلا أنها لا تعمل مع بروتوكولات التناسق القياسية. مشكلة أخرى هي التجانس، حيث يُشير نفس العنوان الافتراضي إلى عدة عناوين فعلية مختلفة. لا يمكن التمييز بين هذه العناوين بمجرد النظر إلى الفهرس الافتراضي نفسه، على الرغم من أن الحلول المحتملة تشمل: مسح ذاكرة التخزين المؤقت بعد تبديل السياق ، وفرض عدم تداخل مساحات العناوين، ووسم العنوان الافتراضي بمعرف مساحة عنوان (ASID). بالإضافة إلى ذلك، توجد مشكلة تتمثل في إمكانية تغيير عمليات الربط بين العناوين الافتراضية والمادية، مما يستلزم مسح سطور ذاكرة التخزين المؤقت، حيث تصبح العناوين الافتراضية غير صالحة. وتختفي كل هذه المشكلات عند استخدام العناوين المادية في العلامات (VIPT).
  • تستخدم ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي (VIPT) العنوان الافتراضي للفهرس والعنوان الفعلي للوسم. وتكمن ميزتها على ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي في انخفاض زمن الاستجابة، حيث يمكن البحث عن مجموعة ذاكرة التخزين المؤقت بالتوازي مع ترجمة TLB، إلا أنه لا يمكن مقارنة الوسم إلا بعد توفر العنوان الفعلي. أما ميزتها على ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي (VIVT) فتكمن في قدرة ذاكرة التخزين المؤقت على اكتشاف الكلمات المتجانسة، نظرًا لاحتواء الوسم على العنوان الفعلي. نظريًا، تتطلب ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي عددًا أكبر من بتات الوسم، لأن بعض بتات الفهرس قد تختلف بين العنوانين الافتراضي والفعلي (على سبيل المثال، البت 12 وما فوق للصفحات بحجم 4 كيلوبايت)، وبالتالي يجب تضمينها في كل من الفهرس الافتراضي والوسم الفعلي. عمليًا، لا يمثل هذا مشكلة، لأنه لتجنب مشاكل التناسق، صُممت ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي بحيث لا تحتوي على بتات فهرس (على سبيل المثال، عن طريق تحديد العدد الإجمالي للبتات للفهرس وإزاحة الكتلة إلى 12 للصفحات بحجم 4 كيلوبايت)؛ وهذا يحد من حجم ذاكرة التخزين المؤقت ذات الفهرسة الافتراضية والوسم الفعلي إلى حجم الصفحة مضروبًا في ترابط ذاكرة التخزين المؤقت.
  • كثيرًا ما يُزعم في الأدبيات أن ذاكرة التخزين المؤقت المفهرسة فعليًا والموسومة افتراضيًا (PIVT) عديمة الفائدة وغير موجودة. [ 32 ] ومع ذلك، يستخدم معالج MIPS R6000 هذا النوع من ذاكرة التخزين المؤقت باعتباره التطبيق الوحيد المعروف. [ 33 ] يُنفذ معالج R6000 باستخدام منطق اقتران الباعث ، وهي تقنية فائقة السرعة غير مناسبة للذواكر الكبيرة مثل ذاكرة الترجمة السريعة (TLB) . يحل معالج R6000 هذه المشكلة بوضع ذاكرة الترجمة السريعة في جزء محجوز من ذاكرة التخزين المؤقت من المستوى الثاني، والذي يحتوي على "شريحة" صغيرة وعالية السرعة من ذاكرة الترجمة السريعة على الشريحة. تُفهرس ذاكرة التخزين المؤقت بواسطة العنوان الفعلي المُستمد من شريحة ذاكرة الترجمة السريعة. ولكن، نظرًا لأن شريحة ذاكرة الترجمة السريعة تترجم فقط بتات العنوان الافتراضي اللازمة لفهرسة ذاكرة التخزين المؤقت ولا تستخدم أي وسوم، فقد تحدث حالات وصول خاطئة إلى ذاكرة التخزين المؤقت، ويتم حل هذه المشكلة عن طريق الوسم بالعنوان الافتراضي.

تُعد سرعة هذا التكرار ( زمن استجابة التحميل ) أمرًا بالغ الأهمية لأداء وحدة المعالجة المركزية، ولذلك فإن معظم ذاكرات التخزين المؤقت الحديثة من المستوى 1 مفهرسة افتراضيًا، مما يسمح على الأقل لعملية البحث في TLB الخاصة بوحدة إدارة الذاكرة (MMU) بالتوازي مع جلب البيانات من ذاكرة الوصول العشوائي (RAM) الخاصة بذاكرة التخزين المؤقت.

لكن الفهرسة الافتراضية ليست الخيار الأمثل لجميع مستويات التخزين المؤقت. تزداد تكلفة التعامل مع الأسماء المستعارة الافتراضية مع ازدياد حجم التخزين المؤقت، ونتيجة لذلك، فإن معظم ذاكرات التخزين المؤقت من المستوى الثاني وما فوقها تعتمد على الفهرسة الفعلية.

لطالما استخدمت الذاكرة المخبئية عناوين افتراضية ومادية لعلامات التخزين المؤقت، مع أن استخدام العلامات الافتراضية أصبح نادرًا. إذا أمكن إتمام عملية البحث في جدول ترجمة العناوين (TLB) قبل البحث في ذاكرة الوصول العشوائي (RAM) الخاصة بالذاكرة المخبئية، فسيكون العنوان المادي متاحًا في الوقت المناسب لمقارنة العلامات، وبالتالي لا حاجة للعلامات الافتراضية. لذلك، تميل الذاكرة المخبئية الكبيرة إلى أن تكون موسومة ماديًا، بينما تُستخدم العلامات الافتراضية فقط في الذاكرة المخبئية الصغيرة ذات زمن الوصول المنخفض جدًا. في وحدات المعالجة المركزية الحديثة للأغراض العامة، حلت التلميحات الافتراضية محل العلامات الافتراضية، كما هو موضح أدناه.

مشاكل التجانس والترادف

تصبح ذاكرة التخزين المؤقت التي تعتمد على الفهرسة والوسم الافتراضيين غير متسقة بعد ربط نفس العنوان الافتراضي بعناوين فيزيائية مختلفة ( التجانس )، ويمكن حل هذه المشكلة باستخدام العنوان الفيزيائي للوسم، أو بتخزين مُعرِّف مساحة العنوان في سطر ذاكرة التخزين المؤقت. مع ذلك، لا يُجدي الأسلوب الأخير نفعًا في حل مشكلة التماثل ، حيث ينتهي الأمر بعدة أسطر من ذاكرة التخزين المؤقت بتخزين بيانات لنفس العنوان الفيزيائي. قد تؤدي الكتابة إلى هذه المواقع إلى تحديث موقع واحد فقط في ذاكرة التخزين المؤقت، تاركةً المواقع الأخرى ببيانات غير متسقة. يمكن حل هذه المشكلة باستخدام تخطيطات ذاكرة غير متداخلة لمساحات العناوين المختلفة، أو بدلاً من ذلك، يجب مسح ذاكرة التخزين المؤقت (أو جزء منها) عند تغيير الربط. [ 34 ]

العلامات والتلميحات الافتراضية

تتمثل الميزة الكبرى للعلامات الافتراضية في أنها، بالنسبة لذاكرة التخزين المؤقت الترابطية، تسمح بمطابقة العلامات قبل إتمام عملية تحويل العنوان الافتراضي إلى عنوان فعلي. مع ذلك، تُقدّم عمليات التحقق من التماسك وعمليات الإخلاء عنوانًا فعليًا لاتخاذ إجراء. يجب أن يمتلك الجهاز وسيلة لتحويل العناوين الفعلية إلى فهرس ذاكرة التخزين المؤقت، وذلك عادةً عن طريق تخزين العلامات الفعلية بالإضافة إلى العلامات الافتراضية. على سبيل المقارنة، لا تحتاج ذاكرة التخزين المؤقت ذات العلامات الفعلية إلى الاحتفاظ بالعلامات الافتراضية، مما يُسهّل العملية. عند حذف ربط من عنوان افتراضي إلى عنوان فعلي من ذاكرة الترجمة (TLB)، يجب مسح إدخالات ذاكرة التخزين المؤقت التي تحتوي على تلك العناوين الافتراضية بطريقة ما. بدلاً من ذلك، إذا سُمح بإدخالات ذاكرة التخزين المؤقت على صفحات غير مرتبطة بذاكرة الترجمة (TLB)، فيجب مسح تلك الإدخالات عند تغيير حقوق الوصول على تلك الصفحات في جدول الصفحات.

من الممكن أيضًا لنظام التشغيل ضمان عدم وجود أسماء مستعارة افتراضية في الذاكرة المؤقتة في الوقت نفسه. ويحقق نظام التشغيل هذا الضمان من خلال فرض تلوين الصفحات، الموضح أدناه. وقد اعتمدت بعض معالجات RISC المبكرة (SPARC، RS/6000) هذا النهج. إلا أنه لم يُستخدم مؤخرًا، نظرًا لانخفاض تكلفة الأجهزة اللازمة لاكتشاف الأسماء المستعارة الافتراضية وإزالتها، وارتفاع تعقيد البرمجيات وتأثير تلوين الصفحات المثالي على الأداء.

من المفيد التمييز بين وظيفتي الوسوم في ذاكرة التخزين المؤقت الترابطية: فهي تُستخدم لتحديد أي اتجاه من مجموعة الإدخالات يجب اختياره، وتُستخدم لتحديد ما إذا كانت ذاكرة التخزين المؤقت قد نجحت أم فشلت. يجب أن تكون الوظيفة الثانية صحيحة دائمًا، ولكن يُسمح للوظيفة الأولى بالتخمين، والحصول على إجابة خاطئة أحيانًا.

تحتوي بعض المعالجات (مثل معالجات SPARC القديمة) على ذاكرة تخزين مؤقتة ذات علامات افتراضية ومادية. تُستخدم العلامات الافتراضية لاختيار المسار، بينما تُستخدم العلامات المادية لتحديد ما إذا كانت البيانات موجودة أم لا. يتميز هذا النوع من ذاكرة التخزين المؤقتة بميزة زمن الاستجابة لذاكرة التخزين المؤقتة ذات العلامات الافتراضية، وواجهة برمجية بسيطة لذاكرة التخزين المؤقتة ذات العلامات المادية. ومع ذلك، فإنه يتحمل تكلفة إضافية تتمثل في العلامات المكررة. كذلك، أثناء معالجة حالات عدم وجود البيانات، يجب فحص المسارات البديلة لسطر ذاكرة التخزين المؤقتة المفهرس بحثًا عن أسماء مستعارة افتراضية، وإزالة أي تطابقات.

يمكن التخفيف من المساحة الإضافية (وبعض التأخير) عن طريق الاحتفاظ بتلميحات افتراضية مع كل مدخل في ذاكرة التخزين المؤقت بدلاً من العلامات الافتراضية. هذه التلميحات هي مجموعة فرعية أو تجزئة للعلامة الافتراضية، وتُستخدم لتحديد مسار ذاكرة التخزين المؤقت الذي سيتم منه الحصول على البيانات والعلامة الفعلية. كما هو الحال في ذاكرة التخزين المؤقت ذات العلامات الافتراضية، قد يكون هناك تطابق في التلميح الافتراضي ولكن عدم تطابق في العلامة الفعلية، وفي هذه الحالة يجب إخراج مدخل ذاكرة التخزين المؤقت الذي يحتوي على التلميح المطابق بحيث يكون للوصول إلى ذاكرة التخزين المؤقت بعد ملئها عند هذا العنوان تطابق واحد فقط في التلميح. نظرًا لأن التلميحات الافتراضية تحتوي على عدد أقل من البتات من العلامات الافتراضية التي تميزها عن بعضها البعض، فإن ذاكرة التخزين المؤقت ذات التلميحات الافتراضية تعاني من حالات فشل تعارض أكثر من ذاكرة التخزين المؤقت ذات العلامات الافتراضية.

لعلّ أفضل مثال على تقليل استخدام التلميحات الافتراضية يكمن في معالجات بنتيوم  4 (نوى ويلاميت ونورثوود). في هذه المعالجات، يُمثّل التلميح الافتراضي فعليًا بتّين، وتكون ذاكرة التخزين المؤقت ذات بنية ترابطية رباعية الاتجاهات. وبالتالي، يحتفظ الجهاز بتبديل بسيط بين العنوان الافتراضي وفهرس ذاكرة التخزين المؤقت، ما يُغني عن استخدام ذاكرة الوصول العشوائي للمحتوى (CAM) لاختيار العنوان الصحيح من بين العناوين الأربعة المُسترجعة.

تلوين الصفحة

تواجه ذاكرات التخزين المؤقت الكبيرة ذات الفهرسة الفيزيائية (عادةً ما تكون ذاكرات تخزين مؤقت ثانوية) مشكلةً تتمثل في أن نظام التشغيل، وليس التطبيق، هو من يتحكم في الصفحات التي تتعارض مع بعضها البعض في ذاكرة التخزين المؤقت. وتؤدي الاختلافات في تخصيص الصفحات من تشغيل برنامج لآخر إلى اختلافات في أنماط تعارض ذاكرة التخزين المؤقت، مما قد يُسبب اختلافات كبيرة في أداء البرنامج. هذه الاختلافات تجعل من الصعب للغاية الحصول على توقيت ثابت وقابل للتكرار لاختبار الأداء.

لفهم المشكلة، لنفترض وحدة معالجة مركزية (CPU) مزودة  بذاكرة تخزين مؤقتة من المستوى الثاني ذات فهرسة فعلية وتعيين مباشر بحجم 1 ميجابايت،  وصفحات ذاكرة افتراضية بحجم 4 كيلوبايت. تُربط الصفحات الفعلية المتسلسلة بمواقع متسلسلة في ذاكرة التخزين المؤقتة حتى بعد 256 صفحة، حيث يلتف النمط. يمكننا تمييز كل صفحة فعلية بلون من 0 إلى 255 للدلالة على موقعها في ذاكرة التخزين المؤقتة. لا يمكن أن تتعارض المواقع ذات الألوان المختلفة داخل الصفحات الفعلية في ذاكرة التخزين المؤقتة.

قد يُرتب المبرمجون الساعون إلى تحقيق أقصى استفادة من الذاكرة المؤقتة أنماط الوصول في برامجهم بحيث  لا يتطلب الأمر سوى 1 ميجابايت من البيانات في أي وقت، وبالتالي تجنب حالات عدم اكتمال السعة. ولكن عليهم أيضًا التأكد من خلو أنماط الوصول من حالات عدم اكتمال السعة المتعارضة. إحدى طرق معالجة هذه المشكلة هي تقسيم الصفحات الافتراضية التي يستخدمها البرنامج وتخصيص ألوان افتراضية لها، تمامًا كما كانت تُخصص الألوان للصفحات الفعلية سابقًا. وبذلك، يستطيع المبرمجون تنظيم أنماط الوصول في برامجهم بحيث لا تُستخدم صفحتان بنفس اللون الافتراضي في الوقت نفسه. يوجد العديد من المراجع حول هذه التحسينات (مثل تحسين تداخل الحلقات )، والتي يأتي معظمها من مجتمع الحوسبة عالية الأداء (HPC) .

تكمن المشكلة في أنه بينما قد تختلف الألوان الافتراضية لجميع الصفحات المستخدمة في أي لحظة، قد تتشابه بعضها في اللون الفعلي. في الواقع، إذا قام نظام التشغيل بتخصيص الصفحات الفعلية للصفحات الافتراضية بشكل عشوائي وموحد، فمن المرجح جدًا أن تتشابه بعض الصفحات في اللون الفعلي، وبالتالي ستتداخل مواقع تلك الصفحات في الذاكرة المؤقتة (وهذه هي مفارقة عيد الميلاد ).

يكمن الحل في محاولة نظام التشغيل تخصيص ألوان افتراضية مختلفة لصفحات الألوان الفعلية المختلفة، وهي تقنية تُعرف بتلوين الصفحات . ورغم أن عملية الربط الفعلية بين الألوان الافتراضية والفعلية لا تؤثر على أداء النظام، إلا أن عمليات الربط غير المنطقية يصعب تتبعها ولا تُحقق فائدة تُذكر، لذا فإن معظم طرق تلوين الصفحات تُحاول ببساطة الحفاظ على تطابق ألوان الصفحات الفعلية والافتراضية.

إذا كان نظام التشغيل يضمن أن كل صفحة فعلية تُطابق لونًا افتراضيًا واحدًا فقط، فلن تكون هناك أسماء مستعارة افتراضية، وسيتمكن المعالج من استخدام ذاكرة التخزين المؤقت المفهرسة افتراضيًا دون الحاجة إلى عمليات فحص إضافية للأسماء المستعارة الافتراضية أثناء معالجة الأخطاء. بدلاً من ذلك، يمكن لنظام التشغيل مسح الصفحة من ذاكرة التخزين المؤقت كلما تغير لونها الافتراضي. وكما ذُكر سابقًا، استُخدم هذا الأسلوب في بعض تصميمات SPARC وRS/6000 المبكرة.

استُخدمت تقنية تلوين صفحات البرمجيات لتقسيم ذاكرة التخزين المؤقت من المستوى الأخير (LLC) المشتركة بكفاءة في المعالجات متعددة النوى. [ 35 ] وقد اعتمدت شركة إنتل إدارة ذاكرة التخزين المؤقت من المستوى الأخير (LLC) هذه، القائمة على نظام التشغيل، في المعالجات متعددة النوى. [ 36 ]

التسلسل الهرمي للذاكرة المؤقتة في المعالج الحديث

التسلسل الهرمي للذاكرة في خادم AMD Bulldozer

تحتوي المعالجات الحديثة على ذاكرات تخزين مؤقتة متعددة متفاعلة على الشريحة. ويمكن تحديد طريقة عمل ذاكرة التخزين المؤقتة بشكل كامل من خلال حجمها، وحجم كتلة التخزين المؤقت، وعدد الكتل في المجموعة، وسياسة استبدال مجموعة التخزين المؤقت، وسياسة الكتابة في ذاكرة التخزين المؤقت (الكتابة المباشرة أو الكتابة المؤجلة). [ 25 ]

على الرغم من أن جميع كتل الذاكرة المؤقتة في ذاكرة مؤقتة معينة لها نفس الحجم ونفس الترابط، إلا أن ذاكرات التخزين المؤقت "ذات المستوى الأعلى" (وتسمى ذاكرة التخزين المؤقت من المستوى 1) عادةً ما تحتوي على عدد أقل من الكتل، وحجم كتلة أصغر، وعدد أقل من الكتل في المجموعة، ولكن أوقات الوصول إليها قصيرة جدًا. أما ذاكرات التخزين المؤقت "ذات المستوى الأدنى" (أي المستوى 2 وما دونه) فتحتوي على عدد أكبر تدريجيًا من الكتل، وحجم كتلة أكبر، وعدد أكبر من الكتل في المجموعة، وأوقات وصول أطول نسبيًا، ولكنها لا تزال أسرع بكثير من الذاكرة الرئيسية. [ 8 ]

تُحدد سياسة استبدال مدخلات الذاكرة المؤقتة بواسطة خوارزمية ذاكرة مؤقتة يختارها مصممو المعالج لتنفيذها. في بعض الحالات، تُقدم خوارزميات متعددة لأنواع مختلفة من أحمال العمل.

مخابئ متخصصة

تستخدم وحدات المعالجة المركزية ذات البنية الأنبوبية (pipelined CPUs) نقاطًا متعددة في مسار المعالجة للوصول إلى الذاكرة : جلب التعليمات، وترجمة العناوين من الافتراضية إلى الفيزيائية ، وجلب البيانات (انظر مسار معالجة RISC الكلاسيكي ). ويتمثل التصميم الأمثل في استخدام ذاكرات تخزين مؤقتة فيزيائية مختلفة لكل نقطة من هذه النقاط، بحيث لا يُضطر أي مورد فيزيائي إلى تخصيصه لخدمة نقطتين في مسار المعالجة. وبالتالي، ينتهي مسار المعالجة بشكل طبيعي بثلاث ذاكرات تخزين مؤقتة منفصلة على الأقل (للتعليمات، وذاكرة الترجمة السريعة ، والبيانات)، كل منها متخصص في دوره المحدد.

مخبأ الضحايا

ذاكرة التخزين المؤقت للضحايا هي ذاكرة تخزين مؤقتة تُستخدم لحفظ الكتل التي تم إخراجها من ذاكرة التخزين المؤقت لوحدة المعالجة المركزية عند استبدالها. تقع ذاكرة التخزين المؤقت للضحايا بين ذاكرة التخزين المؤقت الرئيسية ومسار إعادة تعبئتها، وتحتوي فقط على كتل البيانات التي تم إخراجها من ذاكرة التخزين المؤقت الرئيسية. عادةً ما تكون ذاكرة التخزين المؤقت للضحايا ترابطية بالكامل، وتهدف إلى تقليل عدد حالات عدم العثور على البيانات في الذاكرة. لا تتطلب العديد من البرامج شائعة الاستخدام ربطًا ترابطيًا لجميع عمليات الوصول. في الواقع، جزء صغير فقط من عمليات الوصول إلى الذاكرة في البرنامج يتطلب ترابطًا عاليًا. تستغل ذاكرة التخزين المؤقت للضحايا هذه الخاصية من خلال توفير ترابط عالي لهذه العمليات فقط. تم تقديمها بواسطة نورمان جوبي من شركة DEC في عام 1990. [ 37 ]

قدمت إنتل في معالجاتها من طراز كريستالويل [ 38 ] ، وهو نسخة معدلة من معالجات هاسويل، ذاكرة تخزين مؤقتة من المستوى الرابع eDRAM  بسعة 128 ميجابايت مدمجة في المعالج، والتي تعمل كذاكرة تخزين مؤقتة احتياطية لذاكرة التخزين المؤقتة من المستوى الثالث. [ 39 ] أما في بنية سكايليك الدقيقة، فلم تعد ذاكرة التخزين المؤقتة من المستوى الرابع تعمل كذاكرة تخزين مؤقتة احتياطية. [ 40 ]

ذاكرة التتبع

من الأمثلة البارزة على تخصص الذاكرة المؤقتة ذاكرة التتبع (المعروفة أيضًا بذاكرة تتبع التنفيذ ) الموجودة في معالجات إنتل بنتيوم 4. تُعد ذاكرة التتبع آلية لزيادة عرض نطاق جلب التعليمات وتقليل استهلاك الطاقة (في حالة بنتيوم  4) عن طريق تخزين آثار التعليمات التي تم جلبها وفك تشفيرها مسبقًا. [ 41 ]

تُخزّن ذاكرة التتبع المؤقتة التعليمات إما بعد فك تشفيرها أو عند انتهاء تنفيذها. تُضاف التعليمات عادةً إلى ذاكرة التتبع المؤقتة في مجموعات تُمثّل إما كتلًا أساسية فردية أو مسارات تعليمات ديناميكية. تُخزّن ذاكرة التتبع المؤقتة في معالج بنتيوم  4 العمليات الدقيقة الناتجة عن فك تشفير تعليمات x86، مما يُوفّر أيضًا وظيفة ذاكرة العمليات الدقيقة المؤقتة. بفضل ذلك، عند الحاجة إلى تعليمة ما في المرة القادمة، لن يكون من الضروري فك تشفيرها إلى عمليات دقيقة مرة أخرى. [ 42 ] : 63-68

ذاكرة التخزين المؤقت لدمج الكتابة (WCC)

ذاكرة التخزين المؤقت لدمج الكتابة [ 43 ] هي ذاكرة تخزين مؤقت خاصة تُعد جزءًا من ذاكرة التخزين المؤقت من المستوى الثاني (L2) في بنية Bulldozer الدقيقة من AMD . تمر عمليات التخزين من ذاكرتي التخزين المؤقت من المستوى الأول (L1D) في الوحدة عبر ذاكرة التخزين المؤقت لدمج الكتابة (WCC)، حيث يتم تخزينها مؤقتًا ودمجها. وتتمثل مهمة ذاكرة التخزين المؤقت لدمج الكتابة في تقليل عدد عمليات الكتابة إلى ذاكرة التخزين المؤقت من المستوى الثاني (L2).

ذاكرة التخزين المؤقت للعمليات الدقيقة (μop أو uop)

ذاكرة التخزين المؤقت للعمليات الدقيقة ( μop cache أو uop cache أو UC ) [ 44 ] هي ذاكرة تخزين مؤقت متخصصة تخزن العمليات الدقيقة للتعليمات التي تم فك تشفيرها، سواءً تم استلامها مباشرةً من وحدات فك تشفير التعليمات أو من ذاكرة التخزين المؤقت للتعليمات. عند الحاجة إلى فك تشفير تعليمة ما، يتم التحقق من ذاكرة التخزين المؤقت للعمليات الدقيقة (μop cache) بحثًا عن شكلها المفكك، والذي يُعاد استخدامه إذا كان مخزنًا مؤقتًا؛ وإذا لم يكن متوفرًا، يتم فك تشفير التعليمة ثم تخزينها مؤقتًا.

من أوائل الدراسات التي وصفت ذاكرة التخزين المؤقت للعمليات الدقيقة (μop cache) كواجهة أمامية بديلة لمعالجات Intel P6، ورقة بحثية نُشرت عام 2001 بعنوان "ذاكرة التخزين المؤقت للعمليات الدقيقة: واجهة أمامية مُراعية لاستهلاك الطاقة لبنية تعليمات متغيرة الطول" . [ 45 ] لاحقًا، أدرجت Intel ذاكرة التخزين المؤقت للعمليات الدقيقة في معالجات Sandy Bridge وفي البنى الدقيقة اللاحقة مثل Ivy Bridge و Haswell . [ 42 ] : 121-123 [ 46 ] كما طبقت AMD ذاكرة التخزين المؤقت للعمليات الدقيقة في بنيتها الدقيقة Zen . [ 47 ]

Fetching complete pre-decoded instructions eliminates the need to repeatedly decode variable length complex instructions into simpler fixed-length micro-operations, and simplifies the process of predicting, fetching, rotating and aligning fetched instructions. A μop cache effectively offloads the fetch and decode hardware, thus decreasing power consumption and improving the frontend supply of decoded micro-operations. The μop cache also increases performance by more consistently delivering decoded micro-operations to the backend and eliminating various bottlenecks in the CPU's fetch and decode logic.[45][46]

A μop cache has many similarities with a trace cache, although a μop cache is much simpler thus providing better power efficiency; this makes it better suited for implementations on battery-powered devices. The main disadvantage of the trace cache, leading to its power inefficiency, is the hardware complexity required for its heuristic deciding on caching and reusing dynamically created instruction traces.[48]

Branch target instruction cache

A branch target cache or branch target instruction cache, the name used on ARM microprocessors,[49] is a specialized cache which holds the first few instructions at the destination of a taken branch. This is used by low-powered processors which do not need a normal instruction cache because the memory system is capable of delivering instructions fast enough to satisfy the CPU without one. However, this only applies to consecutive instructions in sequence; it still takes several cycles of latency to restart instruction fetch at a new address, causing a few cycles of pipeline bubble after a control transfer. A branch target cache provides instructions for those few cycles avoiding a delay after most taken branches.

This allows full-speed operation with a much smaller cache than a traditional full-time instruction cache.

Smart cache

Smart cache is a level 2 or level 3 caching method for multiple execution cores, developed by Intel.

Smart Cache shares the actual cache memory between the cores of a multi-core processor. In comparison to a dedicated per-core cache, the overall cache miss rate decreases when cores do not require equal parts of the cache space. Consequently, a single core can use the full level 2 or level 3 cache while the other cores are inactive.[50] Furthermore, the shared cache makes it faster to share memory among different execution cores.[51]

Multi-level caches

تتمثل إحدى المشكلات الأخرى في المفاضلة الأساسية بين زمن استجابة الذاكرة المؤقتة ومعدل الوصول الناجح. تتميز الذاكرة المؤقتة الأكبر حجمًا بمعدلات وصول ناجحة أفضل، ولكن بزمن استجابة أطول. ولمعالجة هذه المفاضلة، تستخدم العديد من الحواسيب مستويات متعددة من الذاكرة المؤقتة، حيث تُدعم الذاكرة المؤقتة الصغيرة السريعة بذاكرة مؤقتة أكبر حجمًا وأبطأ. تعمل الذاكرة المؤقتة متعددة المستويات عمومًا عن طريق فحص أسرع ذاكرة مؤقتة وأصغرها حجمًا، وهي المستوى الأول ( L1 )، أولًا؛ فإذا وُجدت البيانات المطلوبة، يتابع المعالج عمله بسرعة عالية. أما إذا لم تُوجد، فيتم فحص ذاكرة المستوى الثاني ( L2 )، وهي الأبطأ حجمًا ولكن الأكبر ، وهكذا، قبل الوصول إلى الذاكرة الخارجية.

مع ازدياد فارق زمن الاستجابة بين الذاكرة الرئيسية وأسرع ذاكرة تخزين مؤقت، بدأت بعض المعالجات باستخدام ما يصل إلى ثلاثة مستويات من ذاكرة التخزين المؤقت المدمجة. وقد استغلت التصاميم التي تراعي التكلفة هذه التقنية لدمج التسلسل الهرمي الكامل لذاكرة التخزين المؤقت داخل الشريحة، ولكن بحلول العقد الثاني من الألفية، عادت بعض التصاميم ذات الأداء العالي إلى استخدام ذاكرات تخزين مؤقت خارجية كبيرة، والتي غالبًا ما تُنفذ باستخدام ذاكرة eDRAM وتُركب على وحدة متعددة الشرائح ، كمستوى رابع لذاكرة التخزين المؤقت. في حالات نادرة، كما هو الحال في وحدة المعالجة المركزية للحاسوب المركزي IBM z15 (2019)، تُنفذ جميع المستويات وصولًا إلى المستوى L1 باستخدام ذاكرة eDRAM، لتحل محل ذاكرة SRAM بالكامل (مع العلم أن ذاكرة SRAM لا تزال تُستخدم للمسجلات ). تتميز سلسلة معالجات Apple Silicon القائمة على معمارية ARM ، بدءًا من A14 و M1 ، بذاكرة تخزين مؤقت L1i بسعة 192 كيلوبايت لكل نواة من النوى عالية الأداء، وهي سعة كبيرة بشكل غير معتاد؛ بينما لا تتجاوز سعة ذاكرة التخزين المؤقت للنوى عالية الكفاءة 128 كيلوبايت. ومنذ ذلك الحين، قامت معالجات أخرى مثل Lunar Lake من Intel و Oryon من Qualcomm بتطبيق أحجام ذاكرة تخزين مؤقتة L1i مماثلة.  

تعتمد فوائد ذاكرات التخزين المؤقت من المستوى الثالث والرابع على أنماط وصول التطبيق. ومن أمثلة المنتجات التي تتضمن ذاكرات التخزين المؤقت من المستوى الثالث والرابع ما يلي:

  • كان لدى Alpha 21164 (1995)  ذاكرة تخزين مؤقتة من المستوى الثالث خارج الشريحة تتراوح سعتها من 1 إلى 64 ميجابايت.
  • كان معالج AMD K6-III (1999) يحتوي على ذاكرة تخزين مؤقتة من المستوى الثالث (L3) مثبتة على اللوحة الأم.
  • كان لدى معالج IBM POWER4 (2001) ذاكرة تخزين مؤقتة من المستوى الثالث (L3) بسعة 32  ميجابايت لكل معالج، مشتركة بين عدة معالجات.
  • كان لدى Itanium 2 (2003) ذاكرة تخزين مؤقتة موحدة  من المستوى 3 (L3) بسعة 6 ميجابايت على الشريحة؛ وقد تضمنت وحدة Itanium 2 (2003) MX 2 معالجين من نوع Itanium 2 بالإضافة إلى ذاكرة تخزين مؤقتة مشتركة من المستوى 4 بسعة 64 ميجابايت على وحدة متعددة الشرائح متوافقة مع معالج Madison.   
  • يتميز منتج Intel Xeon MP الذي يحمل الاسم الرمزي "Tulsa" (2006)  بذاكرة تخزين مؤقتة من المستوى الثالث (L3) بحجم 16 ميجابايت مشتركة بين نواتي المعالج.
  • معالج AMD Phenom (2007) مزود  بذاكرة تخزين مؤقتة من المستوى الثالث (L3) بسعة 2 ميجابايت.
  • يحتوي معالج AMD Phenom II  (2008) على ذاكرة تخزين مؤقتة موحدة من المستوى الثالث (L3) تصل إلى 6 ميجابايت.
  • يحتوي معالج Intel Core i7 (2008) على ذاكرة تخزين مؤقتة موحدة من المستوى الثالث (L3) بحجم 8  ميجابايت، وهي شاملة ومشتركة بين جميع النوى.
  • تحتوي وحدات المعالجة المركزية Intel Haswell المزودة بمعالجات رسومات Intel Iris Pro المدمجة على ذاكرة eDRAM بسعة 128  ميجابايت تعمل بشكل أساسي كذاكرة تخزين مؤقتة من المستوى الرابع (L4). [ 52 ]

أخيرًا، في الطرف الآخر من التسلسل الهرمي للذاكرة، يُمكن اعتبار ملف سجلات وحدة المعالجة المركزية أصغر وأسرع ذاكرة تخزين مؤقت في النظام، مع خاصية مميزة تتمثل في جدولة عمله برمجيًا - عادةً بواسطة المُصرّف - حيث يُخصّص سجلات لحفظ القيم المُسترجعة من الذاكرة الرئيسية، على سبيل المثال، لتحسين تداخل الحلقات . مع ذلك، عند إعادة تسمية السجلات، تُعاد تخصيص معظم تعيينات سجلات المُصرّف ديناميكيًا بواسطة الأجهزة في وقت التشغيل إلى بنك سجلات، مما يسمح لوحدة المعالجة المركزية بفك تبعيات البيانات الخاطئة، وبالتالي تخفيف مخاطر خط الأنابيب.

قد تحتوي ملفات التسجيل أحيانًا على تسلسل هرمي: كان لدى جهاز Cray-1 (حوالي عام 1976) ثمانية سجلات عناوين "A" وثمانية سجلات بيانات قياسية "S" قابلة للاستخدام عمومًا. كما كان هناك مجموعة من 64 سجل عنوان "B" و64 سجل بيانات قياسية "T" تستغرق وقتًا أطول للوصول إليها، ولكنها أسرع من الذاكرة الرئيسية. تم توفير سجلات "B" و"T" لأن جهاز Cray-1 لم يكن مزودًا بذاكرة تخزين مؤقتة للبيانات. (مع ذلك، كان جهاز Cray-1 مزودًا بذاكرة تخزين مؤقتة للتعليمات).

رقائق متعددة النوى

عند تصميم شريحة متعددة النوى ، يبرز تساؤل حول ما إذا كان ينبغي أن تكون ذاكرة التخزين المؤقت مشتركة أم خاصة بكل نواة. يؤدي تطبيق ذاكرة تخزين مؤقت مشتركة حتمًا إلى زيادة التوصيلات والتعقيد. لكن في المقابل، فإن وجود ذاكرة تخزين مؤقت واحدة لكل شريحة ، بدلًا من ذاكرة لكل نواة ، يقلل بشكل كبير من المساحة المطلوبة، وبالتالي يمكن تضمين ذاكرة تخزين مؤقت أكبر.

عادةً، يُعدّ استخدام ذاكرة التخزين المؤقت من المستوى الأول (L1) غير مرغوب فيه، لأنّ الزيادة الناتجة في زمن الاستجابة ستؤدي إلى إبطاء كل نواة بشكل ملحوظ مقارنةً بشريحة أحادية النواة. مع ذلك، بالنسبة لذاكرة التخزين المؤقت من المستوى الأعلى (عادةً L3، وهي آخر ذاكرة يتم استدعاؤها قبل الوصول إلى الذاكرة الرئيسية)، يُفضّل وجود ذاكرة تخزين مؤقت شاملة لعدة أسباب، منها السماح لنواة واحدة باستخدام ذاكرة التخزين المؤقت بأكملها، وتقليل تكرار البيانات من خلال تمكين العمليات أو الخيوط المختلفة من مشاركة البيانات المخزنة مؤقتًا، وتقليل تعقيد بروتوكولات تماسك ذاكرة التخزين المؤقت المستخدمة. [ 53 ] على سبيل المثال، قد تتضمن شريحة ثمانية النوى بثلاثة مستويات ذاكرة تخزين مؤقت من المستوى الأول (L1) لكل نواة، وذاكرة تخزين مؤقت وسيطة من المستوى الثاني (L2) لكل زوج من النوى، وذاكرة تخزين مؤقت من المستوى الثالث (L3) مشتركة بين جميع النوى.

تُعرف ذاكرة التخزين المؤقت المشتركة ذات المستوى الأعلى (عادةً L3، والتي تُستدعى قبل الوصول إلى الذاكرة) باسم ذاكرة التخزين المؤقت ذات المستوى الأخير (LLC). [ 54 ] تُستخدم تقنيات إضافية لزيادة مستوى التوازي عند مشاركة ذاكرة التخزين المؤقت ذات المستوى الأخير بين عدة نوى، بما في ذلك تقسيمها إلى أجزاء متعددة تُعنون بنطاقات معينة من عناوين الذاكرة، ويمكن الوصول إليها بشكل مستقل. [ 8 ] [ 55 ]

منفصل مقابل موحد

في بنية ذاكرة التخزين المؤقت المنفصلة، ​​تُخزَّن التعليمات والبيانات بشكل منفصل، مما يعني أن سطر ذاكرة التخزين المؤقت يُستخدم إما لتخزين التعليمات أو البيانات، وليس كليهما؛ وقد تم إثبات فوائد عديدة لاستخدام مخازن مؤقتة منفصلة لترجمة البيانات والتعليمات . [ 56 ] في بنية موحدة، لا يوجد هذا القيد، ويمكن استخدام أسطر ذاكرة التخزين المؤقت لتخزين كل من التعليمات والبيانات.

حصري مقابل شامل

تُدخل ذاكرة التخزين المؤقت متعددة المستويات قرارات تصميمية جديدة. على سبيل المثال، في بعض المعالجات، يجب أن تكون جميع البيانات الموجودة في ذاكرة التخزين المؤقت L1 موجودة أيضًا في ذاكرة التخزين المؤقت L2. تُسمى هذه الذاكرة بذاكرة التخزين المؤقت الشاملة تمامًا . بينما تحتوي معالجات أخرى (مثل AMD Athlon ) على ذاكرة تخزين مؤقت حصرية : حيث يُضمن وجود البيانات في واحدة فقط من ذاكرتي التخزين المؤقت L1 وL2، وليس في كلتيهما. في المقابل، لا تشترط معالجات أخرى (مثل Intel Pentium II و III و 4 ) وجود البيانات الموجودة في ذاكرة التخزين المؤقت L1 في ذاكرة التخزين المؤقت L2، على الرغم من أنها قد تفعل ذلك في كثير من الأحيان. لا يوجد اسم مُتفق عليه عالميًا لهذه السياسة الوسيطة؛ [ 57 ] [ 58 ] ومن الأسماء الشائعة لها "غير الحصرية" و"الشاملة جزئيًا".

تتمثل ميزة ذاكرة التخزين المؤقت الحصرية في قدرتها على تخزين كمية أكبر من البيانات. وتزداد هذه الميزة عندما تكون ذاكرة التخزين المؤقت L1 الحصرية مماثلة لذاكرة التخزين المؤقت L2، وتتضاءل إذا كانت ذاكرة التخزين المؤقت L2 أكبر بكثير من ذاكرة التخزين المؤقت L1. عندما تفشل ذاكرة التخزين المؤقت L1 في الوصول إلى البيانات المطلوبة وتنجح ذاكرة التخزين المؤقت L2، يتم استبدال سطر البيانات الموجود في ذاكرة التخزين المؤقت L2 بسطر موجود في ذاكرة التخزين المؤقت L1. هذا الاستبدال يتطلب جهدًا أكبر بكثير من مجرد نسخ سطر من L2 إلى L1، وهو ما تقوم به ذاكرة التخزين المؤقت الشاملة. [ 58 ]

One advantage of strictly inclusive caches is that when external devices or other processors in a multiprocessor system wish to remove a cache line from the processor, they need only have the processor check the L2 cache. In cache hierarchies which do not enforce inclusion, the L1 cache must be checked as well. As a drawback, there is a correlation between the associativities of L1 and L2 caches: if the L2 cache does not have at least as many ways as all L1 caches together, the effective associativity of the L1 caches is restricted. Another disadvantage of inclusive cache is that whenever there is an eviction in L2 cache, the (possibly) corresponding lines in L1 also have to get evicted in order to maintain inclusiveness. This is quite a bit of work, and would result in a higher L1 miss rate.[58]

Another advantage of inclusive caches is that the larger cache can use larger cache lines, which reduces the size of the secondary cache tags. (Exclusive caches require both caches to have the same size cache lines, so that cache lines can be swapped on a L1 miss, L2 hit.) If the secondary cache is an order of magnitude larger than the primary, and the cache data are an order of magnitude larger than the cache tags, this tag area saved can be comparable to the incremental area needed to store the L1 cache data in the L2.[59]

Scratchpad memory

Scratchpad memory (SPM), also known as scratchpad, scratchpad RAM or local store in computer terminology, is a high-speed internal memory used for temporary storage of calculations, data, and other work in progress.

Example: the K8

To illustrate both specialization and multi-level caching, here is the cache hierarchy of the K8 core in the AMD Athlon 64 CPU.[60]

Cache hierarchy of the K8 core in the AMD Athlon 64 CPU

The K8 has four specialized caches: an instruction cache, an instruction TLB, a data TLB, and a data cache. Each of these caches is specialized:

  • The instruction cache keeps copies of 64-byte lines of memory, and fetches 16 bytes each cycle. Each byte in this cache is stored in ten bits rather than eight, with the extra bits marking the boundaries of instructions (this is an example of predecoding). The cache has only parity protection rather than ECC, because parity is smaller and any damaged data can be replaced by fresh data fetched from memory (which always has an up-to-date copy of instructions).
  • The instruction TLB keeps copies of page table entries (PTEs). Each cycle's instruction fetch has its virtual address translated through this TLB into a physical address. Each entry is either four or eight bytes in memory. Because the K8 has a variable page size, each of the TLBs is split into two sections, one to keep PTEs that map 4 KiB pages, and one to keep PTEs that map 4 MiB or 2 MiB pages. The split allows the fully associative match circuitry in each section to be simpler. The operating system maps different sections of the virtual address space with different size PTEs.
  • The data TLB has two copies which keep identical entries. The two copies allow two data accesses per cycle to translate virtual addresses to physical addresses. Like the instruction TLB, this TLB is split into two kinds of entries.
  • The data cache keeps copies of 64-byte lines of memory. It is split into 8 banks (each storing 8 KiB of data), and can fetch two 8-byte data each cycle so long as those data are in different banks. There are two copies of the tags, because each 64-byte line is spread among all eight banks. Each tag copy handles one of the two accesses per cycle.

The K8 also has multiple-level caches. There are second-level instruction and data TLBs, which store only PTEs mapping 4 KiB. Both instruction and data caches, and the various TLBs, can fill from the large unified L2 cache. This cache is exclusive to both the L1 instruction and data caches, which means that any 8-byte line can only be in one of the L1 instruction cache, the L1 data cache, or the L2 cache. It is, however, possible for a line in the data cache to have a PTE which is also in one of the TLBs—the operating system is responsible for keeping the TLBs coherent by flushing portions of them when the page tables in memory are updated.

The K8 also caches information that is never stored in memory—prediction information. These caches are not shown in the above diagram. As is usual for this class of CPU, the K8 has fairly complex branch prediction, with tables that help predict whether branches are taken and other tables which predict the targets of branches and jumps. Some of this information is associated with instructions, in both the level 1 instruction cache and the unified secondary cache.

يستخدم معالج K8 حيلةً مبتكرةً لتخزين معلومات التنبؤ مع التعليمات في الذاكرة الثانوية. تُحمى الأسطر في الذاكرة الثانوية من تلف البيانات العرضي (مثلًا بفعل اصطدام جسيم ألفا ) إما بواسطة تصحيح الأخطاء (ECC ) أو رمز التكافؤ ، وذلك بحسب ما إذا كانت هذه الأسطر قد أُخرجت من الذاكرة الرئيسية للبيانات أو التعليمات. ولأن رمز التكافؤ يشغل بتات أقل من رمز تصحيح الأخطاء، فإن أسطر ذاكرة التعليمات تحتوي على بعض البتات الاحتياطية. تُستخدم هذه البتات لتخزين معلومات التنبؤ بالتفرعات المرتبطة بتلك التعليمات. والنتيجة النهائية هي أن مُتنبئ التفرعات يمتلك جدول تاريخ فعال أكبر، وبالتالي يتمتع بدقة أفضل.

المزيد من التسلسلات الهرمية

تحتوي المعالجات الأخرى على أنواع أخرى من المتنبئات (على سبيل المثال، المتنبئ بتجاوز التخزين إلى التحميل في DEC Alpha 21264 ).

تُعدّ هذه المُتنبئات بمثابة ذاكرات تخزين مؤقتة، إذ تخزن معلومات تتطلب معالجة مكلفة. بعض المصطلحات المستخدمة عند الحديث عن المُتنبئات هي نفسها المستخدمة عند الحديث عن ذاكرات التخزين المؤقت (يُشار إلى نجاح في مُتنبئ فرعي)، ولكن لا يُنظر إلى المُتنبئات عمومًا على أنها جزء من التسلسل الهرمي لذاكرة التخزين المؤقت.

يحافظ معالج K8 على اتساق ذاكرة التخزين المؤقت للتعليمات والبيانات على مستوى العتاد، مما يعني أن تنفيذ أمر تخزين في تعليمة تلي تعليمة التخزين مباشرةً سيؤدي إلى تغيير تلك التعليمة اللاحقة. أما المعالجات الأخرى، مثل تلك الموجودة في عائلتي Alpha وMIPS، فقد اعتمدت على البرمجيات للحفاظ على اتساق ذاكرة التخزين المؤقت للتعليمات. ولا يُضمن ظهور أوامر التخزين في مسار التعليمات إلا بعد أن يستدعي البرنامج وظيفةً من نظام التشغيل لضمان الاتساق.

ذاكرة الوصول العشوائي (RAM)

ذاكرة الوصول العشوائي (RAM) المدمجة في لوحة معالج Intel Pentium III

في هندسة الحاسوب، يُستخدم مُعرِّف ذاكرة الوصول العشوائي (RAM) لتحديد موقع الذاكرة المُخزَّن حاليًا في ذاكرة التخزين المؤقت لوحدة المعالجة المركزية. [ 61 ] [ 62 ] في التصميمات البسيطة ذات التعيين المباشر، يُمكن استخدام ذاكرة الوصول العشوائي الثابتة السريعة (SRAM) . أما ذاكرات التخزين المؤقت ذات الترابط الأعلى ، فتستخدم عادةً ذاكرة قابلة للعنونة بالمحتوى .

تطبيق

تُعدّ عمليات قراءة البيانات من ذاكرة التخزين المؤقت أكثر عمليات وحدة المعالجة المركزية شيوعًا والتي تستغرق أكثر من دورة واحدة. يميل وقت تنفيذ البرنامج إلى أن يكون شديد الحساسية لزمن استجابة الوصول إلى البيانات من المستوى الأول في ذاكرة التخزين المؤقت. ولذلك، يُبذل جهد كبير في التصميم، وغالبًا ما تُستهلك طاقة ومساحة كبيرة من السيليكون، لجعل ذاكرة التخزين المؤقت سريعة قدر الإمكان.

أبسط أنواع الذاكرة المؤقتة هي ذاكرة مؤقتة ذات فهرسة افتراضية وتعيين مباشر. يُحسب العنوان الافتراضي باستخدام جامع، ثم يُستخرج الجزء ذو الصلة من العنوان ويُستخدم لفهرسة ذاكرة SRAM، التي تُعيد البيانات المُحمّلة. تُحاذى البيانات بايتًا بايتًا في مُزحزح بايت، ومن هناك تُمرر إلى العملية التالية. لا حاجة لأي فحص للعلامات في الحلقة الداخلية - في الواقع، لا حاجة حتى لقراءة العلامات. لاحقًا في مسار المعالجة، ولكن قبل إنهاء تعليمة التحميل، يجب قراءة علامة البيانات المُحمّلة، ومقارنتها بالعنوان الافتراضي للتأكد من وجود تطابق في الذاكرة المؤقتة. في حالة عدم التطابق، تُحدّث الذاكرة المؤقتة بسطر الذاكرة المؤقتة المطلوب، ويُعاد تشغيل مسار المعالجة. 

تُعدّ ذاكرة التخزين المؤقت الترابطية أكثر تعقيدًا، إذ يتطلب الأمر قراءة نوع من العلامات لتحديد المدخل المطلوب. عادةً ما تقرأ ذاكرة التخزين المؤقت الترابطية من المستوى الأول (N-way set-associative level-1) جميع العلامات الممكنة (N) والبيانات (N) بالتوازي، ثم تختار البيانات المرتبطة بالعلامة المطابقة. في بعض الأحيان، توفر ذاكرات التخزين المؤقت من المستوى الثاني (Level-2) الطاقة بقراءة العلامات أولًا، بحيث لا تُقرأ سوى عنصر بيانات واحد من ذاكرة الوصول العشوائي الثابتة (SRAM) الخاصة بالبيانات.

مسار القراءة لذاكرة تخزين مؤقتة ترابطية ثنائية الاتجاه

يهدف الرسم التخطيطي المجاور إلى توضيح كيفية استخدام حقول العنوان المختلفة. البت 31 هو الأكثر أهمية، بينما البت 0 هو الأقل أهمية. يوضح الرسم التخطيطي ذاكرة الوصول العشوائي الثابتة (SRAM) والفهرسة وتعدد الإرسال لذاكرة تخزين مؤقتة بسعة 4  كيلوبايت، ثنائية الاتجاه، ذات فهرسة وعلامات افتراضية، مع  خطوط 64 بايت، وعرض قراءة 32 بت، وعنوان افتراضي 32 بت.

نظرًا لأن حجم الذاكرة المؤقتة 4  كيلوبايت وتحتوي على 64  سطرًا، فإن الذاكرة المؤقتة تتكون من 64 سطرًا فقط، ونقرأ سطرين في كل مرة من ذاكرة SRAM للعلامات التي تحتوي على 32 صفًا، كل صف منها يحمل زوجًا من العلامات المكونة من 21 بت. على الرغم من إمكانية استخدام أي دالة من بتات العناوين الافتراضية من 31 إلى 6 لفهرسة ذاكرة SRAM للعلامات والبيانات، إلا أن استخدام البتات الأقل أهمية هو الأسهل.

وبالمثل، نظرًا لأن ذاكرة التخزين المؤقت تبلغ 4  كيلوبايت ولها  مسار قراءة 4 بايت، وتقرأ بطريقتين لكل عملية وصول، فإن ذاكرة الوصول العشوائي الثابتة للبيانات تتكون من 512 صفًا بعرض 8 بايت.

قد تكون ذاكرة التخزين المؤقت الحديثة بحجم 16  كيلوبايت، ذات بنية ترابطية رباعية الاتجاهات، ومفهرسة افتراضياً، ومُشار إليها افتراضياً، ومُوسومة فعلياً، مع 32  سطر بايت، وعرض قراءة 32 بت، وعناوين فعلية 36 بت. يشبه مسار القراءة المتكرر لهذه الذاكرة مسار القراءة المذكور أعلاه. بدلاً من الوسوم، تُقرأ التلميحات الافتراضية وتُطابق مع جزء من العنوان الافتراضي. لاحقاً في مسار المعالجة، يُترجم العنوان الافتراضي إلى عنوان فعلي بواسطة ذاكرة الترجمة السريعة (TLB)، ويُقرأ الوسم الفعلي (وسم واحد فقط، لأن التلميح الافتراضي يُحدد اتجاه القراءة من ذاكرة التخزين المؤقت). أخيراً، يُقارن العنوان الفعلي بالوسم الفعلي لتحديد ما إذا كان قد تم العثور على عنوان صحيح.

لقد حسّنت بعض تصميمات SPARC سرعة ذاكرة التخزين المؤقت L1 الخاصة بها من خلال تقليل تأخيرات البوابات عن طريق دمج جامع العناوين الظاهري في وحدات فك تشفير SRAM.

تاريخ

يرتبط التاريخ المبكر لتقنية الذاكرة المؤقتة ارتباطًا وثيقًا باختراع الذاكرة الافتراضية واستخدامها. نظرًا لندرة ذاكرة أشباه الموصلات وارتفاع تكلفتها، استخدمت الحواسيب المركزية الأولى في ستينيات القرن الماضي تسلسلًا هرميًا معقدًا للذاكرة الفعلية، مُسقطة على مساحة ذاكرة افتراضية مسطحة تستخدمها البرامج. شملت تقنيات الذاكرة أشباه الموصلات، والذاكرة المغناطيسية، والأسطوانات، والأقراص. كانت الذاكرة الافتراضية التي تراها البرامج وتستخدمها مسطحة، واستُخدمت الذاكرة المؤقتة لجلب البيانات والتعليمات إلى أسرع ذاكرة قبل وصول المعالج إليها. أُجريت دراسات مكثفة لتحسين أحجام الذاكرة المؤقتة، ووُجد أن القيم المثلى تعتمد بشكل كبير على لغة البرمجة المستخدمة؛ حيث احتاجت لغة Algol إلى أصغر حجم للذاكرة المؤقتة، بينما احتاجت لغتا Fortran وCobol إلى أكبر حجم.

في بدايات تقنية الحواسيب الصغيرة، كان الوصول إلى الذاكرة أبطأ قليلاً من الوصول إلى المسجلات . ولكن منذ ثمانينيات القرن الماضي [ 63 اتسعت الفجوة في الأداء بين المعالج والذاكرة. فقد تطورت المعالجات الدقيقة بوتيرة أسرع بكثير من الذاكرة، لا سيما من حيث تردد تشغيلها، ما جعل الذاكرة عائقًا أمام الأداء . ورغم أنه كان من الممكن تقنيًا جعل الذاكرة الرئيسية بأكملها بنفس سرعة وحدة المعالجة المركزية، فقد تم اتباع مسار أكثر جدوى اقتصاديًا: استخدام كمية كبيرة من الذاكرة منخفضة السرعة، مع إضافة ذاكرة تخزين مؤقت صغيرة عالية السرعة لتقليص فجوة الأداء. وقد وفر هذا سعة أكبر بعشرة أضعاف - بنفس السعر - مع انخفاض طفيف فقط في الأداء الكلي.

أولى تطبيقات TLB

كانت أولى الاستخدامات الموثقة لـ TLB على GE 645 [ 64 ] و IBM 360/67 [ 65 ] وكلاهما استخدم ذاكرة ترابطية كـ TLB.

ذاكرة التخزين المؤقت للتعليمات الأولى

كان أول استخدام موثق لذاكرة التخزين المؤقت للتعليمات على جهاز CDC 6600. [ 66 ]

ذاكرة التخزين المؤقت للبيانات الأولى

كان أول استخدام موثق لذاكرة التخزين المؤقت للبيانات على جهاز IBM System/360 Model 85. [ 67 ]

في المعالجات الدقيقة 68k

يتميز معالج 68010 ، الذي صدر عام 1982، بـ"وضع التكرار" الذي يُمكن اعتباره ذاكرة تخزين مؤقتة صغيرة ومخصصة للتعليمات، تُسرّع التكرارات التي تتكون من تعليمتين فقط. أما معالج 68020 ، الذي صدر عام 1984، فقد استبدل ذلك بذاكرة تخزين مؤقتة نموذجية للتعليمات بسعة 256 بايت، ليصبح بذلك أول معالج من سلسلة 68k يتميز بذاكرة تخزين مؤقتة حقيقية مدمجة في الشريحة.

إن معالج 68030 ، الذي تم إصداره في عام 1987، هو في الأساس نواة 68020 مع ذاكرة تخزين مؤقتة إضافية للبيانات بسعة 256 بايت، ووحدة إدارة ذاكرة مدمجة (MMU)، وتقليص حجم العملية، ووضع الاندفاع المضاف لذاكرات التخزين المؤقتة.

The 68040, released in 1990, has split instruction and data caches of four kilobytes each.

The 68060, released in 1994, has the following: 8 KiB data cache (four-way associative), 8 KiB instruction cache (four-way associative), 96-byte FIFO instruction buffer, 256-entry branch cache, and 64-entry address translation cache MMU buffer (four-way associative).

In x86 microprocessors

Example of a motherboard with an i386 microprocessor (33 MHz), 64 KiB cache (25 ns; 8 chips in the bottom left corner), 2 MiB DRAM (70 ns; 8 SIMMs to the right of the cache), and a cache controller (Austek A38202; to the right of the processor)

As the x86 microprocessors reached clock rates of 20 MHz and above in the 386, small amounts of fast cache memory began to be featured in systems to improve performance. This was because the DRAM used for main memory had significant latency, up to 120 ns, as well as refresh cycles. The cache was constructed from more expensive, but significantly faster, SRAMmemory cells, which at the time had latencies around 10–25 ns. The early caches were external to the processor and typically located on the motherboard in the form of eight or nine DIP devices placed in sockets to enable the cache as an optional extra or upgrade feature.

Some versions of the Intel 386 processor could support 16 to 256 KiB of external cache.

With the 486 processor, an 8 KiB cache was integrated directly into the CPU die. This cache was termed Level 1 or L1 cache to differentiate it from the slower on-motherboard, or Level 2 (L2) cache. These on-motherboard caches were much larger, with the most common size being 256 KiB. There were some system boards that contained sockets for the Intel 485Turbocache daughtercard which had either 64 or 128 Kbyte of cache memory.[68][69] The popularity of on-motherboard cache continued through the Pentium MMX era but was made obsolete by the introduction of SDRAM and the growing disparity between bus clock rates and CPU clock rates, which caused on-motherboard cache to be only slightly faster than main memory.

The next development in cache implementation in the x86 microprocessors began with the Pentium Pro, which brought the secondary cache onto the same package as the microprocessor, clocked at the same frequency as the microprocessor.

حظيت ذاكرة التخزين المؤقت المدمجة في اللوحة الأم بشعبية واسعة لفترة طويلة بفضل معالجات AMD K6-2 و AMD K6-III التي كانت لا تزال تستخدم مقبس 7 ، الذي سبق أن استخدمته إنتل مع ذاكرة التخزين المؤقت المدمجة في اللوحة الأم. تضمن معالج K6-III  ذاكرة تخزين مؤقت من المستوى الثاني (L2) مدمجة بسعة 256 كيلوبايت، واستفاد من ذاكرة التخزين المؤقت المدمجة كذاكرة تخزين مؤقت من المستوى الثالث، سُميت L3 (  تم إنتاج لوحات أم بسعة تصل إلى 2 ميجابايت من ذاكرة التخزين المؤقت المدمجة). بعد أن أصبح مقبس  7 قديمًا، اختفت ذاكرة التخزين المؤقت المدمجة في اللوحة الأم من أنظمة x86.

استُخدمت ذاكرة التخزين المؤقت ثلاثية المستويات مرة أخرى لأول مرة مع طرح معالج Intel Xeon MP "Foster Core" [ 70 ] ، حيث أُضيفت ذاكرة التخزين المؤقت من المستوى الثالث (L3) إلى شريحة المعالج. وأصبح من الشائع زيادة أحجام ذاكرة التخزين المؤقت الإجمالية في أجيال المعالجات الأحدث، وفي الآونة الأخيرة (اعتبارًا من عام 2011) أصبح من الشائع العثور على أحجام لذاكرة التخزين المؤقت من المستوى الثالث تصل إلى عشرات الميغابايت. [ 71 ]

قدمت إنتل ذاكرة تخزين مؤقتة من المستوى الرابع مدمجة في نفس المعالج مع بنية هاسويل الدقيقة . تتميز معالجات كريستالويل [ 38 ] هاسويل، المزودة بمعالج رسومات Iris Pro المدمج من إنتل بنسخة GT3e  ، بذاكرة وصول عشوائي ديناميكية مدمجة ( eDRAM ) بسعة 128 ميجابايت على نفس الشريحة. تتم مشاركة ذاكرة التخزين المؤقتة من المستوى الرابع ديناميكيًا بين وحدة معالجة الرسومات ووحدة المعالجة المركزية، وتعمل كذاكرة تخزين مؤقتة ثانوية لذاكرة التخزين المؤقتة من المستوى الثالث لوحدة المعالجة المركزية. [ 39 ]

في معالجات ARM الدقيقة

يحتوي معالج Apple M1 على ذاكرة تخزين مؤقتة من المستوى الأول (L1) بسعة 128 أو 192  كيلوبايت لكل نواة (وهي مهمة لزمن الاستجابة وأداء الخيوط المفردة)، وذلك حسب نوع النواة. تُعد هذه الذاكرة المؤقتة من المستوى الأول كبيرة بشكل استثنائي لأي نوع من المعالجات (وليس فقط لأجهزة الكمبيوتر المحمولة)؛ بينما لا يُعد حجم الذاكرة المؤقتة الإجمالي كبيرًا بشكل استثنائي (حيث أن الحجم الإجمالي أكثر أهمية للإنتاجية) بالنسبة لأجهزة الكمبيوتر المحمولة، وتتوفر أحجام إجمالية أكبر بكثير (مثل L3 أو L4) في أجهزة الكمبيوتر المركزية من IBM.

البحوث الحالية

ركزت تصميمات الذاكرة المؤقتة المبكرة بشكل كامل على التكلفة المباشرة للذاكرة المؤقتة وذاكرة الوصول العشوائي ومتوسط ​​سرعة التنفيذ. أما تصميمات الذاكرة المؤقتة الأحدث فتأخذ في الاعتبار أيضًا كفاءة الطاقة ، وتحمل الأعطال، وأهدافًا أخرى. [ 72 ] [ 73 ]

هناك العديد من الأدوات المتاحة لمهندسي الكمبيوتر للمساعدة في استكشاف المفاضلات بين وقت دورة ذاكرة التخزين المؤقت والطاقة والمساحة؛ يعد محاكي ذاكرة التخزين المؤقت CACTI [ 74 ] ومحاكي مجموعة تعليمات SimpleScalar خيارين مفتوحي المصدر.

ذاكرة تخزين مؤقت متعددة المنافذ

A multi-ported cache is a cache which can serve more than one request at a time. When accessing a traditional cache we normally use a single memory address, whereas in a multi-ported cache we may request N addresses at a time where N is the number of ports that connected through the processor and the cache. The benefit of this is that a pipelined processor may access memory from different phases in its pipeline. Another benefit is that it allows the concept of super-scalar processors through different cache levels.

See also

Notes

  1. The very first paging machine, the FerrantiAtlas[29][30] had no page tables in main memory; there was an associative memory with one entry for every 512 word page frame of core.

References

  1. Torres, Gabriel (September 12, 2007). "How The Cache Memory Works".
  2. Su, Chao; Zeng, Qingkai (2021-06-10). Nicopolitidis, Petros (ed.). "Survey of CPU Cache-Based Side-Channel Attacks: Systematic Analysis, Security Models, and Countermeasures". Security and Communication Networks. 2021: 1–15. doi:10.1155/2021/5559552. ISSN 1939-0122.
  3. Landy, Barry (November 2012). "Atlas 2 at Cambridge Mathematical Laboratory (and Aldermaston and CAD Centre)". Two tunnel diode stores were developed at Cambridge; one, which worked very well, speeded up the fetching of operands, the other was intended to speed up the fetching of instructions. The idea was that most instructions are obeyed in sequence, so when an instruction was fetched that word was placed in the slave store in the location given by the fetch address modulo 32; the remaining bits of the fetch address were also stored. If the wanted word was in the slave it was read from there instead of main memory. This would give a major speedup to instruction loops up to 32 instructions long, and reduced effect for loops up to 64 words.
  4. "IBM System/360 Model 85 Functional Characteristics"(PDF). IBM. June 1968. A22-6916-1.
  5. ليبتاي، جون س. (مارس 1968). "الجوانب الهيكلية لنظام System/360 موديل 85 - الجزء الثاني: الذاكرة المؤقتة" (ملف PDF) . مجلة أنظمة IBM . 7 (1): 15-21 . doi : 10.1147/sj.71.0015 .
  6. سميث، آلان جاي (سبتمبر 1982). "ذاكرات التخزين المؤقت" (ملف PDF) . دراسات الحوسبة . 14 (3): 473-530 . doi : 10.1145/356887.356892 . S2CID 6023466 . 
  7. "يقترح باحثون من شركة IBM أن تغيير بنية الحاسوب هو وسيلة لزيادة الإنتاجية". مجلة الإلكترونيات . 49 (25): 30-31 . ديسمبر 1976.
  8. 1 2 3 4 هينيسي، جون ل.؛ باترسون، ديفيد أ. (2011). هندسة الحاسوب: منهج كمي . إلسيفير. ص. ب-9. ISBN  978-0-12-383872-8.
  9. وايت، بيل؛ دي ليون، سيسيليا أ.؛ وآخرون . (مارس 2016). "مقدمة تقنية عن IBM z13 وIBM z13s" (ملف PDF) . IBM. ص 20.  
  10. "صحيفة حقائق المنتج: تسريع بنية شبكة الجيل الخامس، من النواة إلى الحافة" . غرفة أخبار إنتل (بيان صحفي). شركة إنتل. 25 فبراير 2020. تاريخ الاسترجاع: 18 أبريل 2024. ذاكرة تخزين مؤقتة من المستوى الأول بسعة 32 كيلوبايت/نواة، وذاكرة تخزين مؤقتة من المستوى الثاني بسعة 4.5 ميجابايت لكل مجموعة من 4 أنوية، وذاكرة تخزين مؤقتة مشتركة من المستوى الثالث بسعة تصل إلى 15 ميجابايت.
  11. سميث، رايان. "إنتل تطلق معالج Atom P5900: معالج Atom بتقنية 10 نانومتر لشبكات الوصول اللاسلكي" . AnandTech . مؤرشف من الأصل في 24 فبراير 2020. تم الاطلاع عليه بتاريخ 12 أبريل 2020 .
  12. "تصميم الذاكرة المؤقتة" (ملف PDF) . ucsd.edu . 2010-12-02. الصفحات 10-15 . تاريخ الاسترجاع 2023-01-29 . 
  13. ميغالينغام، راجيش كانان؛ ديبو، كي بي؛ جوزيف، إيب بي؛ فيكرام، فاندانا (2009). تصميم ذاكرة تخزين مؤقتة ترابطية ذات مجموعات مرحلية لتقليل استهلاك الطاقة . المؤتمر الدولي الثاني لـ IEEE حول علوم الحاسوب وتكنولوجيا المعلومات، 2009. الصفحات 551-556 . doi : 10.1109/ICCSIT.2009.5234663 . ISBN  978-1-4244-4519-6. S2CID 18236635 . 
  14. جاهجيردار، سانجيف؛ جورج، فارغيز؛ سودي، إندر؛ ويلز، رايان (2012). "إدارة الطاقة في الجيل الثالث من معمارية Intel Core الدقيقة، والتي كانت تُعرف سابقًا باسم Ivy Bridge" (ملف PDF) . hotchips.org . ص 18. مؤرشف من الأصل (ملف PDF) بتاريخ 29 يوليو 2020. تم الاطلاع عليه بتاريخ 16 ديسمبر 2015 . 
  15. 1 2 سيزنيك، أندريه (1993). "حالة لصالح ذاكرة التخزين المؤقت ثنائية الاتجاه ذات الترابط المائل" . أخبار هندسة الحاسوب ACM SIGARCH . 21 (2): 169-178 . doi : 10.1145/173682.165152 .
  16. 1 2 كوزيراكيس، سي. "المحاضرة 3: تقنيات التخزين المؤقت المتقدمة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 7 سبتمبر 2012.
  17. "البنية الدقيقة" . لقد ثبت أن ذاكرة التخزين المؤقت ذات الارتباطات المنحرفة تتمتع بميزتين رئيسيتين مقارنة بذاكرة التخزين المؤقت التقليدية ذات الارتباطات المحددة.
  18. 1 2 تشانغ، تشينشي؛ تشانغ، شياودونغ؛ يان، يونغ (سبتمبر-أكتوبر 1997). "مخططان سريعان وعاليا الترابط لذاكرة التخزين المؤقت". IEEE Micro . 17 (5): 40-49 . Bibcode : 1997IMicr..17e..40C . doi : 10.1109/40.621212 .
  19. "دليل مبرمج سلسلة ARM Cortex-R" . developer.arm.com . 2014. تم الاطلاع عليه بتاريخ 4 مايو 2023 .
  20. "ذاكرة التخزين المؤقت للتنبؤ بالمسار" .
  21. "ذاكرة التخزين المؤقت الترابطية متعددة الاتجاهات القابلة لإعادة التكوين" . 22 نوفمبر 1994. تم الاسترجاع في 19 يناير 2024 .
  22. "طلب براءة اختراع أمريكي لاختيار طريقة استبدال ذاكرة التخزين المؤقت الديناميكية بناءً على بتات علامة العنوان (طلب رقم 20160350229 صادر في 1 ديسمبر 2016) - بحث براءات الاختراع في جاستيا" . patents.justia.com .
  23. سادلر، ناثان ن.؛ سورين، دانيال ل. (2006). "اختيار مخطط حماية من الأخطاء لذاكرة التخزين المؤقت للبيانات من المستوى الأول للمعالج الدقيق" (ملف PDF) . ص 4. 
  24. باترسون، ديفيد أ.؛ هينيسي، جون ل. (2009). تنظيم وتصميم الحاسوب: واجهة الأجهزة/البرمجيات . مورغان كوفمان. ص 484. ISBN  978-0-12-374493-7.
  25. 1 2 3 كوبرمان، جين (2003). "أساسيات التخزين المؤقت" .
  26. دوجان، بن (2002). "بشأن الكنز" .
  27. كراغون، هارفي ج. (1996). أنظمة الذاكرة والمعالجات ذات البنية المتوازية . جونز وبارتليت ليرنينج. ص 209. ISBN  978-0-86720-474-2.
  28. أونيل، آر دبليو. تجربة استخدام نظام برمجة متعددة بتقسيم الوقت مع أجهزة إعادة توجيه العناوين الديناميكية . وقائع مؤتمر AFIPS للحاسوب 30 (مؤتمر الربيع المشترك للحاسوب، 1967). الصفحات 611-621 . doi : 10.1145/1465482.1465581 . 
  29. سومنر، إف إتش؛ هالي، جي؛ تشينه، إي سي واي (1962). "وحدة التحكم المركزية لحاسوب 'أطلس'". معالجة المعلومات 1962. وقائع مؤتمر الاتحاد الدولي لمعالجة المعلومات. المجلد. وقائع مؤتمر الاتحاد الدولي لمعالجة المعلومات 62. سبارتان. 
  30. كيلبورن، ت.؛ باين، ر.ب.؛ هاوارث، د.ج. (ديسمبر 1961). "مشرف أطلس" . الحواسيب - مفتاح التحكم الكامل في الأنظمة . وقائع المؤتمرات. المجلد 20 وقائع المؤتمر الشرقي المشترك للحواسيب، واشنطن العاصمة: ماكميلان. الصفحات 279-294 .  
  31. كاكسيراس، ستيفانوس؛ روس، ألبرتو (2013). منظور جديد لتماسك ذاكرة التخزين المؤقت الافتراضية الفعال . المؤتمر الدولي الأربعون لهندسة الحاسوب (ISCA). الصفحات 535-547 . CiteSeerX 10.1.1.307.9125 . doi : 10.1145/2485922.2485968 . ISBN   9781450320795. S2CID 15434231 . 
  32. بوتوملي، جيمس (2004). "فهم التخزين المؤقت" . مجلة لينكس . تم الاسترجاع في 2010-05-02 .
  33. تايلور، جورج؛ ديفيز، بيتر؛ فارموالد، مايكل (1990). "شريحة TLB - آلية ترجمة عناوين منخفضة التكلفة وعالية السرعة". أخبار هندسة الحاسوب ACM SIGARCH . 18 (2SI): 355-363 . doi : 10.1145/325096.325161 .
  34. روسكو، تيموثي؛ باومان، أندرو (2009-03-03). "ذاكرة التخزين المؤقت وذاكرة الترجمة السريعة المتقدمة لأنظمة التشغيل (263-3800-00L)" (ملف PDF) . systems.ethz.ch . مؤرشف من الأصل (ملف PDF) بتاريخ 2011-10-07 . تم الاطلاع عليه بتاريخ 2016-02-14 .
  35. لين، جيانغ؛ لو، تشينغدا؛ دينغ، شياونينغ؛ تشانغ، تشاو؛ تشانغ، شياودونغ؛ سادايابان، ب. (2008). اكتساب رؤى حول تقسيم ذاكرة التخزين المؤقت متعددة النوى: سد الفجوة بين المحاكاة والأنظمة الحقيقية . المؤتمر الدولي الرابع عشر لهندسة الحواسيب عالية الأداء، معهد مهندسي الكهرباء والإلكترونيات. سولت ليك سيتي، يوتا. الصفحات 367-378 . doi : 10.1109/HPCA.2008.4658653 . 
  36. "رسالة إلى جيانغ لين" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 21-01-2024.
  37. جوبي، نورمان ب. (مايو 1990). "تحسين أداء ذاكرة التخزين المؤقت ذات التعيين المباشر بإضافة ذاكرة تخزين مؤقت صغيرة ذات ارتباط كامل ومخازن جلب مسبق". وقائع المؤتمر الدولي السنوي السابع عشر حول هندسة الحاسوب . المؤتمر الدولي السنوي السابع عشر حول هندسة الحاسوب، 28-31 مايو 1990. سياتل، واشنطن، الولايات المتحدة الأمريكية. الصفحات 364-373 . doi : 10.1109/ISCA.1990.134547 . 
  38. 1 2 "المنتجات (كريستال ويل سابقًا)" . إنتل . مؤرشف من الأصل بتاريخ 29-09-2013 . تم الاطلاع عليه بتاريخ 15-09-2013 .
  39. 1 2 "مراجعة بطاقة الرسومات Intel Iris Pro 5200: اختبار معالج Core i7-4950HQ" . AnandTech . تاريخ الاسترجاع: 16 سبتمبر 2013 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  40. كاتريس، إيان (2 سبتمبر 2015). "إطلاق معالجات إنتل سكاي ليك للأجهزة المحمولة والمكتبية، مع تحليل معماري" . أناند تك. مؤرشف من الأصل في 4 سبتمبر 2015.
  41. شيمبي، أناند لال (20 نوفمبر 2000). "ذاكرة التخزين المؤقت لمعالج بنتيوم 4 - إنتل بنتيوم 4 بسرعة 1.4 جيجاهرتز و1.5 جيجاهرتز" . أناند تك . مؤرشف من الأصل في 26 مايو 2010. تم الاطلاع عليه في 30 نوفمبر 2015 .   
  42. 1 2 فوغ، أغنر (19 فبراير 2014). "البنية الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا: دليل تحسين لمبرمجي لغة التجميع ومصممي المترجمات" (ملف PDF) . agner.org . تاريخ الاسترجاع: 21 مارس 2014 .
  43. كانتر، ديفيد (26 أغسطس 2010). "معمارية بولدوزر الدقيقة من AMD - نظام الذاكرة الفرعي (تابع)" . تقنيات العالم الحقيقي .
  44. كانتر، ديفيد (25 سبتمبر 2010). "معمارية ساندي بريدج الدقيقة من إنتل - فك تشفير التعليمات وذاكرة التخزين المؤقت للعمليات الدقيقة" . تقنيات العالم الحقيقي .
  45. 1 2 سولومون، باروخ؛ مندلسون، آفي؛ أورنشتاين، دورون؛ ألموغ، يواف؛ رونين، روني (أغسطس 2001). "ذاكرة التخزين المؤقت للعمليات الدقيقة: واجهة أمامية واعية باستهلاك الطاقة لمجموعة تعليمات متغيرة الطول" (ملف PDF) . ISLPED'01: وقائع الندوة الدولية لعام 2001 حول الإلكترونيات والتصميم منخفض الطاقة . الندوة الدولية لعام 2001 حول الإلكترونيات والتصميم منخفض الطاقة (ISLPED'01)، 6-7 أغسطس 2001. هنتنغتون بيتش، كاليفورنيا، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة . الصفحات 4-9 . doi : 10.1109/LPE.2001.945363 . ISBN  978-1-58113-371-4. S2CID 195859085 . تم الاسترجاع بتاريخ 2013-10-06 . 
  46. 1 2 شيمبي، أناند لال (5 أكتوبر 2012). "تحليل معمارية هاسويل من إنتل" . أناند تك . تم الاسترجاع في 20 أكتوبر 2013 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  47. كاتريس، إيان (18 أغسطس 2016). "الكشف عن بنية AMD Zen الدقيقة: مُجدولات مزدوجة، وذاكرة تخزين مؤقتة للعمليات الدقيقة، وهيكل الذاكرة" . AnandTech . تم الاطلاع عليه بتاريخ 3 أبريل 2017 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  48. قو، ليون؛ موتياني ، ديبتي (أكتوبر 2003). "تتبع ذاكرة التخزين المؤقت" (PDF) . تم الاسترجاع 2013/10/06 .
  49. نيو، كون (28 مايو 2015). "كيف تعمل ذاكرة التخزين المؤقت لتعليمات الهدف المتفرع (BTIC)؟" . مؤرشف من الأصل في 7 أبريل 2018. تم الاطلاع عليه في 7 أبريل 2018 .
  50. "ذاكرة التخزين المؤقت الذكية من إنتل: عرض توضيحي" . إنتل . تم الاطلاع عليه بتاريخ 26 يناير 2012 .
  51. "نظرة داخلية على بنية Intel Core الدقيقة وتقنية الوصول الذكي إلى الذاكرة" . Intel . 2006. ص 5. مؤرشف من النسخة الأصلية (PDF) بتاريخ 29-12-2011 . تم الاطلاع عليه بتاريخ 26-01-2012 . 
  52. "مراجعة معالج الرسوميات Intel Iris Pro 5200: اختبار معالج Core i7-4950HQ" . AnandTech . تاريخ الاسترجاع: 25 فبراير 2014 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  53. تيان، تيان؛ شيه، تشيو-بي (2012-03-08). "تقنيات البرمجيات لأنظمة متعددة النوى ذات ذاكرة تخزين مؤقتة مشتركة" . إنتل . تم الاسترجاع في 24 نوفمبر 2015 .
  54. "ورشة عمل كورنيل الافتراضية > مقدمة إلى بنى المجموعات المتقدمة > الذاكرة، ذاكرة التخزين المؤقت، والوصلات البينية > ذاكرة التخزين المؤقت من المستوى الأخير" .
  55. ليمبل، أوديد (28 يوليو 2013). "الجيل الثاني من عائلة معالجات إنتل كور: إنتل كور i7 وi5 وi3" (ملف PDF) . hotchips.org . الصفحات 7-10 ، 31-45 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 29 يوليو 2020. تاريخ الاسترجاع: 21 يناير 2014 . 
  56. تشين، ج. برادلي؛ بورغ، أنيتا؛ جوبي، نورمان ب. (1992). "دراسة قائمة على المحاكاة لأداء ذاكرة الترجمة السريعة" . أخبار هندسة الحاسوب من ACM SIGARCH . 20 (2): 114-123 . doi : 10.1145 /146628.139708 .
  57. "شرح ذاكرة التخزين المؤقت L1 و L2" . amecomputers.com . مؤرشف من الأصل بتاريخ 14 يوليو 2014. تم الاطلاع عليه بتاريخ 9 يونيو 2014 .
  58. 1 2 3 تشنغ، يينغ؛ ديفيس، برايان تي؛ جوردان، ماثيو (10-12 مارس 2004). تقييم أداء التسلسلات الهرمية لذاكرة التخزين المؤقت الحصرية (ملف PDF) . ندوة IEEE الدولية حول تحليل أداء الأنظمة والبرمجيات. أوستن، تكساس، الولايات المتحدة الأمريكية. الصفحات 89-96 . doi : 10.1109/ISPASS.2004.1291359 . ISBN  0-7803-8385-0أُرشف من النسخة الأصلية (PDF) بتاريخ 13 أغسطس 2012. تم الاطلاع عليه بتاريخ 9 يونيو 2014 .
  59. جليل، عامر؛ إريك بورش؛ بهاندرو، ماليني؛ ستيلي الابن، سيمون سي؛ إيمر، جويل (27-09-2010). "تحقيق أداء ذاكرة التخزين المؤقت غير الشاملة باستخدام ذاكرات التخزين المؤقت الشاملة" (ملف PDF) . jaleels.org . تاريخ الاسترجاع: 09-06-2014 .
  60. "AMD K8" . Sandpile.org . مؤرشف من الأصل بتاريخ 15 مايو 2007. تم الاطلاع عليه بتاريخ 2 يونيو 2007 .
  61. "دليل المرجع التقني لمعالجات Cortex-R4 و Cortex-R4F" . arm.com . تم الاطلاع عليه بتاريخ 28-09-2013 .
  62. "دليل المرجع الفني لوحدة التحكم في ذاكرة التخزين المؤقت L210" . arm.com . تم الاطلاع عليه بتاريخ 28-09-2013 .
  63. ماهاباترا، نيهار ر.؛ فينكاتراو، بالاكريشنا (1999). "عنق الزجاجة بين المعالج والذاكرة: المشاكل والحلول" (ملف PDF) . كروس رودز . 5 (3): 2–es. doi : 10.1145/357783.331677 . S2CID 11557476. مؤرشف من الأصل (ملف PDF) بتاريخ 2014-03-05 . تم الاطلاع عليه بتاريخ 2013-03-05 . 
  64. دليل نظام GE-645 (ملف PDF) . جنرال إلكتريك . يناير 1968. تم الاطلاع عليه بتاريخ 10 يوليو 2020 .
  65. الخصائص الوظيفية لنظام IBM System/360 موديل 67 (ملف PDF) . الطبعة الثالثة. IBM . فبراير 1972. GA27-2719-2.
  66. ثورنتون، جيمس إي. (أكتوبر 1964). "التشغيل المتوازي في بيانات التحكم 6600" (ملف PDF) . وقائع مؤتمر الحاسوب المشترك لخريف 27-29 أكتوبر 1964، الجزء الثاني: أنظمة الحاسوب فائقة السرعة .
  67. آي بي إم (يونيو 1968). الخصائص الوظيفية لنظام آي بي إم سيستم/360 موديل 85 (ملف PDF) (الطبعة الثانية ). A22-6916-1. 
  68. تشين، آلان، "وحدة المعالجة المركزية 486: على مسار طيران عالي الأداء"، شركة إنتل، حلول الحواسيب الصغيرة، نوفمبر/ديسمبر 1990، ص 2
  69. رايلي، جيمس، خيرادبير، شيرفين، "نظرة عامة على تصميم الأجهزة عالية الأداء باستخدام وحدة المعالجة المركزية 486"، شركة إنتل، حلول الحواسيب الصغيرة، نوفمبر/ديسمبر 1990، صفحة 20
  70. "عائلة معالجات Intel Xeon Foster MP الدقيقة" . CPU-World . مؤرشف من الأصل في 15 يوليو 2023.
  71. "معالجات إنتل زيون من عائلة E7" . إنتل® ARK (مواصفات المنتج) . إنتل . مؤرشف من الأصل بتاريخ 14-10-2013 . تم الاطلاع عليه بتاريخ 10-10-2013 .
  72. سالي أدي (نوفمبر 2009). "تصميم رقاقة إلكترونية يحبط هجومًا خفيًا على البيانات" . مجلة IEEE Spectrum . 46 (11): 16. doi : 10.1109/MSPEC.2009.5292036 . S2CID 43892134 . 
  73. وانغ، تشنغ هونغ؛ لي، روبي ب. (8-12 نوفمبر 2008). بنية ذاكرة تخزين مؤقت جديدة ذات أداء وأمان مُحسّنين (ملف PDF) . المؤتمر الدولي السنوي الحادي والأربعون لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن ​​الحوسبة حول البنية الدقيقة. الصفحات 83-93 . مؤرشف (ملف PDF) من الأصل في 6 مارس 2012. 
  74. "الصبار" . مختبرات إتش بي . مؤرشف من الأصل بتاريخ 29-01-2023 . تم الاسترجاع بتاريخ 29-01-2023 .