واحد پردازش مرکزی
ساختار و پیاده‌سازی > موازی‌سازی > موازی سازی در سطح دستورالعمل

مقالهٔ اصلی: موازی سازی در سطح دستورالعمل
یکی از ساده‌ترین روش‌های مورد استفاده برای افزایش موازی‌سازی این است که اولین مراحل واکشی و رمزگشایی دستورالعمل را پیش از اینکه اجرای دستورالعمل قبلی تمام شود، شروع کنیم. این روش ساده‌ترین فرم یک تکنیک بنام خط لوله دستورالعمل (instruction pipelining) است و در تقریباً تمام پردازنده‌های عمومی جدید استفاده می‌شود. خط لوله دستورالعمل، با شکستن مسیر اجرا و تبدیل آن به مراحل جداگانه، باعث می‌شود تا در هر زمان بیش از یک دستورالعمل اجرا شود. این جدا کردن را می‌توان با خط مونتاژ مقایسه کرد که در آن یک دستور در هر مرحله کاملتر می‌شود، تا اینکه کلا از خط خارج شود.
با این وجود، روش خط لوله، ممکن است موقعیتی را به وجود آورد که در آن نتایج عملیات قبلی برای کامل کردن عملیات بعدی لازم است. این وضعیت را معمولاً تقابل ناشی از وابستگی می‌نامند. برای جلوگیری از این وضعیت، باید توجه بیشتری شود تا در صورت رخ دادن این شرایط، بخشی از خط لوله دستورالعمل را به تأخیر بیاندازیم. به‌طور طبیعی، برآورده کردن این شرایط نیازمند مداربندی اضافه است، بنابراین پردازنده‌های خط مونتاژی، پیچیده‌تر از انواع ساب اسکالر هستند (البته، خیلی پیچیده‌تر نیستند). یک پردازنده از نوع خط لوله، می‌تواند بسیار نزدیک به حد اسکالر شود، در این شرایط تنها مانع موجود وقفه‌ها (دستورالعملی که بیش از یک چرخهٔ ساعتی در یک مرحله طول می‌کشد) هستند.
پیشرفت بیشتر در زمینهٔ ایدهٔ خط لوله، منجر به ابداع روشی شده‌است که زمان بیکاری اجزای پردازنده را حتی به میزان بیشتری کاهش می‌دهد. طراحی‌هایی که اصطلاحاً سوپراسکالر(superscalar) هستند شامل یک خط لوله دستورالعمل طولانی و چندین واحد اجرایی مشابه از جمله: واحدهای بارگزاری/ذخیره‌سازی، واحدهای محاسبه و منطق، واحدهای ممیز شناور، و واحدهای تولید آدرس هستند. در یک خط لوله سوپراسکالر، دستورالعمل‌های متعددی خوانده شده و به توزیع کننده ها(dispatcher) می‌روند، توزیع کننده تصمیم می‌گیرد که آیا دستورالعمل‌های مذکور می‌توانند به‌طور موازی (همزمان) اجرا شوند یا نه. در صورتی که پاسخ مثبت باشد، دستورالعمل‌ها در واحدهای اجرایی موجود توزیع (dispatch) می‌شوند. این کار باعث می‌شود تا چندین دستورالعمل به‌طور هم‌زمان اجرا شوند. به‌طور کلی، هرقدر یک پردازندهٔ سوپراسکالر بتواند دستورالعمل‌های بیشتری را به‌طور هم‌زمان به واحدهای اجرایی در حال انتظار ارسال کند، دستورهای بیشتری در یک چرخهٔ مشخص اجرا می‌شوند.
بیشترین دشواری در طراحی یک معماری سوپراسکالر پردازنده مربوط به ساخت یک توزیع‌کنندهٔ مؤثر است. توزیع کننده، باید قادر باشد تا به سرعت و بدون اشتباه مشخص کند که آیا دستورالعمل‌ها می‌توانند به‌طور موازی اجرا شوند، و آن‌ها را به شیوه‌ای توزیع کند تا بیشترین واحدهای اجرایی ممکن را از بیکاری خارج کند. این امر نیازمند این است که خط لوله دستورالعمل بیشتر مواقع ممکن پر باشد و معماری‌های سوپراسکالر را نیازمند مقادیر چشمگیری از حافظه نهان پردازنده(cache) می‌کند. همچنین، در این شرایط نیاز به تکنیک‌های حیاتی پیشگیری از خطر همچون: پیش‌بینی انشعاب، اجرای حدسی، تغییر نام رجیستر، اجرای خارج از نوبت و حافظه تراکنشی، برای حفظ سطوح بالای کارایی داریم. پردازنده با تلاش برای پیش‌بینی کردن اینکه کدام شاخه یا مسیر در یک دستورالعمل شرطی انتخاب خواهد شد، می‌تواند تعداد دفعاتی را که تمام خط تولید باید معطل بماند تا یک دستورالعمل شرطی کامل شود، به حداقل برساند. اجرای خارج از نوبت تا حدودی ترتیب اجرای دستورالعمل‌ها را تغییر می‌دهد تا تاخیرهای ناشی از وابستگی‌های داده را کاهش دهد. اجرای حدسی، با اجرا کردن بخش‌هایی از کد که ممکن است بعد از کامل شدن یک عملیات شرطی مورد نیاز نباشد، معمولاً موجب کمی افزایش در کارایی می‌شود. اجرای خارج از نوبت تا حدودی ترتیب اجرای دستورالعمل‌ها را تغییر می‌دهد تا تاخیرهای ناشی از وابستگی‌های داده را کاهش دهد. همچنین، در مورد جریان یک دستورالعمل، جریان چندین داده- که در آن مقدار زیادی داده مشابه باید پردازش شود- پردازنده‌های جدید می‌توانند بخش‌هایی از خط لوله را غیرفعال کنند تا، هنگامی که یک دستورالعمل به دفعات زیادی اجرا می‌شود، پردازنده بتواند مراحل واکشی و رمزگشایی را نادیده بگیرد و بنابراین باعث افزایش چشمگیر کارایی در مواقع خاصی، خصوصاً در موتورهای برنامه ای یکنواخت همچون نرم‌افزار ایجاد ویدئو و پردازش تصویر شود.
در مواردی که بخشی از پردازنده سوپر اسکالر است و بخش‌هایی نیست، آن بخشی که سوپراسکالر نیست، دچار افت عملکرد به دلیل معطلی‌های زمان‌بندی می‌شود. اینتل پنتیوم P5 دارای دو واحد محاسبه و منطق سوپر اسکالر بود که هر کدام از آنها می‌توانستند یک دستورالعمل را در هر چرخه ساعت بپذیرند، اما واحد ممیز شناور آن نمی‌توانست یک دستورالعمل را در هر چرخه ساعت بپذیرد؛ بنابراین، ALU در رابطه با اعداد صحیح سوپراسکالر بود، اما در رابطه با ممیز شناور سوپراسکالر نبود. معماری نسل بعد از P5، یعنی P6 قابلیت‌های سوپراسکالر را به ویژگی‌های ممیز شناور خود اضافه کرد و بنابراین باعث افزایش چشمگیر در عملکرد دستورالعمل ممیز شناور شد. هم طراحی خط لوله ساده و هم طراحی سوپراسکالر، با فراهم آوردن امکان کامل کردن اجرای دستورالعمل‌ها با سرعتی فراتر از یک دستورالعمل در هر چرخه ساعت(ILP) برای یک پردازنده منفرد، موازی سازی سطح دستورالعمل را در CPU افزایش می‌دهند. اکثر طراحی‌های جدید پردازنده حداقل تا حدودی سوپراسکالر هستند و تقریباً تمام پردازنده‌های عمومی که در دهه اخیر طراحی شده‌اند سوپراسکالر هستند. در سال‌های بعدی، بخشی از تأکید در طراحی کامپیوترهای دارای سطوح بالای موازی سازی در سطح دستورالعمل، از سخت‌افزار پردازنده دور شده و بر روی رابط نرم‌افزاری یا همان معماری مجموعه دستورالعمل (ISA) متمرکز شده‌است. رویکرد کلمه دستورالعمل بسیار طولانی (VLIW) باعث می‌شود تا مقداری از موازی سازی در سطح-دستورالعمل به صورت ضمنی و مستقیماً توسط نرم‌افزار انجام گیرد، که منجر به کاهش بار کاری پردازنده برای افزایش ILP می‌شود و بدین گونه پیچیدگی طراحی کاهش یابد.