PARTE III MACCHINE A REGISTRI



Похожие документы
Informatica Teorica. Macchine a registri

Macchine a registri RAM (Random Access Machines)

Fondamenti dell informatica

Capitolo 6: Modelli di calcolo per linguaggi imperativi e funzionali

La Macchina RAM Shepherdson e Sturgis (1963)

Elaborazione dell informazione

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

ELEMENTI DI PROGRAMMAZIONE a.a. 2012/13 MACCHINE, ALGORITMI, PROGRAMMI

Il linguaggio macchina

Architettura hardware

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Capitolo 5: Macchine di Turing e calcolabilitá secondo Turing

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Dall algoritmo al programma

Architettura dei computer

A.A. 2018/2019. CPU e Linguaggio Macchina FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

ELEMENTI DI PROGRAMMAZIONE a.a. 2013/14 UNA GERARCHIA DI MACCHINE

12. MACCHINE DI TURING E CALCOLABILITA

Architettura del Calcolatore

Architettura degli Elaboratori

Componenti e connessioni. Capitolo 3

Macchina di Turing. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Corso di Laurea in Informatica. Linguaggi di Programmazione. Fondamenti e Calcolabilità Valeria Carofiglio. a.a

Sistemi di Elaborazione delle Informazioni

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Istruzioni, algoritmi, linguaggi

Macchina di Turing Universale

Componenti principali

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Macchina RAM. Modelli di calcolo e metodologie di analisi. Linguaggio di una macchina RAM. Algoritmi e Strutture Dati. Istruzioni.

Architettura del calcolatore (Seconda parte)

Architettura del Calcolatore

Fondamenti d Informatica: Le Macchine di Turing. Barbara Re, Phd

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

STRUTTURA E LOGICA DI FUNZIONAMENTO DEL COMPUTER

Architettura di un calcolatore e ciclo macchina. Appunti per la classe 3 Dinf

Транскрипт:

PARTE III MACCHINE A REGISTRI Macchine a registri (RAM) Modelli di costo RAM e macchine di Turing Macchine a registri elementari 1

3.1 MACCHINE A REGISTRI (RAM: Random Access Machines) Introdotte da Shepherdson e Sturgis nel 1963 per sviluppare la teoria della calcolabilità con un modello di macchina che fosse un astrazione ragionevole di un calcolatore (macchina di von Neumann). Memoria costituita da un numero arbitrario di celle (registri) indirizzabili direttamente R[1], R[2],..., R[n] contenenti un intero positivo di un numero qualunque di cifre Registri speciali: contatore istruzioni (CI) accumulatore R[0] Nastri di ingresso e di uscita Unità centrale in grado di eseguire semplici istruzioni logico-aritmetiche 2

INPUT ALU R1 R2 R3 ACCUMULATORE... CONT. ISTRUZIONI OUTPUT 3

Repertorio istruzioni (tipiche di una macchina RISC) LOAD, STORE: trasferimenti da registri ad accumulatore e viceversa READ, WRITE: trasferimenti da nastro di input a registri e da registri a nastro di output ADD, SUB, MULT, DIV, REM: operazioni aritmetiche tra accumulatore e registri; il risultato resta nell'accumulatore JGTZ, JEQZ: salti condizionati in base al contenuto dell'accumulatore JUMP: salto incondizionato HALT: terminazione 4

Sintassi delle istruzioni LOAD [ = * ] operando -> operando: numero STORE [ * ] operando d ordine di registro ADD [ = * ] operando -> = operando: SUB [ = * ] operando operando immediato MULT [ = * ] operando -> * operando: DIV [ = * ] operando accesso indiretto REM [ = * ] operando READ [ * ] operando WRITE [ = * ] operando JUMP etichetta -> etichetta: numero JGTZ etichetta d ordine di istruzione JEQZ etichetta HALT etichetta 5

