الذاكرة التفاعلية

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

تحفيز

ذرية بين معاملتين متوازيتين مع وجود تعارض

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

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

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

class Account : def __init__ ( self , id : int , balance : float , name : str ) -> None : self . id : int = id self . balance : float = balance self . name : str = nameدالة تحويل الأموال ( الحساب_المصدر : الحساب ، الحساب_الوجهة : الحساب ، المبلغ : عدد عشري ) -> لا شيء : """ تحويل  الأموال من حساب إلى آخر.  """ مع المعاملة (): رصيد_الحساب_المصدر -= المبلغ رصيد_الحساب_الوجهة + = المبلغ

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

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

الأجهزة مقابل البرامج

ذاكرة معاملات الأجهزة باستخدام بتات القراءة والكتابة

The abstraction of atomicity in transactional memory requires a hardware mechanism to detect conflicts and undo any changes made to shared data.[3] Hardware transactional memory systems may comprise modifications in processors, cache and bus protocol to support transactions.[4][5][6][7][8] Speculative values in a transaction must be buffered and remain unseen by other threads until commit time. Large buffers are used to store speculative values while avoiding write propagation through the underlying cache coherence protocol. Traditionally, buffers have been implemented using different structures within the memory hierarchy such as store queues or caches. Buffers further away from the processor, such as the L2 cache, can hold more speculative values (up to a few megabytes). The optimal size of a buffer is still under debate due to the limited use of transactions in commercial programs.[3] In a cache implementation, the cache lines are generally augmented with read and write bits. When the hardware controller receives a request, the controller uses these bits to detect a conflict. If a serializability conflict is detected from a parallel transaction, then the speculative values are discarded. When caches are used, the system may introduce the risk of false conflicts due to the use of cache line granularity.[3]Load-link/store-conditional (LL/SC) offered by many RISC processors can be viewed as the most basic transactional memory support; however, LL/SC usually operates on data that is the size of a native machine word, so only single-word transactions are supported.[4] Although hardware transactional memory provides maximal performance compared to software alternatives, limited use has been seen at this time.

Software transactional memory provides transactional memory semantics in a software runtime library or the programming language,[9] and requires minimal hardware support (typically an atomic compare and swap operation, or equivalent). As the downside, software implementations usually come with a performance penalty, when compared to hardware solutions. Hardware acceleration can reduce some of the overheads associated with software transactional memory.

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

تاريخ

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

طبّقت شركة صن مايكروسيستمز ذاكرة معاملاتية مادية وشكلاً محدوداً من تعدد الخيوط التخميني في معالجها المتطور روك . أثبت هذا التطبيق إمكانية استخدامه في تقنية حذف الأقفال وأنظمة ذاكرة المعاملات الهجينة الأكثر تعقيداً، حيث تُدار المعاملات بمزيج من المكونات المادية والبرمجية. أُلغي مشروع معالج روك في عام ٢٠٠٩، قبيل استحواذ شركة أوراكل عليه؛ ورغم عدم طرح المنتجات الفعلية في الأسواق، فقد توفر عدد من النماذج الأولية للباحثين. [ ١١ ]

في عام 2009، اقترحت AMD تقنية Advanced Synchronization Facility (ASF)، وهي مجموعة من امتدادات x86 التي توفر دعمًا محدودًا جدًا لذاكرة المعاملات على مستوى الأجهزة. كان الهدف هو توفير عناصر أساسية للأجهزة يمكن استخدامها للمزامنة على مستوى أعلى، مثل ذاكرة المعاملات البرمجية أو الخوارزميات غير المقفلة. مع ذلك، لم تُعلن AMD بعدُ ما إذا كانت ستستخدم ASF في منتجاتها، وإن كان الأمر كذلك، ففي أي إطار زمني. [ 11 ]

أعلنت شركة IBM في عام 2011 أن معالج Blue Gene/Q يدعم كلاً من الذاكرة المعاملاتية والمعالجة المتعددة التخمينية. يمكن تهيئة الذاكرة المعاملاتية بنمطين: الأول غير مرتب وأحادي الإصدار، حيث يؤدي أي كتابة من معاملة إلى تعارض مع أي معاملات أخرى تقرأ نفس عنوان الذاكرة. أما النمط الثاني فهو للمعالجة المتعددة التخمينية، ويوفر ذاكرة معاملاتية مرتبة ومتعددة الإصدارات. يمكن أن تحتوي الخيوط التخمينية على إصدارات مختلفة من نفس عنوان الذاكرة، ويحتفظ التنفيذ المادي بسجل عمر كل خيط. يمكن للخيوط الأحدث الوصول إلى البيانات من الخيوط الأقدم (وليس العكس)، وتعتمد عمليات الكتابة إلى نفس العنوان على ترتيب الخيوط. في بعض الحالات، قد تؤدي التبعيات بين الخيوط إلى إجهاض الإصدارات الأحدث. [ 11 ]

تتوفر امتدادات التزامن المعاملاتي (TSX) من إنتل في بعض معالجات سكاي ليك . وقد طُبقت سابقًا في معالجات هاسويل وبرودويل أيضًا، ولكن تبين أن التطبيقين كانا معيبين، ما أدى إلى تعطيل دعم TSX. يصف معيار TSX واجهة برمجة تطبيقات الذاكرة المعاملاتية لاستخدامها من قِبل مطوري البرامج، ولكنه لا يتضمن تفاصيل حول التنفيذ التقني. [ 11 ] يحتوي معمارية ARM على امتداد مماثل. [ 12 ]

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

تحتوي لغة C++ على "مواصفات تقنية للذاكرة المعاملاتية" (TM TS)، وهي نسخة تجريبية من اللغة تُطبّق الذاكرة المعاملاتية كميزة أساسية. [ 13 ] تُقدّم هذه المواصفات "الكتل الذرية" (إما أن تُنفّذ جميع التعليمات أو لا يحدث شيء) و"الكتل المتزامنة" (تُنفّذ جميعها بترتيب واحد كامل). كما تُقدّم الكلمات المفتاحية التالية:

  • atomic_cancel: يُعلن عن كتلة ذرية تتراجع عند حدوث استثناء.
  • atomic_commit: يُعلن عن كتلة ذرية تُنفذ عند حدوث استثناء.
  • atomic_noexcept: يُعلن عن كتلة ذرية تُجهض عند حدوث استثناء.
  • synchronizedيُعلن هذا عن كتلة متزامنة تُنفذ بترتيب كلي واحد مع جميع الكتل المتزامنة. قارن ذلك بكتل جافاsynchronized ، التي تحتوي على "كائن مراقبة" أو "قفل داخلي"، حيث لا يمكن إلا لخيط واحد تنفيذ جزء محدد من التعليمات البرمجية.
  • transaction_safe: يُعلن عن دالة لتكون آمنة للمعاملات.
  • transaction_safe_dynamic: يُعلن عن دالة افتراضية على أنها آمنة للمعاملات.

Progress on the development of the Transactional Memory TS has stalled as of 2026, while the last known working draft was a revision made in 2022.[14]

Available implementations

See also

