IPC da cosa dipende?

U

Utente 125751

Ospite
Salve :D

Sto ampliando, da autodidatta e per interesse personale/hobby, le mie scarse conoscenze tecniche sulle cpu Intel, sulle relative architetture, sui concetti/termini base etc...


Vorrei precisare, nel caso qualcuno fraintenda, che non devo creare o/e progettare un microprocessore e che non ho aperto questa discussione per ricevere consigli sugli acquisti.

Il primo dubbio che mi viene in mente riguarda l' IPC.

Quello che non capisco è: se c'è ad es. una cpu Intel della generazione successiva, con lo stesso processo produttivo, stessa ISA, stesso numero di core ma con un numero di transistor maggiori, un numero maggiore di registri, una dimensione (espressa in bit) dei registri maggiore e con una frequenza maggiore ad avere un IPC inferiore?

So che la frequenza influenza l' IPS ma non l' IPC.

Se si crea un nuovo microprocessore, successivo a quello precedente, cosa bisogna per far aumentare oppure diminuire l' IPC?


Tramite overclock si va ad aumentare la frequenza di una cpu ma di conseguenza aumenta anche l' IPC oppure no?
 

Generale95

Utente Attivo
528
174
CPU
Intel Xeon E5-1620v2
Dissipatore
Gelid Phantom
Scheda Madre
Asus ROG Rampage IV Formula
HDD
Seagate Barracuda ST380013AS + WDC WD10JPCX-24UET4T0
RAM
16 GB Crucial Ballistix Sport DDR3-1600 CL9
GPU
Aorus RX 570 4GB
Monitor
HP Pavilion 22cw
PSU
EVGA 600W
Case
Sharkoon S25-W
Periferiche
Controller wireless Xbox 360
OS
Windows 10 Pro
Da quello che abbiamo visto in Università (poco) posso dirti:

1) In generale per aumentare l'IPC (ovvero il numero istruzioni per ciclo di clock) si deve sfruttare un maggior parallelismo e mitigare l'effetto "rallentante" delle letture e scritture da/verso la memoria (ad esempio potrei mettere in pausa il thread che sta aspettando un dato dalla memoria per eseguirne un altro che non deve attendere nulla così da avere la CPU sempre al lavoro). Per avere un maggior parallelismo ci sono due diverse strade da seguire: parallelismo a livello delle istruzioni e parallelismo a livello dei processi/thread:
-Nel primo caso la migliore soluzione possibile è l'uso di un'architettura superscalare ovvero una in cui trovo diverse unità funzionali (ALU, FPU, unità load/store, ecc.) e assegno ad ognuna di esse le varie istruzioni che mi arrivano: in questo modo le istruzioni elaborate nel singolo ciclo di clock sono più di una (infatti ogni unità funzionale esegue la sua) e quindi si può superare il limite di una istruzione per ciclo di clock tipico delle architetture scalari. Purtroppo però in un programma fra le varie istruzioni ci sono delle dipendenze (che possono essere reali o simboliche) che non sempre permettono l'esecuzione in parallelo di istruzioni prese in ordine dal codice del programma: per evitare questo problema il processore effettua un riordino delle istruzioni e in tal caso si parla di Out of Order Execution (un semplice algoritmo per l'esecuzione fuori ordine è quello di Tomasulo che sta comunque alla base dei moderni metodi per l'esecuzione fuori ordine, puoi trovare molte spiegazioni del suo funzionamento in rete).

-Nel secondo caso vado a sfruttare diversi processori che lavorano in parallelo (le classiche CPU multicore) oltre a tecniche di scheduling (di cui generalmente di occupa il sistema operativo) per far girare più processi o thread diversi in contemporanea. Le GPU portano all'estremo questo tipo di computazione: su una di esse possono essere presenti anche migliaia di thread che "girano" contemporaneamente sfruttando la grande quantità di core disponibili (anche se semplici), inoltre, come già anticipato prima, un gran numero di thread permette di mascherare gli accessi alla memoria e quindi mantenere occupato il processore per più tempo possibile: per questo è sempre bene, quando si utilizza una GPU, assegnare un numero thread ben superiore rispetto ai core che essa presenta.

Ovviamente ci saranno sicuramente altri modi per migliorare ulteriormente l'IPC che io non conosco (purtroppo, nonostante sia l'ambito in cui mi piacerebbe lavorare, ho avuto solo un paio di corsi a riguardo :( ).

2)Tramite overclock non si va ad aumentare l'IPC proprio per quanto detto prima: il numero di istruzioni svolte per ciclo di clock rimane costante aumentando la frequenza, ma siccome la frequenza è maggior (e quindi il periodo del clock è più piccolo) il numero di istruzioni svolte nell'unità di tempo aumenta e quindi anche le prestazioni del processore.

Come detto non sono sicuramente un esperto del campo ma spero di averti comunque aiutato :) (e chiedo scusa a chi ne sa di più nel caso ci siano degli errori :D )
 
Ultima modifica:
  • Mi piace
Reazioni: Utente 125751

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili