سؤال

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

يبدو أنها طريقة واعدة لاستبدال الأقفال وكائنات المزامنة ولكن لا يمكنني العثور على العديد من الشهادات.هل لدى أي شخص هنا أي مساهمة؟

هل كانت مفيدة؟

المحلول

لم أستخدم مترجم Intel، ومع ذلك، كان لدى Herb Sutter بعض التعليقات المثيرة للاهتمام عليه ...

من سوتر يتحدث:مستقبل التزامن

هل ترى اهتمامًا كبيرًا بذاكرة المعاملات واستخدامها، أم أن المفهوم يصعب على معظم المطورين فهمه؟

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

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

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

نصائح أخرى

دكتور.كان لدى Dobb's مقال حول هذا المفهوم العام الماضي:برمجة المعاملات بواسطة كالوم جرانت - http://www.ddj.com/cpp/202802978

ويتضمن بعض الأمثلة والمقارنات والاستنتاجات باستخدام مكتبة الأمثلة الخاصة به.

لقد قمت ببناء مكتبة STM التوافقية على رأس بعض أفكار البرمجة الوظيفية.لا يتطلب أي دعم للمترجم (باستثناء أنه يستخدم C++ 17)، ولا يجلب بناء جملة جديدًا.بشكل عام، فهو يعتمد واجهة مكتبة اس تي ام من هاسكل.

لذا فإن مكتبتي تتمتع بعدة خصائص جميلة:

  • اندماجي مونادي.كل معاملة عبارة عن عملية حسابية داخل الموناد المخصص المسمى STML.يمكنك دمج المعاملات الأحادية في المزيد من المعاملات الأحادية الكبيرة.
  • يتم فصل المعاملات عن نموذج البيانات.يمكنك إنشاء نموذج البيانات المتزامن الخاص بك باستخدام متغيرات المعاملات (TVars) وتشغيل المعاملات عليه.
  • هنالك retry الموحد.يسمح لك بإعادة تشغيل الصفقة.مفيد جدًا لبناء معاملات قصيرة ومفهومة.
  • هناك مجموعات أحادية مختلفة للتعبير عن العمليات الحسابية قريبًا.
  • هنالك Context.يجب تشغيل كل عملية حسابية في سياق معين، وليس في وقت التشغيل العالمي.لذلك يمكن أن يكون لديك العديد من السياقات المختلفة إذا كنت بحاجة إلى عدة مجموعات STM مستقلة.
  • التنفيذ بسيط للغاية من الناحية المفاهيمية.على الأقل، التنفيذ المرجعي كان الأمر كذلك في Haskell، لكن كان علي إعادة اختراع عدة طرق لتطبيق C++ بسبب عدم وجود دعم جيد للبرمجة الوظيفية.

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

لإثبات عملها، لقد قمت بحل المشكلة Dining Philosophers مهمة.يمكنك العثور على الكود في الروابط أدناه.معاملة العينة:

STML<bool> takeFork(const TVar<Fork>& tFork)
{
    STML<bool> alreadyTaken = withTVar(tFork, isForkTaken);
    STML<Unit> takenByUs    = modifyTVar(tFork, setForkTaken);
    STML<bool> success      = sequence(takenByUs, pure(true));
    STML<bool> fail         = pure(false);
    STML<bool> result       = ifThenElse(alreadyTaken, fail, success);
    return result;
};

تحديثلقد كتبت البرنامج التعليمي، يمكنك العثور عليه هنا.

أعلنت شركة Sun Microsystems أنها ستطلق معالجًا جديدًا في العام المقبل، يحمل الاسم الرمزي Rock، والذي يتمتع بدعم الأجهزة لذاكرة المعاملات.سيكون لها بعض القيود، ولكنها خطوة أولى جيدة من شأنها أن تسهل على المبرمجين استبدال الأقفال/كائنات المزامنة بالمعاملات و نتوقع الأداء الجيد للخروج منه.

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

لمزيد من المعلومات والإعلانات من Sun حول موسيقى الروك وذاكرة المعاملات بشكل عام، هذا وصلة.

الإلزامي دخول ويكيبيديا :)

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

في بعض الحالات أستطيع أن أرى أن هذا مفيد وحتى ضروري.

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

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

-آدم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top