Există două abordări pentru detectarea paralelismului (nivelism) la nivelul de comandă:
- hardware - detectarea paralelismului în fluxul de lucru se ocupă cu circuite speciale de procesor atunci când se execută codul de program;
- software-ul - identificarea paralelismului este tratată de compilator, care formează codul programului executabil pentru un procesor special.
Nivelul hardware rulează pe paralelism dinamic. în timp ce nivelul de software rulează pe paralelism static. Procesoarele moderne de înaltă performanță x86 (Intel Pentium 4. Intel Core) funcționează pe o secvență dinamică de execuție paralelă (Extra Command Execution). Paralelismul static a fost folosit în procesoarele Itanium (cu toate acestea, Itanium 2 utilizează o abordare hibridă).
Luați în considerare următorul program:
Funcționarea 3 depinde de rezultatele 1 și 2, deci nu poate fi calculată până când ambele sunt finalizate. Cu toate acestea, operațiunile 1 și 2 sunt independente de orice altă operație, astfel încât acestea să poată fi calculate simultan. Presupunând că fiecare operațiune poate fi finalizată într-o singură unitate de timp, aceste trei instrucțiuni pot fi completate într-un total de două unități de timp, dând ILP 3/2.
Scopul dezvoltatorilor de compilatoare și de procesoare. este de a identifica și obține de la ILP beneficiile maxime posibile. Programele obișnuite, de regulă, sunt scrise pentru un model de execuție secvențială, unde comenzile sunt executate unul după altul în ordinea stabilită de programator. ILP permite compilatorului și / sau procesorului să suprascrie executarea mai multor instrucțiuni sau chiar să modifice ordinea în care sunt executate comenzile.
Cât de mult există în programele ILP depinde în mare măsură de domeniul de aplicare al programului. În unele domenii, cum ar fi grafica computerizată și computere științifice, numărul poate fi foarte mare. Cu toate acestea, volumul de lucru, cum ar fi criptografia. pot prezenta mult mai puțin concurență.
Metode hardware pentru detectarea și utilizarea concurrency:
- Conductă de calcul. unde executarea mai multor instrucțiuni se poate suprapune;
- Execuția superscalară a operațiilor, în care mai multe blocuri de funcții sunt utilizate pentru a executa mai multe comenzi simultan;
- Executarea extraordinară. unde instrucțiunile sunt executate în orice ordine care nu încalcă dependența de date. Rețineți că această metodă nu depinde nici de conductă, nici de superscalar. Implementarea actuală a execuției în afara ordinelor este dinamică (adică, în timp ce programul rulează și fără ajutorul compilatorului) extrage ILP din programele obișnuite. Alternativ, puteți extrage acest paralelism la timpul de compilare și, într-un fel, transferați aceste informații către hardware. Datorită complexității tehnicii de renumărare a performanței extraordinare, industria a reconsiderat setul de echipe. care codifică în mod explicit mai multe operații independente în instruire;
- Redenumirea registrelor. care se referă la metoda utilizată pentru a evita serializarea inutilă a operațiunilor efectuate de program care impun reutilizarea registrelor pentru aceste operațiuni, este utilizată pentru executarea în afara ordinelor;
- Execuția speculativă, care permite implementarea unor instrucțiuni complete sau a unor părți din instrucțiuni pentru a verifica dacă această implementare ar trebui să aibă loc. O formă de execuție speculativă folosită în mod obișnuit este ipoteza controlului fluxului în care instrucțiunile depășesc controlul fluxului instrucțiunilor (de exemplu, un salt) și sunt executate înainte de determinarea țintei fluxului de instrucțiuni. Au fost propuse și utilizate mai multe alte forme de executare speculativă, inclusiv pentru execuția speculativă, datorită prognozei valorii, predicției dependenței de memorie și predicției latenței cache-ului;
- Predicția tranzițiilor. care este folosit pentru a evita suspendarea controlului dependențelor care trebuie rezolvate. Predicatorul conversiilor este utilizat cu execuția speculativă.
Arhitecturile de streaming sunt o altă clasă de arhitecturi, în care ILP este explicit specificat, a se vedea, de exemplu, arhitectura TRIPS.
Implementările timpurii ale ILP, în mainframe precum IBM System / 360 Model 91, au folosit metode ILP pentru a depăși limitele impuse de un fișier de registru relativ mic.