محدودیت یک پایپلاین پایه
پایپلاین پنجمرحلهای که پیشتر در این مجموعه پوشش داده شد، در بهترین حالت، میتواند یک دستور را در هر سیکل ساعت، وقتی که پر شود، تکمیل کند. این بهبود قابلتوجهی نسبت به طرح تکسیکلی است، اما همچنان یک سقف سخت را نشان میدهد: صرفنظر از اینکه خطرها چقدر خوب مدیریت شوند، یک پایپلاین واحد نمیتواند از این نرخ یک-دستور-در-هر-سیکل فراتر رود.
فراتر رفتن از یک دستور در هر سیکل
Instruction-Level Parallelism (ILP) به تکنیکهایی اشاره دارد که به یک پردازنده اجازه میدهند بیش از یک دستور را در همان سیکل ساعت اجرا کند، با تکرار منابع سختافزاری و صادر کردن چند دستور همزمان به پایپلاین بهجای یکییکی.
صدور چندگانه: تکرار جلوی پایپلاین
یک پردازنده قادر به این کار Multiple-Issue یا Superscalar نامیده میشود. برای پشتیبانی از صدور بیش از یک دستور در هر سیکل، سختافزار منابع کلیدی را تکرار میکند: چند ALU اجازه میدهند بیش از یک عملیات محاسباتی بهطور همزمان اجرا شود، پورتهای خواندن و نوشتن اضافی روی فایل رجیستر اجازه میدهند عملوندهای بیشتری همزمان دسترسیپذیر باشند، و مرحله واکشی دستور باید بیش از یک دستور را در هر سیکل از حافظه بازیابی کند.
پایپلاین تکصدور: 1 دستور در هر مرحله در هر سیکل
پایپلاین دوصدور: تا 2 دستور در هر مرحله در هر سیکل،
نیازمند 2 ALU، پورتهای اضافی فایل رجیستر،
و واکشی دستور پهنترزمانبندی ایستا در مقابل پویا
تصمیمگیری درباره اینکه کدام دستورات میتوانند با امنیت در همان سیکل با هم اجرا شوند میتواند به دو روش متفاوت رخ دهد. Static Scheduling از پیش توسط کامپایلر انجام میشود، و دستورات را در ترتیبی که شناختهشده برای اجتناب از تعارضات است پیش از اینکه برنامه اصلاً اجرا شود، مرتب میکند. Dynamic Scheduling توسط سختافزار در زمان اجرا انجام میشود، که دستورات را همانطور که میرسند بررسی میکند و بیدرنگ تصمیم میگیرد کدامها میتوانند با هم صادر شوند، به قیمت پیچیدگی سختافزاری اضافی برای گرفتن این تصمیمات بهسرعت.
چرا وابستگیها محدود میکنند چقدر موازیسازی ممکن است
هر جفت دستور نمیتواند با هم صادر شود، صرفنظر از اینکه چقدر سختافزار تکرار شده باشد. اگر یک دستور به نتیجه دستور دیگری وابسته باشد، همانطور که پیشتر در این مجموعه هنگام بحث درباره خطرهای داده پوشش داده شد، آنها نمیتوانند بهطور همزمان اجرا شوند صرفنظر از اینکه چند ALU در دسترس باشد؛ دستور وابسته همچنان باید منتظر آماده شدن ورودی خود بماند.
این یعنی بهره کارایی واقعی صدور چندگانه بهشدت به این بستگی دارد که چقدر کار مستقل و قابلموازیسازی در یک برنامه مشخص وجود دارد. کدی با دستورات مستقل زیاد بهطور قابلتوجهی بهرهمند میشود، در حالی که کدی با یک زنجیره طولانی از دستورات وابسته، صرفنظر از اینکه چند اسلات صدور اضافه شود، بهبود کمی میبیند.
چرا این رویکرد محدودیتهای عملی دارد
افزودن مداوم اسلاتهای صدور بیشتر و تکرار منابع سختافزاری، پس از یک نقطه مشخص، بازده کاهشی تولید میکند، چون برنامههای واقعی بهندرت بهاندازه کافی دستورات مستقل و آماده-برای-اجرا دارند تا یک پایپلاین بهطور فزاینده پهنتر را بهطور مداوم پر نگه دارند. این محدودیت عملی بخشی از دلیلی است که چرا طراحان پردازنده در نهایت بهسمت طرحهای چندهستهای، که پیشتر در این مجموعه بحث شد، بهعنوان راهی اضافی برای افزایش توان عملیاتی کلی روی آوردند.