সিপিইউ (এটির মেমরি নিয়ন্ত্রক বিশেষত) মেমরিটি পরিবর্তিত হয় না সেটির সুবিধা নিতে পারে
সুবিধাটি হ'ল, ডেটা অ্যাক্সেস করা হয়ে গেলে এই ঘটনাটি মেম্বার নির্দেশাবলী ব্যবহার করা থেকে সংকলককে সংরক্ষণ করে ।
একটি মেমরি বাধা, যা মেম্বার, মেমরি বেড়া বা বেড়া নির্দেশ হিসাবেও পরিচিত, এটি এক ধরণের বাধা নির্দেশ যা কোনও কেন্দ্রীয় প্রক্রিয়াকরণ ইউনিট (সিপিইউ) বা সংকলক বাধা নির্দেশের আগে এবং পরে জারি করা মেমরি অপারেশনগুলিতে অর্ডারিং সীমাবদ্ধতা প্রয়োগ করে। এর অর্থ সাধারণত যে বাধার আগে কিছু অপারেশন করার গ্যারান্টিযুক্ত এবং তার পরে অন্যগুলি।
মেমোরি বাধা প্রয়োজনীয় কারণ বেশিরভাগ আধুনিক সিপিইউগুলি কার্য সম্পাদন অপ্টিমাইজেশন নিয়োগ করে যা ফলশ্রুতিতে অর্ডার অফ কার্যকর করতে পারে। মেমরি অপারেশনগুলির (এই লোড এবং স্টোর) ক্রমবিন্যাস সাধারণত সম্পাদনের একক থ্রেডের মধ্যে লক্ষ্য করা যায় না, তবে সাবধানতার সাথে নিয়ন্ত্রণ করা না হলে সাম্প্রতিক প্রোগ্রাম এবং ডিভাইস ড্রাইভারদের মধ্যে অনির্দেশ্য আচরণের কারণ হতে পারে ...
আপনি দেখতে পাচ্ছেন, যখন বিভিন্ন থ্রেড থেকে ডেটা অ্যাক্সেস করা হয়, মাল্টি-কোর সিপিইউতে এটি নিম্নরূপ যায়: বিভিন্ন থ্রেড বিভিন্ন কোরে চালিত হয়, প্রতিটি তার নিজস্ব (তাদের মূল স্থানীয়) ক্যাশে ব্যবহার করে - কিছু গ্লোবাল ক্যাশের একটি অনুলিপি।
যদি ডেটাটি পরিবর্তনযোগ্য হয় এবং প্রোগ্রামারকে এটি বিভিন্ন থ্রেডের মধ্যে সামঞ্জস্যপূর্ণ হওয়ার প্রয়োজন হয়, ধারাবাহিকতার গ্যারান্টি দেওয়ার জন্য ব্যবস্থা গ্রহণ করা দরকার। প্রোগ্রামারটির জন্য, এর অর্থ সিঙ্ক্রোনাইজেশন কনস্ট্রাক্টসগুলি ব্যবহার করা হয় যখন তারা নির্দিষ্ট থ্রেডে ডেটা অ্যাক্সেস করে (যেমন পড়ুন)।
সংকলকটির জন্য, কোডে সিঙ্ক্রোনাইজেশন কনস্ট্রাক্টেশনটির অর্থ এটি যে কোনও কোরে ডেটার অনুলিপিতে পরিবর্তনগুলি সঠিকভাবে প্রচারিত হয় ("প্রকাশিত"), অন্য গ্যারান্টিতে গ্যারান্টি নিশ্চিত করার জন্য এটি একটি মেম্বার নির্দেশ সন্নিবেশ করা দরকার একই (আপ টু ডেট) কপি আছে।
কিছুটা সরল করে নীচের নোটটি দেখুন , এখানে মেম্বারের জন্য মাল্টি-কোর প্রসেসরে কী ঘটে:
- সমস্ত কোর প্রক্রিয়াজাতকরণ বন্ধ করে দেয় - দুর্ঘটনাক্রমে ক্যাশে লেখার বিষয়টি এড়াতে।
- স্থানীয় ক্যাশে করা সমস্ত আপডেট বিশ্বব্যাপী একটিতে লিখিত হয় - এটি নিশ্চিত করতে যে বিশ্বব্যাপী ক্যাশে সাম্প্রতিক ডেটা রয়েছে। এটি কিছুটা সময় নেয়।
- স্থানীয় ক্যাশে সর্বাধিক সাম্প্রতিক ডেটা রয়েছে তা নিশ্চিত করার জন্য - আপডেট হওয়া ডেটা গ্লোবাল ক্যাশে থেকে স্থানীয় লোকগুলিতে লেখা থাকে। এটি কিছুটা সময় নেয়।
- সমস্ত কোর পুনরায় কার্যকর করা কার্যকর করে।
আপনি দেখতে পাচ্ছেন, সমস্ত কোর সমস্ত কিছুই করছে না যখন বৈশ্বিক এবং স্থানীয় ক্যাশেগুলির মধ্যে পিছনে পিছনে ডেটা অনুলিপি করা হচ্ছে । পরিবর্তনীয় ডেটা সঠিকভাবে সিঙ্ক্রোনাইজ হয়েছে (থ্রেড নিরাপদ) তা নিশ্চিত করার জন্য এটি প্রয়োজনীয়। যদি 4 টি কোর থাকে তবে সমস্ত 4 টি থামুন এবং ক্যাচগুলি সিঙ্ক করার সময় অপেক্ষা করুন। যদি 8 থাকে তবে সমস্ত 8 টি থামবে। যদি এখানে 16 হয় ... তবে এর মধ্যে একটিতে প্রয়োজনীয় জিনিসগুলির জন্য অপেক্ষা করার সময় আপনি 15 টি কোর পেয়েছেন ঠিক তেমন কিছু করছেন না।
এখন, আসুন দেখুন ডেটা অদলবদল হলে কী ঘটে? কোনও থ্রেড এটি অ্যাক্সেস করে না কেন, এটি একই হওয়ার গ্যারান্টিযুক্ত। প্রোগ্রামারটির জন্য, এর অর্থ এটি যখন নির্দিষ্ট থ্রেডে ডেটা অ্যাক্সেস করে (পড়ুন) তখন সিঙ্ক্রোনাইজেশন কনস্ট্রাক্টসগুলি সন্নিবেশ করার দরকার নেই ।
সংকলকটির জন্য, এর পরিবর্তে এর অর্থ একটি মেম্বার নির্দেশ সন্নিবেশ করার দরকার নেই ।
ফলস্বরূপ, ডেটা অ্যাক্সেসের জন্য কোরগুলি থামানো এবং অপেক্ষা করতে হবে না যখন বৈশ্বিক এবং স্থানীয় ক্যাশের মধ্যে ডেটা সামনে এবং পিছনে লেখা হচ্ছে। এটি মেমরির পরিবর্তিত হয় না এর একটি সুবিধা ।
উপরের কিছুটা সরলকরণের ব্যাখ্যাটি নোট করুন ডেটা পরিবর্তনযোগ্য হওয়ার আরও কিছু জটিল নেতিবাচক প্রভাবগুলি ড্রপ করে, উদাহরণস্বরূপ পাইপলাইনে । প্রয়োজনীয় অর্ডারিংয়ের গ্যারান্টি দেওয়ার জন্য, সিপিইউতে ডেটা পরিবর্তনের দ্বারা প্রভাবিত পাইলাইনগুলি অকার্যকর করতে হবে - এটি আরও একটি কর্মক্ষমতা জরিমানা। যদি এটি সরল (এবং এইভাবে নির্ভরযোগ্য :) সমস্ত পাইপলাইনগুলির অবৈধকরণের মাধ্যমে প্রয়োগ করা হয়, তবে নেতিবাচক প্রভাবটি আরও প্রশস্ত করা হবে।