विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ False Sharing और cache line

हाल में एक code देखा जिसमें alignment manually की गई थी, तो अध्ययन करते हैं कि alignment न करने पर क्या असर पड़ता है?

template <typename T>
class AtomicWithPadding {
 private:
  static constexpr int kCacheLineSize = 64;
  uint8_t padding_before[kCacheLineSize];

 public:
  std::atomic<T> value;

 private:
  uint8_t padding_after[kCacheLineSize];
};

यहाँ सबके interviews का ज़रूरी topic आ जाता है:

  • Cache line

इसके आधार पर नीचे कुछ interview प्रश्न दिए हैं, क्या आप उत्तर दे सकते हैं?

  • Cache line क्या है?
  • MESI protocol क्या है?
  • False sharing क्या है?
  • C++ में False sharing से बचना कैसे सुनिश्चित करें?
  • False sharing से बचने के क्या फ़ायदे हैं?
  • क्या आप जानते हैं C++17 के बाद इस समस्या को हल करने के लिए कौन से दो variables दिए गए हैं?

इसके बाद, एक performance test ढूंढा, जिसका implementation मोटे तौर पर ऐसा है:

  • 4 variables define करें, a, b, c, d, जिन्हें multiple threads share करते हैं
  • दूसरा, इन चार variables को align करें, फिर n threads खोलकर schedule करें।

नीचे benchmark है:

------------------------------------------------------------------
Benchmark                        Time             CPU   Iterations
------------------------------------------------------------------
singleThread                  4.05 ms         4.04 ms          133
directSharing/real_time       8.78 ms        0.069 ms           77
falseSharing/real_time        8.81 ms        0.083 ms           74
noSharing/real_time           1.16 ms        0.071 ms          578

देखा जा सकता है कि noSharing ने बहुत अच्छे परिणाम दिए! Cache hit rate बहुत बढ़ गया, बेशक यहाँ perf से analyze करना और भी बेहतर होगा, L1 cache miss देखे जा सकते हैं।

उपरोक्त उत्तर 知识星球 में अपडेट किए जा चुके हैं, साथ मिलकर चर्चा करने के लिए स्वागत है, comments में बात करें, धन्यवाद~

संबंधित विषय

टिप्पणियाँ