References

  1. Harris, Tim; Larus, James; Rajwar, Ravi (2010-06-02). "Transactional Memory, 2nd edition". Synthesis Lectures on Computer Architecture. 5 (1): 1–263. doi:10.2200/S00272ED1V01Y201006CAC011. ISSN 1935-3235.
  2. 1234"Transactional Memory: History and Development". Kukuruku Hub. Retrieved 2016-11-16.
  3. 123Solihin, Yan (2016). Fundamentals of Parallel Multicore Architecture. Berkeley, California: Chapman & Hall. pp. 287–292. ISBN 978-1-4822-1118-4.
  4. 1 2 هيرليهي، موريس؛ موس، ج. إليوت ب. (1993). "الذاكرة التفاعلية: الدعم المعماري لهياكل البيانات غير المقفلة" (ملف PDF) . وقائع الندوة الدولية العشرين حول هندسة الحاسوب (ISCA) . الصفحات 289-300 . 
  5. ستون، جيه إم؛ ستون، إتش إس؛ هايدلبرغر، بي؛ توريك، جيه. (1993). "الحجوزات المتعددة وتحديث أوكلاهوما". مجلة IEEE للتقنيات المتوازية والموزعة: الأنظمة والتطبيقات . 1 (4): 58-71 . doi : 10.1109/88.260295 . S2CID 11017196 . 
  6. هاموند، ل؛ وونغ، ف؛ تشين، م؛ كارلستروم، ب د؛ ديفيس، ج د؛ هيرتزبيرغ، ب؛ برابهو، م ك؛ هونغو ويجايا؛ كوزيراكيس، س؛ أولوكوتون، ك. (2004). "تماسك واتساق الذاكرة التفاعلية". وقائع الندوة الدولية السنوية الحادية والثلاثين حول هندسة الحاسوب (ISCA) . ص 102-113 . doi : 10.1109/ISCA.2004.1310767 . 
  7. أنانيان، سي إس؛ أسانوفيتش، ك؛ كوزماول، بي سي؛ ليسرسون، سي إي؛ لي، إس. (2005). "ذاكرة المعاملات غير المحدودة". المؤتمر الدولي الحادي عشر حول هندسة الحواسيب عالية الأداء . الصفحات 316-327 . doi : 10.1109/HPCA.2005.41 . ISBN  0-7695-2275-0.
  8. "LogTM: ذاكرة المعاملات القائمة على السجلات" (PDF) . WISC.
  9. "لغة البرمجة التفاعلية ATOMOΣ" (ملف PDF) . جامعة ستانفورد. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 21 مايو 2008. تم الاطلاع عليه بتاريخ 15 يونيو 2009 .
  10. أودايرا، ر.؛ كاستانوس، ج. ج.؛ ناكايكي، ت. (2013). "هل تختلف برامج C وجافا في قابلية التوسع على ذاكرة المعاملات المادية؟". ندوة IEEE الدولية لعام 2013 حول توصيف أعباء العمل (IISWC) . ص 34. doi : 10.1109/IISWC.2013.6704668 . ISBN  978-1-4799-0555-3.
  11. 1 2 3 4 5 ديفيد كانتر (21 أغسطس 2012). "تحليل ذاكرة هاسويل التفاعلية" . تقنيات العالم الحقيقي . تم الاسترجاع في 19 نوفمبر 2013 .
  12. "أرم تُصدر SVE2 وTME لبنية A-profile - مدونة المعالجات - المعالجات - مجتمع أرم" . community.arm.com . ١٨ أبريل ٢٠١٩. تاريخ الاطلاع: ٢٥ مايو ٢٠١٩ .
  13. "Transactional memory (TM TS)". cppreference.com. Retrieved 10 September 2025.
  14. Michael Wong (14 October 2022). "Working Draft, Extensions to C++ for Transactional Memory Version 2"(PDF). open-std.org. WG21.
  15. "Transactional Memory Extension (TME) intrinsics". Retrieved 2020-05-05.
  16. "IBM plants transactional memory in CPU". EE Times.
  17. Brian Hall; Ryan Arnold; Peter Bergner; Wainer dos Santos Moschetta; Robert Enenkel; Pat Haugen; Michael R. Meissner; Alex Mericas; Philipp Oehler; Berni Schiefer; Brian F. Veale; Suresh Warrier; Daniel Zabawa; Adhemerval Zanella (2014). Performance Optimization and Tuning Techniques for IBM Processors, including IBM POWER8(PDF). IBM Redbooks. pp. 37–40. ISBN 978-0-7384-3972-3.
  18. Wei Li, IBM XL compiler hardware transactional memory built-in functions for IBM AIX on IBM POWER8 processor-based systems
  19. "Power ISA Version 3.1". openpowerfoundation.org. 2020-05-01. Retrieved 2020-10-10.
  20. Java on a 1000 Cores – Tales of Hardware/Software CoDesign on YouTube
  21. "Control.Monad.STM". hackage.haskell.org. Retrieved 2020-02-06.
  22. "STMX Homepage".
  23. Wong, Michael. "Transactional Language Constructs for C++"(PDF). Retrieved 12 Jan 2011.
  24. "Brief Transactional Memory GCC tutorial".
  25. "C Dialect Options - Using the GNU Compiler Collection (GCC)".
  26. "TransactionalMemory - GCC Wiki".
  27. Rigo, Armin. "Using All These Cores: Transactional Memory in PyPy". europython.eu. Retrieved 7 April 2015.
  28. "picotm - Portable Integrated Customizable and Open Transaction Manager".
  29. "Concurrent::TVar".
  30. Pizlo, Phil (2024-03-15). "Bringing Verse Transactional Memory Semantics to C++". Retrieved 2024-08-18.

