# SISD

Architetture correlate (Tassonomia di Flynn) :
| | Istruzione Singola | Istruzioni Multiple |
| Dato Singolo | SISD | MISD |
| Dati Multipli | SIMD | MIMD |
Single Instruction stream, Single Data stream (SISD) è un'architettura in cui una singola unità di elaborazione esegue un singolo flusso di dati. Corrisponde alla classica architettura di von Neumann utilizzata in quasi tutti i personal computer anche se è ormai obsoleta.

## Macchina SISD

Nell'architettura SISD è possibile eseguire un'unica istruzione per volta su un unico dato, eseguendo le istruzioni una dopo l'altra come previsto dal paradigma imperativo.

## Cicli di istruzione

* Fase di Fetch = Preleva dalla memoria centrale l'istruzione da eseguire utilizzando l'indirizzo contenuto nel PC (Program Counter), incrementa il PC in maniera tale che possa contenere l'indirizzo della prossima istruzione da eseguire,
* Fase di Decode = La CU (control unit) interpreta l'istruzione e determina le operazioni da eseguire.
* Fase di Execute = L'ALU (unità aritmetico logica) esegue le operazioni e la CU controlla l'andamento dell'esecuzione delle operazioni.

## Limiti dell'architettura SISD

Un importante limite della architettura SISD è la singola connessione tra il processore e la memoria. Siccome l'accesso alla memoria è limitato soltanto a un'operazione alla volta, insorge il classico problema definito come collo di bottiglia, generando un rallentamento generalizzato.

### Possibili soluzioni

Alcune soluzioni individuate sono:
* Allargamento del BUS Dati;
* Introduzione della cache;
* Parallelismo temporale per le istruzioni, facendo in modo che la macchina riesca ad elaborare il più alto numero possibile di istruzioni al secondo.

## Macchina SISD con prefetching

Sovrapposizione "temporale" della fase di fetch ed execute di due successive istruzioni.
L'elaboratore ha due unità hardware separate per eseguire la fase di fetch e di execute.
Questa tecnica non tiene conto di alterazioni della sequenza di esecuzione.
   Esempio : in presenza di istruzioni di salto
I cambiamenti di sequenza non consentono di sfruttare i guadagni temporali dovuti al prefetching, ma neanche rallentano l'esecuzione rispetto al modello prefetching.

## Il Pipelining su SISD

Il pipelining prevede sia l'esecuzione di una istruzione divisa in più fasi (anche chiamati stadi) che la sovrapposizione temporale degli stadi di più istruzioni, dove ogni stadio è gestito da una unità hardware dedicata.
Il pipelining su SISD premette l'operazione in parallelo di più istruzioni situate a diversi stadi.
Il pipelining non esegue più velocemente le istruzioni, ma fa aumentare la frequenza di completamento delle istruzioni, cioè fa aumentare il numero di istruzioni eseguite al secondo (Throughtput).
Di solito le pipeline hanno 5 stadi fondamentali. Una pipeline da X stadi elabora N istruzioni in un periodo di tempo pari a X+(N-1) cicli di clock, invece un processore senza pipeline impiega X*N cicli di clock.
Il guadagno massimo (rendimento) è dato dall'indice di Speed_up così definito: Speed_up = [X+(N-1)]/(X*N)

## Problemi del pipelining

In presenza di stalli il guadagno di una pipeline si riduce sia a causa della dipendenza tra le istruzioni sia a causa della presenza di istruzioni di salto (jump point), in quanto non si conosce a priori la prossima istruzione da eseguire.
Nell'architettura RISC il pipelining consente di raggiungere elevate velocità di calcolo.
Nell'architettura CISC i vantaggi del pipelining non vengono sempre sfruttati a causa della presenza di istruzioni complesse che utilizzano tutte le fasi del pipelining rallentando quelle semplici.