Semantica delle istruzioni (Esempi) ADD =n R[0]:= R[0]+ n CI:=CI+1 ADD n R[0] := R[0]+ R[n] CI := CI+1 ADD *n R[0] := R[0]+ R[R[n]] CI := CI+1 JGTZ m if R[0]>0 then CI := m else CI := CI+1 6

Programmi per RAM Il programma non è contenuto in memoria ma è cablato: ad ogni macchina corrisponde un programma. 7

ESEMPIO - Programma per il calcolo di xy READ 1 lettura di x dal nastro di ingresso READ 2 lettura di y dal nastro di ingresso LOAD =1 STORE 3 inizializzazione del risultato 5 LOAD 2 JEQZ 14 fine ciclo while? LOAD 1 MULT 3 STORE 3 LOAD 2 R[3] := x * R[3] SUB =1 STORE 2 JUMP 5 14 WRITE 3 stampa del risultato HALT 8

3.2 MODELLI DI COSTO PER RAM Modello a costi uniformi costo unitario per l'esecuzione di ogni istruzione ESEMPIO. Eseguire il programma per calcolare xy costa O(y); infatti le 9 istruzioni del ciclo vengono eseguite y volte Critiche: - moltiplicare due interi di 32 bit costa quanto moltiplicare due interi di 1024 bit - accedere ad una memoria di 1 kilobyte costa come accedere ad una memoria di 1 terabyte Vantaggi: il modello ha il pregio di essere molto semplice ed è quello più usato quando valutiamo il comportamento di programmi scritti in linguaggio ad alto livello 9

Modello a costi logaritmici I costi sono proporzionali al numero di bit degli operandi e al logaritmo del numero d ordine dei registri cui si accede Definiamo la seguente funzione (lunghezza in binario): l(n) = 1 se n=0 l(n) = (log n) +1 se n>0 - l'elaborazione di un intero n ha costo l(n) - l'accesso al registro i ha costo l(i) Vantaggi: la valutazione dei costi è più realistica dal punto di vista asintotico (operandi molto grandi, memoria molto grande Critiche: analisi più laboriosa 10

Per eseguire l'istruzione ADD 3 si paga: l (3) per accedere al registro 3 e l(r[3]) + l(r[0]) per eseguire la somma del contenuto del registro 3 e dell accumulatore. Per eseguire l'istruzione ADD *3 si paga: l(3) + l(r[3]) per accedere al registro indirizzato dal registro 3 più l(r[r[3]]) + l(r[0]) per eseguire la somma. 11

ESEMPIO - Valutazione con modello a costi logaritmici. READ 1 l(1)+l(x) O(log x) READ 2 l(2)+l(y) O(log y) LOAD =1 l(1) O(1) STORE 3 l(3)+l(1) O(1) 5 LOAD 2 l(2)+l(y) O(log y) JGTZ 14 l(y) O(log y) LOAD 1 l(1)+l(x) O(log x) MULT 3 l(3)+l(x)+l(xy) O(log x + y log x) STORE 3 l(3)+l(xy) O(y log x) LOAD 2 l(2)+l(y) O(log y) SUB =1 l(1)+l(y) O(log y) STORE 2 l(2)+l(y) O(log y) JUMP 5 1 O(1) 14 WRITE 3 l(3)+l(xy) O(y log x) HALT 1 O(1) La porzione di codice dentro la cornice viene eseguita O(y) volte. Costo di esecuzione totale: O(y2 log x) 12

NOTA BENE. In pratica in situazioni in cui: a) i dati hanno una dimensione prefissata (es: 36 bit) b) le dimensioni della memoria sono prefissate i due modelli coincidono. NOTA BENE. Se le operazioni aritmetiche hanno precisione arbitraria o se si rende necessario l'accesso a memoria secondaria, si deve fare uso di modelli di calcolo analoghi al modello a costi logaritmici anche nell analisi di complessità di algoritmi scritti in linguaggi ad alto livello 13

