Memory Consistency Model
মেমরি কনসিস্টেন্সি মডেল
একাধিক ভিন্ন memory address-এ করা লেখা অন্য core-রা কোন ক্রমে দেখবে, তার চুক্তি — cache coherence-এর থেকে আলাদা, যা একটা single address-এর গল্প বলে।
also: memory ordering, TSO, sequential consistency, consistency model
Coherence নিশ্চিত করে একটা address-এর সব কপি সামঞ্জস্যপূর্ণ। Consistency নিয়ন্ত্রণ করে একাধিক ভিন্ন address-এর লেখার মধ্যে আপেক্ষিক দৃশ্যমানতার ক্রম — সম্পূর্ণ ভিন্ন প্রশ্ন।
Sequential Consistency (SC): সব operation যেন একটা একক global interleaved order-এ ঘটেছে, প্রতিটা core-এর নিজের program order মেনে। স্বজ্ঞাত কিন্তু বাস্তবায়নে ব্যয়বহুল — বাস্তব হার্ডওয়্যার ডিফল্টভাবে দেয় না।
x86 TSO (Total Store Order): প্রায় SC, একটা exception সহ — store buffer-এর কারণে store→load reordering অনুমোদিত (একটা write-এর পরের read আগে চলে যেতে পারে, ভিন্ন address হলে)। Store→Store, Load→Load, Load→Store সংরক্ষিত।
ARM/RISC-V (weak model): ডিফল্টভাবে প্রায় সব reordering
অনুমোদিত (Store→Store সহ) — explicit dmb/barrier ছাড়া
order-এর গ্যারান্টি নেই।
C++11 সমাধান — portable, hardware-independent:
flag.store(1, std::memory_order_release); /* producer */
while (flag.load(std::memory_order_acquire) == 0); /* consumer */
release/acquire জোড়া একটা happens-before edge তৈরি করে
— compiler প্রতিটা target-এ সঠিক instruction বসায় (x86-এ
প্রায়ই কিছুই লাগে না, ARM-এ dmb)। ডিফল্ট memory_order_seq_cst
সবচেয়ে নিরাপদ, relaxed শুধু pure counter-এ যথেষ্ট।