Further reading

  • هاريس، تيم؛ لاروس، جيمس ر.؛ راجوار، رافي (ديسمبر 2010)، الذاكرة التفاعلية، الطبعة الثانية ، محاضرات توليفية في هندسة الحاسوب، المجلد  5، مورغان وكلايبول، الصفحات 1-263 ، doi : 10.2200/S00272ED1V01Y201006CAC011 
  • ماكيني، بول إي.؛ مايكل، ماجد م.؛ تريبلت، جوش؛ والبول، جوناثان (يوليو 2010). "لماذا قد لا يكون العشب أكثر خضرة في الجانب الآخر: مقارنة بين الذاكرة المُؤمِّنة والذاكرة التبادلية". مجلة SIGOPS لأنظمة التشغيل ، 44 (3). نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM : 93-101 . doi : 10.1145/1842733.1842749 . ISSN 0163-5980 . S2CID 1917393 .  
  • ديف دايس، يوسي ليف، مارك موير، دان نوسباوم، ومارك أولسزوسكي. (2009). "تجربة مبكرة مع تطبيق ذاكرة معاملات الأجهزة التجارية". تقرير فني من شركة صن مايكروسيستمز (60 صفحة) SMLI TR-2009-180. نُشرت نسخة مختصرة منه في مؤتمر ASPLOS'09، doi : 10.1145/1508244.1508263
  • آمي وانغ، ماثيو غوديت، بينغ وو، خوسيه نيلسون أمارال، مارتن أوماخت، كريستوفر بارتون، راؤول سيلفيرا، وماجد مايكل. " تقييم دعم أجهزة Blue Gene/Q للذاكرة التفاعلية. مؤرشف في 27 يونيو 2013 على موقع Wayback Machine ". ضمن وقائع المؤتمر الدولي الحادي والعشرين حول البنى المتوازية وتقنيات الترجمة، الصفحات  127-136. ACM، 2012.
  • جاكوبي، سي.، سليجل، تي.، وجرينر، دي. (ديسمبر 2012). " بنية الذاكرة المعاملاتية وتنفيذها لنظام IBM System z. مؤرشف في 4 مارس 2016 على موقع Wayback Machine ". في: Microarchitecture (MICRO)، المؤتمر الدولي السنوي الخامس والأربعون لعام 2012 لـ IEEE/ACM (ص  25-36). IEEE.
  • هارولد دبليو. كاين، ماجد إم. مايكل، براد فراي، كاثي ماي، ديريك ويليامز، وهونغ لي. "دعم معماري قوي للذاكرة المعاملاتية في بنية باور". في وقائع المؤتمر الدولي السنوي الأربعين لهندسة الحاسوب ISCA '13، الصفحات  225-236، ACM، 2013. doi : 10.1145/2485922.2485942