3.3 RAM E MACCHINE DI TURING Calcolabilità mediante RAM Def. Una funzione f: Nn N è calcolabile da una RAM se esiste un programma P tale che - se f(x1,...,xn)=y, allora P, attivato con x1,...,xn sul nastro di input, termina con y sul nastro di output - se f(x1,...,xn) non è definita, allora P non termina 14

Teorema. Sia M=<{0,1},b,K,q0,F,δ> una MT con nastro seminfinito; esistono una RAM ed un programma P tali che se M calcola q 0 x *q F y e la RAM ha la stringa x nelle celle 2,..., x +1 al termine della computazione la RAM ha la stringa y nelle celle 2,..., y +1; inoltre la RAM simula T passi di M in tempo O(T log T) nel modello a costi logaritmici. Dim. Stabiliamo una corrispondenza tra la cella i del nastro di M e la cella i+1 della memoria della RAM. Usiamo la cella 1 della RAM per rappresentare la posizione della testina di M. All'inizio la cella 1 contiene il valore 2 (posizione iniziale della testina di M). P contiene una sequenza di istruzioni per ogni stato di M. 15

Esempio. Se δ(q1,0)=<q2,1,d> e δ(q1,1)=<q3,0,s> allora P contiene il seguente frammento di programma:... q1 LOAD *1 acquisizione del contenuto del nastro JGTZ q1' lettura di un 1 o di uno 0? LOAD =1 STORE *1 scrittura di un 1 sul nastro LOAD 1 ADD =1 STORE 1 movimento a destra della testina JUMP q2 aggiornamento dello stato q1' LOAD =0 STORE *1 scrittura di uno 0 sul nastro LOAD 1 SUB =1 STORE 1 movimento a sinistra della testina JUMP q3 aggiornamento dello stato... 16

Ogni passo di M è simulato da al più 8 istruzioni ognuna con costo O(log tmax) dove tmax è il massimo numero di celle usate da M Se M esegue T passi allora tmax T+1 Costo complessivo O(T log T) 17

Teorema. Data una RAM con programma P che calcola la funzione f esiste una MT M tale che se f(x1,...,xn)=y e sul nastro di input sono memorizzati in binario gli interi x1,...,xn la macchina M termina con la rappresentazione binaria di y sul nastro di output e se f(x1,...,xn) non è definita M non termina; inoltre se la computazione della RAM ha costo T nel modello a costi logaritmici allora M la simula in O(T2) passi. Dim. M ha tre nastri di lavoro, un nastro di input e un nastro di output. Sul nastro 1 sono memorizzati in binario i dati memorizzati nella memoria della RAM preceduti dal proprio indirizzo rappresentato in binario, cioè: #i 1 #R[i 1 ]#i 2 #R[i 2 ]#i 3 #R[i 3 ]... #i m #R[i m ]. 18

Sul nastro 2 è rappresentato il contenuto dell'accumulatore. Il nastro 3 è usato per il funzionamento di M. Per ogni istruzione del programma della RAM, M ha un insieme di stati per eseguire le operazioni. Istruzioni di salto JUMP, JGTZ, JZERO, HALT: si controlla se il contenuto dell'accumulatore verifica le condizioni di salto e si gestiscono i corrispondenti cambiamenti di stato Istruzioni che non modificano il contenuto della memoria LOAD, ADD, SUB, MULT, DIV, WRITE: si cerca sul nastro 1 il registro su cui si deve operare si esegue sul nastro contenente la rappresentazione dell'accumulatore l'operazione prevista 19

Istruzioni che modificano il contenuto della memoria STORE,READ si trascrive sul nastro 3 il contenuto del nastro 1 a destra del registro da modificare si esegue l'operazione modificando sul nastro 1 la rappresentazione del contenuto del registro da modificare si ricopia sul nastro 1 il contenuto del nastro 3 a destra della cella modificata. 20

