ধরে নিচ্ছি যে l1 এবং l2 ক্যাশে অনুরোধগুলি মিসের ফলস্বরূপ, মূল স্মৃতি অ্যাক্সেস না করা পর্যন্ত প্রসেসরটি কি স্টল করে?
আমি অন্য থ্রেডে স্যুইচ করার ধারণাটি শুনেছি, যদি তাই হয় তবে থামানো সুতোর জাগাতে কী ব্যবহৃত হয়?
ধরে নিচ্ছি যে l1 এবং l2 ক্যাশে অনুরোধগুলি মিসের ফলস্বরূপ, মূল স্মৃতি অ্যাক্সেস না করা পর্যন্ত প্রসেসরটি কি স্টল করে?
আমি অন্য থ্রেডে স্যুইচ করার ধারণাটি শুনেছি, যদি তাই হয় তবে থামানো সুতোর জাগাতে কী ব্যবহৃত হয়?
উত্তর:
কম্পিউটার আর্কিটেকচার গবেষণায় অধ্যয়ন করা অন্যতম মৌলিক সমস্যা মেমরি ল্যাটেন্সি।
আউট-অফ-অর্ডার নির্দেশের ইস্যু দিয়ে অনুমানমূলক সম্পাদন প্রায়শই একটি এল 1 ক্যাশে আঘাতের সময় অলসতা পূরণ করার জন্য দরকারী কাজ সন্ধান করতে সক্ষম হয়, তবে সাধারণত 10 বা 20 চক্র বা তার পরে কার্যকর কাজের বাইরে চলে যায়। দীর্ঘ-বিলম্বের মিসের সময় করা কাজের পরিমাণ বাড়াতে বেশ কয়েকটি প্রচেষ্টা হয়েছে several একটি ধারণা ছিল মান পূর্বাভাস দেওয়ার চেষ্টা করা (লিপাস্টি, উইলকারসন এবং শেন, (এএসপিএলস -7): 138-147, 1996)। এই ধারণাটি কিছু সময়ের জন্য একাডেমিক আর্কিটেকচার গবেষণা চেনাশোনাগুলিতে খুব ফ্যাশনেবল ছিল তবে বাস্তবে এটি কাজ করে না বলে মনে হয়। ইতিহাসের ডাস্টবিন থেকে মূল্য ভবিষ্যদ্বাণী বাঁচানোর জন্য সর্বশেষ হাঁসফাঁস চেষ্টাটি ছিল রানআহেড এক্সিকিউশন(মুতলু, স্টার্ক, উইলকারসন এবং প্যাট (এইচপিসিএ -9): 129, 2003) রানআহেড এক্সিকিউশনে আপনি স্বীকার করেছেন যে আপনার মান পূর্বাভাসগুলি ভুল হতে চলেছে, তবে অনুমানের ভিত্তিতে যাইহোক নির্বাহ করুন এবং তারপরে ভবিষ্যদ্বাণীটির উপর ভিত্তি করে সমস্ত কাজ ফেলে দিন, তত্ত্বের ভিত্তিতে আপনি কমপক্ষে এল 2 ক্যাশে হওয়ার জন্য কিছু উপসর্গ শুরু করবেন ব্যার্থ। দেখা যাচ্ছে যে রানাহাড এত বেশি শক্তি অপচয় করে যে এটি কেবল মূল্য দেয় না।
এই শিরাতে একটি চূড়ান্ত পদ্ধতির সাথে যা শিল্পে কিছুটা ট্র্যাকশন পাচ্ছে তার মধ্যে রয়েছে দীর্ঘতর পুনঃক্রমের বাফার তৈরি করা। শাখার পূর্বাভাসের উপর ভিত্তি করে নির্দেশাবলবকে অনুমানমূলকভাবে কার্যকর করা হয়, তবে কোনও মান পূর্বাভাস দেওয়া হয় না। পরিবর্তে সমস্ত নির্দেশাবলী যে দীর্ঘায়িত লোড মিস মিস উপর নির্ভর করে বসে এবং পুনরায় অর্ডার বাফারে অপেক্ষা করুন। তবে যেহেতু পুনঃক্রমের বাফারটি এত বড় তাই আপনি যদি শাখার ভবিষ্যদ্বাণী কোনও ভাল কাজ করে থাকেন তবে আপনি মাঝে মাঝে নির্দেশের স্ট্রিমের অনেক পরে দরকারী কাজটি সন্ধান করতে পারবেন instructions এই অঞ্চলে একটি প্রভাবশালী গবেষণা পত্র ছিল কন্টিনিউয়াল ফ্লো পাইপলাইন(শ্রীনিবাসন, রাজওয়ার, আক্কারি, গান্ধী এবং আপটন (এএসপিএলস-ইলেভেন: 107-119, 2004))। (লেখকরা সবাই ইন্টেল থেকে এসেছেন সত্ত্বেও, আমি বিশ্বাস করি যে এএমডি তে ধারণাটি আরও ট্র্যাকশন পেয়েছে।)
বিলম্বিতা সহনশীলতার জন্য একাধিক থ্রেড ব্যবহার করার একটি দীর্ঘ ইতিহাস রয়েছে যার সাথে শিল্পে অনেক বেশি সাফল্য রয়েছে। সমস্ত সফল সংস্করণ মাল্টিথ্রেডিংয়ের জন্য হার্ডওয়্যার সমর্থন ব্যবহার করে। এর সহজতম (এবং সবচেয়ে সফল) সংস্করণটি এটিকে প্রায়শই এফজিএমটি ( সূক্ষ্ম দানযুক্ত মাল্টি-থ্রেডিং ) বা ইন্টারলিভড মাল্টি-থ্রেডিং বলা হয় । প্রতিটি হার্ডওয়্যার কোর একাধিক থ্রেড প্রসঙ্গ সমর্থন করে (একটি প্রসঙ্গটি মূলত নিবন্ধকের রাজ্য, নির্দেশ পয়েন্টার এবং কোনও অন্তর্নিহিত পতাকা নিবন্ধগুলির মতো রেজিস্টার সহ)। একটি সূক্ষ্ম-দানাদার মাল্টি-থ্রেডিং প্রসেসরে প্রতিটি থ্রেড প্রসেস করা হয়-order। প্রসেসর ট্র্যাক করে রাখে যে কোন থ্রেডগুলি দীর্ঘ-বিলম্বিত লোড মিসের উপর স্থবির রয়েছে এবং যা তাদের পরবর্তী নির্দেশের জন্য প্রস্তুত এবং এটি চক্রটি কার্যকর করার জন্য কোন প্রস্তুত থ্রেড চয়ন করতে প্রতিটি চক্রের একটি সাধারণ ফিফো শিডিউলিং কৌশল ব্যবহার করে। বৃহত আকারে এর প্রাথমিক উদাহরণ হ'ল বার্টন স্মিথের এইচপি প্রসেসরগুলি (বার্টন স্মিথ তেরা সুপার কম্পিউটারের স্থপতি হয়েছিলেন, এটি একটি সূক্ষ্ম ধরণের মাল্টি-থ্রেডিং প্রসেসরও ছিল)। তবে ধারণাটি আরও অনেক পিছনে ফিরে আসে, 1960 এর দশকে, আমি মনে করি।
স্ট্রিমিং কাজের চাপে এফজিএমটি বিশেষভাবে কার্যকর। সমস্ত আধুনিক জিপিইউ (গ্রাফিক্স প্রসেসিং ইউনিট) মাল্টিকোর যেখানে প্রতিটি কোর এফজিএমটি, এবং ধারণাটি অন্যান্য কম্পিউটিং ডোমেনগুলিতেও বহুল ব্যবহৃত হয়। সান এর টি 1 মাল্টিকোর এফএমজিটিও ছিল এবং তেমনই ইন্টেলের শিওন ফি (প্রসেসর যা প্রায়শই "এমআইসি" নামে পরিচিত এবং "লারাবি" নামে পরিচিত ছিল)।
একযোগে বহুগঠিতকরণের ধারণা (তুলসন, এগারস এবং লেভি, (আইএসসিএ -২২): 392-403, 1995) অনুমানমূলক মৃত্যুদন্ডের সাথে হার্ডওয়্যার মাল্টি-থ্রেডিংকে একত্রিত করে। প্রসেসরের একাধিক থ্রেড প্রসঙ্গ রয়েছে, তবে প্রতিটি থ্রেড অনুমানমূলক এবং আদেশের বাইরে চলে যায়। এরপরে আরও পরিশীলিত সময়সূচী থ্রেড থেকে আনার জন্য বিভিন্ন হিউরিস্টিক্স ব্যবহার করতে পারে যা সম্ভবত কার্যকর কাজ ( মালিক, আগরওয়াল, ধর, এবং ফ্রাঙ্ক, (এইচপিসিএ-১৪: ৫০- )১), ২০০৮ ) পেতে পারে। একটি নির্দিষ্ট বৃহত্ অর্ধপরিবাহী সংস্থা যুগপত বহুবৃত্তির জন্য হাইপারথ্রেডিং শব্দটি ব্যবহার শুরু করেছিল এবং আজকের দিনে সেই নামটি সর্বাধিক ব্যবহৃত be
আমি আপনার মন্তব্যগুলি পুনরায় পড়ার পরে উপলব্ধি করেছিলাম যে আপনি প্রসেসর এবং মেমরির মধ্যে যে সংকেতটিও বানাচ্ছেন তাতে আগ্রহী। আধুনিক ক্যাশে সাধারণত একাধিক মিসকে একই সাথে অসামান্য রাখতে দেয়। একে লকআপ-মুক্ত ক্যাশে (ক্রফট, (আইএসসিএ -8): 81-87, 1981) বলা হয়। (তবে কাগজটি অনলাইনে খুঁজে পাওয়া শক্ত, এবং কিছুটা কঠিন hard ), যা ক্রোফট তার 1981 এর গবেষণাপত্রে এটি দিয়েছিল)
সংক্ষিপ্ত উত্তরটি হল: কিছুই নয়, প্রসেসরের স্টল।
এতগুলি সম্ভাবনা নেই। অন্য কোনও কার্যে স্যুইচ করা দুটি কারণে সত্যিই কোনও বিকল্প নয়। এটি একটি ব্যয়বহুল ক্রিয়াকলাপ, এবং যেহেতু বর্তমান কাজ এবং অন্যান্য টাস্ক ক্যাশে স্থানের জন্য প্রতিযোগিতা করছে, অন্য টাস্কে স্যুইচিংয়ের জন্য নিজেই একটি প্রধান স্মৃতি অ্যাক্সেসের প্রয়োজন হতে পারে এবং তাই মূল কার্যটিতে ফিরে যেতে পারে। তদ্ব্যতীত, এটি অপারেটিং সিস্টেমকে জড়িত করতে হবে, সুতরাং প্রসেসরকে কিছু ধরণের বাধা বা ফাঁদ ট্রিগার করতে হবে - আসলে প্রসেসরটি কিছু কার্নেল কোডে স্যুইচ করবে।
প্রসেসরটি স্থবির হয়ে যাওয়ার পরে, টাইমারটি চলতে থাকে, তাই টাইমার বিঘ্নিত হতে পারে, বা অন্যান্য পেরিফেরিয়াল থেকে বাধা হতে পারে। সুতরাং ক্যাশে অ্যাক্সেসের চেয়ে কোনও মূল স্মৃতি অ্যাক্সেসের সময় কনটেক্সট স্যুইচ হওয়ার সম্ভাবনা বেশি থাকে তবে কেবল কারণ এটি বেশি সময় নেয়।
তবুও আধুনিক কম্পিউটারগুলিতে প্রধান স্মৃতির জন্য অপেক্ষা করা প্রসেসরে সময় নষ্ট হওয়া সময় কমাতে চেষ্টা করার বিভিন্ন কৌশল রয়েছে। স্টলিং ঘটে, তবে কেবল তখনই এড়ানো যায় না।
একটি কৌশল হ'ল অনুমানমূলক ফেচিং : প্রসেসরটি অনুমান করার চেষ্টা করে যে কোন মেমরির অবস্থানটি অ্যাক্সেস করা হবে এবং সময়ের আগে এটি ক্যাশে নিয়ে আসে। উদাহরণস্বরূপ, মেমরির ব্লকের উপরের লুপগুলি সাধারণ, সুতরাং যদি 0x12340000, 0x12340010 এবং 0x12340020 মেমরির ঠিকানাগুলির জন্য ক্যাশে লাইনগুলি লোড করা থাকে তবে 0x12340030 এর জন্য লাইনটি লোড করা ভাল ধারণা হতে পারে। সংকলক প্রিফেট নির্দেশাবলী উত্পন্ন করে সাহায্য করতে পারে যা বোঝার মতো যা তারা কেবলমাত্র প্রধান মেমরি থেকে ডেটা ক্যাশে স্থানান্তর করে, প্রসেসরের নিবন্ধে নয়।
আর একটি কৌশল হ'ল জল্পনা-কল্পনা । প্রসেসর লোড সঞ্চালনের পূর্বে পরবর্তী নির্দেশনা কার্যকর করা শুরু করে। নির্দেশাবলীর পাইপলাইনের কারণে এটি প্রাকৃতিকভাবেই ঘটে । লোড হওয়া মানের উপর নির্ভর করে না এমন নির্দেশাবলীই এইভাবে কার্যকর করা যেতে পারে: প্রসেসরের অবশ্যই নির্ভরতা বিশ্লেষণ করা উচিত perform শর্তসাপেক্ষ নির্দেশাবলীর জন্য (যেমন লোড আর 1; শাখা যদি আর 1) 0 থাকে) তবে প্রসেসরগুলি মানটি কী হবে তা অনুমান করার জন্য শাখার পূর্বাভাস হিউরিস্টিকস নিয়োগ করে । কোনও চাপের পরে যদি চাপের কারণ হয় তবে লোডের পরে জল্পনা-কল্পনা কার্যকর করা দরকার।
ইটানিয়ামের মতো কিছু আর্কিটেকচারটি ডিফল্ট অনুসারে নির্দেশ পুনঃক্রমের অনুমতি দিয়ে সুবিধাজনক ক্রমে নির্দেশাবলীর সম্পাদনকে সহজতর করে: একের পর এক শব্দার্থকভাবে সম্পাদিত প্রাথমিক নির্দেশাবলীর অনুক্রমের পরিবর্তে প্রোগ্রামগুলিতে খুব দীর্ঘ নির্দেশের শব্দ থাকে : একটি নির্দেশে অন্তর্ভুক্ত থাকে: প্রসেসরের বিভিন্ন উপাদান দ্বারা সমান্তরালভাবে চালিত হতে পারে এমন অনেকগুলি অপারেশন।
হাইপারথ্রেডিংয়ে অন্য থ্রেডে স্যুইচিং ঘটে যা হাই-এন্ড x86 প্রসেসরে পাওয়া যায়। এটি একটি হার্ডওয়্যার ডিজাইনের কৌশল: প্রতিটি প্রসেসর কোরটিতে দুটি পৃথক রেজিস্টার ব্যাংক থাকে (প্রতিটি কার্যের প্রসঙ্গে), তবে অন্যান্য উপাদানগুলির একক উদাহরণ রয়েছে, যাতে এটি দুটি স্বতন্ত্র মৃত্যুদন্ড কার্যকর করতে পারে তবে কেবল কার্যকরভাবে একটি থেকে নির্দেশাবলী কার্যকর করতে পারে একটি সময়. একটি থ্রেড স্থবির হয়ে গেলে অন্য থ্রেডটি এগিয়ে যায়। সফ্টওয়্যারটির দৃষ্টিকোণ থেকে দুটি স্বতন্ত্র প্রসেসর রয়েছে; এটি ঠিক ঘটে যে এই প্রসেসরগুলি হুডের নীচে অনেকগুলি উপাদান ভাগ করে।
অদলবদল মেমরি ক্যাশে শ্রেণিবিন্যাসের আরও একটি স্তর: মূল স্মৃতিটিকে অদলবদলের জায়গার ক্যাশে হিসাবে দেখা যায়। অদলবদল করার সাথে, প্রক্রিয়াগুলি এবং পারফরম্যান্স অনুপাত পৃথক। যদি কোনও টাস্ককে অদলবদল থেকে বোঝা করার প্রয়োজন হয়, লোড নির্দেশটি একটি ফাঁদ ট্রিগার করে যা র্যামে কোনও পৃষ্ঠা বরাদ্দ করতে এবং এর সামগ্রীটি ডিস্ক থেকে লোড করার জন্য কার্নেল কোড চালায়। এটি হওয়ার পরে, কার্নেলটি অন্য কোনও কাজে স্যুইচ করার সিদ্ধান্ত নিতে পারে।
এই প্রশ্নের উত্তর প্রশ্নের মধ্যে আর্কিটেকচারের সাথে পৃথক হবে। যদিও অনেকগুলি সিপিইউ স্টল করবে (এআরএম, x86 ডাব্লু / ও হাইপারথ্রেডিং ইত্যাদি) কারণ থ্রেডগুলি স্যুইচ করতে তাদের খুব বেশি সময় লাগে, এটি প্রতিটি স্থাপত্যের দ্বারা গৃহীত পদ্ধতির নয়। কিছু আর্কিটেকচারে, সিপিইউতে নির্ধারিত প্রতিটি থ্রেডের নিজস্ব স্বতন্ত্র রেজিস্টার ফাইল থাকে, তাই প্রসেসর কেবল একটি থ্রেড থেকে কাজ সম্পাদন করতে পারে যা মেমরি অ্যাক্সেসের জন্য অপেক্ষা করে না। এটি আমার বোঝা যায় যে এটি একটি সীমিত পরিমাণে x86 হাইপারথ্রেডিং কী করে (মাত্র ২ টি থ্রেড ব্যবহার করে) তবে জিপিজিপিইউতে এটি অনেক বেশি সাধারণআর্কিটেকচারের। সিউডিএর বিশেষ ক্ষেত্রে, কমপক্ষে কয়েক ডজন, যদি কয়েকশ না হয়, তবে কোনও থ্রেডের কয়েকটি ওয়ার্প সাধারণত প্রদত্ত মাল্টিপ্রসেসরের উপর যে কোনও সময়ে লোড করা হয়, প্রতিটি থ্রেডের (শত বা হাজার হাজার) এর নিজস্ব রেজিস্টার রয়েছে। এটি যখন প্রদত্ত থ্রেড একটি মেমরি অ্যাক্সেস প্রেরণ করে তখন খুব পরবর্তী চক্রের অন্য থ্রেড থেকে কোনও নির্দেশিকা কার্যকর করতে আর্কিটেকচারকে অনুমতি দেয়। সুতরাং, যতক্ষণ না পর্যাপ্ত পরিমাণে থ্রেড লোড হয়, ততক্ষণ প্রসেসরের কোর মেমরি অ্যাক্সেসের জন্য অলস হয় না। দেখুন পারফরমেন্স নির্দেশিকা এবং মেমরি শ্রেণীক্রম আরও তথ্যের জন্য।