Analisi di complessità. i) Ogni sequenza di transizioni relativa ad una operazione di RAM costa ad M, nel caso peggiore, un tempo dell'ordine della massima lunghezza lungmax del nastro 1 e se la RAM opera con costo totale T allora lungmax T. Infatti nel modello a costi logaritmici se sul nastro 1 è presente l' indirizzo i vuol dire che la RAM ha acceduto almeno una volta al registro Ri e quindi ha pagato almeno una volta log i, d'altro canto l'indirizzo i occupa su nastro 1 proprio log i celle se sul nastro 1 compare il contenuto del registro i allora la RAM ha pagato almeno una volta log(r[i]) d'altro canto R[i] occupa su nastro 1 proprio log(r[i]) celle quindi lungmax T 21

ii) Se la RAM opera con costo totale T le operazioni che essa esegue sono al più T In conclusione la MT M opera in tempo O(T lungmax) = O(T2). 22

NOTA BENE 1 Tutto cio' che si può fare (calcolo di funzioni, riconoscimento o accettazione di insiemi, ecc.) con una MT si può fare anche con una RAM e viceversa (adottando le opportune convenzioni per la rappresentazione dell'input e dell'output). Considerato che le RAM corrispondono a semplici programmi Assembler è chiaro che il loro potere computazionale coincide con quello dei linguaggi di programmazione ad alto livello. Tesi di Church-Turing: tutti i modelli di calcolo introdotti per definire la calcolabilità (e tutti i linguaggi di programmazione) hanno al massimo lo stesso potere computazionale delle MT. 23

NOTA BENE 2 Una MT ed una RAM con modello a costi logaritmici possono simularsi a vicenda in tempo polinomiale. La stessa cosa non si può fare se si considerano RAM con moltiplicazione e costi unitari (Esercizio). Per stabilire se un problema ammette una soluzione calcolabile in tempo polinomiale possiamo indifferentemente far riferimento ad una MT o ad una RAM a costi logaritmici. Tesi di Cobham. Tutti i modelli di calcolo introdotti per definire la "trattabilità" (calcolabilità in tempo polinomiale) hanno al più lo stesso potere computazionale delle MT operanti in tempo polinomiale. Questo principio "potrebbe" essere violato dalle macchine quantistiche (fattorizzazione in tempo polinomiale!) 24

3.4 MACCHINE A REGISTRI ELEMENTARI (MREL) Esistono modelli di calcolo ancora più elementari delle RAM dotati dello stesso potere computazionale. - Due sole istruzioni di incremento e decremento del contenuto di registri: R[i] := R[i] + 1 R[i] := R[i] - 1 Se il contenuto è 0 il decremento lascia 0. - Una sola istruzione di salto: IF R[i] = 0 THEN GOTO n (altrimenti prosegui). 25

Altre semplificazioni: - eliminazione di nastri di ingresso e uscita - eliminazione dell'accumulatore - eliminazione dell'indirizzamento indiretto Convenzioni: - all'inizio l'input è nei registri 1,..., n - tutti gli altri registri contengono 0 - al termine l'output è nel registro 1 - la macchina si arresta se si richiede un salto ad un'istruzione che non esiste. 26

Possiamo simulare tutte le istruzioni di una RAM: LOAD 1 ADD 2 STORE 1 si realizza nel seguente modo: IF R[2] = 0 THEN GO TO 6 R[2] := R[2] - 1 R[1] := R[1] + 1 R[3] := R[3] + 1 IF R[4] = 0 THEN GO TO 1 IF R[3] = 0 THEN GO TO 0 R[3] := R[3] - 1 R[2] := R[2] + 1 IF R[4] = 0 THEN GO TO 6 27

Teorema. Ogni funzione f: N n N calcolabile con una RAM è calcolabile con una MREL e viceversa. In conclusione si può osservare come semplici istruzioni di incremento e decremento di registri (contatori) siano sufficienti ad effettuare il calcolo di una qualunque funzione calcolabile. Vari altri risultati hanno mostrato come sia possibile definire modelli di calcolo estremamente elementari. ESEMPIO - Ogni funzione calcolabile può essere calcolata da una RAM con due soli registri. 28