Oltre il 68000 - I coprocessori Floating Point Eccoci ancora qui ad occuparci dei vari componenti della famiglia Motorola MC68000, sulla quale come ormai tutti voi saprete si basa il nostro Amiga: nel numero precedente di Amazing ci eravamo occupati di quei circuiti che vengono raggruppati sotto il nome generico di MMUs, grazie ai quali le funzioni di memory management alle quali sono chiamati i sistemi operativi multitasking vengono grandemente semplificate ed ottimizzate dal punto di vista delle prestazioni. Questa volta ci occuperemo di un'altra categoria di coprocessori, genericamente noti come FPUs (Floating Point Units), in grado di velocizzare grandemente tutte le operazioni matematiche che il sistema deve eseguire, dalla semplice addizione alle piu' complesse operazioni trascendenti. L'incremento delle prestazioni di un sistema dotato di questo genere di coprocessori, soprattutto quando questo deve svolgere applicazioni intensive dal punto di vista matematico (pensate ad esempio ad un ray tracer quale lo Sculpt-3D o a qualsiasi altro number cruncher), rende la presenza di questi chips nel sistema una feature abbastanza ambita da una larga base di utenti, che spesso sono in grado di comprenderne meglio i benefici, direttamente visibili sotto forma di drastiche riduzioni dei tempi di elaborazione, di quelli, altrettanto notevoli, apportati dalle Memory Management Units, che restano in qualche modo celati all'utente dal sistema operativo, che normalmente e' l'unico programma che con esse interagisce. Motorola e' presente sul mercato con due di questi chips, espressamente dedicati alla famiglia delle MPU 68000, contraddistinti dai codici MC68881 ed MC68882, che si diversificano essenzialmente per il livello di prestazioni ottenibile, maggiore per 68882, in quanto per il resto sono tra loro compatibili sia a livello software che hardware, essendo quindi totalmente intercambiabili tra loro (la compatibilita' e' garantita passando da 68881 a 68882, mentre in caso contrario potrebbero sorgere dei problemi se il software e' stato concepito esplicitamente per il chip di prestazioni piu' elevate: questa e' comunque una eventualita' piuttosto remota, dato che, in linea di principio, non vi sono molte ragioni per un "degrade" delle prestazioni del proprio sistema). Anche questi due chips rientrano nell'ottica, secondo noi vincente, che vede un moderno computer non come un'unica CPU programmata in modo da svolgere tutti i tasks a cui e' chiamata, ma come una MPU, possibilmente potente quanto una della famiglia 68000, attorniata da altri coprocessori studiati per occuparsi in maniera altamente efficiente di tasks specializzati, realizzando cosi' una implementazione su silicio dei concetti tayloristici di divisione del lavoro, in grado di aumentare grandemente l'efficienza complessiva del sistema. MC68881/2 close up: Entriamo ora nel vivo della descrizione di queste due FPU (o meglio FPCP, Floating Point CoProcessors, come ufficialmente vengono definiti dalla casa produttrice): entrambi questi prodotti implementano completamente lo standard ANSI-IEEE 754-1985 per l'aritmetica binaria in virgola mobile e sono costruiti in tecnologia VLSI secondo il processo HCMOS di proprieta' Motorola, che permette di soddisfare sia le esigenze di basso consumo che quelle di riduzione dell'area di silicio occupata. Tutti e due contengono inoltre un'area di ROM on chip con ventidue tra le piu' usate costanti numeriche, tra cui PI greco, ed e (numero di Nepero), oltre al completo supporto di una vasta libreria di funzioni trigonometriche e trascendenti non previste dallo standard 754, un register file con otto registri floating point ad 80 bit e tre registri a 32 bit utilizzati come control register, status register ed instruction address register, una ALU a 67 bit ed un barrel shifter ad alta velocita' della stessa dimensione. Anche questi due FPCP, come il nome stesso lascia intendere, implementano l'interfaccia coprocessori di Motorola, che gia' avevamo incontrato nel numero precedente in MC68851 PMMU, grazie alla quale sono in grado di integrarsi totalmente in un sistema basato sulle MPU a 32 bit di questa serie (020 e 030) operando quindi in modo il piu' possibile trasparente per l'utente, il quale le vede come facenti parte integrante della MPU stessa, senza tuttavia precludere minimamente la possibilita' di essere collegate come periferiche ai restanti microprocessori dotati di bus a 8 o 16 bit. Questa caratteristica ha permesso una grande diffusione di questi prodotti, che sono praticamente diventati IL coprocessore matematico dei 68020/30, sebbene siano disponibili, per applicazioni decisamente specializzate, altri prodotti estremamente efficienti quali ad esempio le FPU prodotte da Weitek ed utilizzate su alcune engineering workstations di alto livello, dato che questi chips richiedono dei metodi di interfacciamento piu' complessi e non sono cosi'ampiamente supportati da compilatori ed assembler quanto i prodotti Motorola. Dal punto di vista software l'FPCP appare al programmatore come se fosse stato implementato sullo stesso silicio della MPU 020/030; per quanto riguarda i modelli inferiori della gamma 68000 e' invece necessario emulare il protocollo di comunicazione tipico dei coprocessori Motorola con una routine, possibilmente in modo supervisore, in grado di intercettare il Trap di LineF emulation che verrebbe generato da queste MPU ogni volta che viene incontrata una istruzione destinata ad un coprocessore, cosa abbastanza semplice da realizzare ridirezionando il giusto vettore di exception del processore, sito nel primo kb dell'address space. C'e' da dire a questo proposito che, a differenza di una PMMU, la cui adozione comporta delle modifiche abbastanza sostanziose al kickstart di Amiga, il supporto necessario ad un coprocessore floating point e' gia' stato previsto in sede di progettazione del sistema operativo del nostro computer e puo' essere fornito ai propri programmi semplicemente linkando con le giuste librerie il codice oggetto prodotto da uno qualsiasi dei piu' diffusi compilatori. Le differenze tra MC68881 e MC68882: Questi due coprocessori sono caratterizzati da un elevatissimo grado di compatibilita', addirittura al punto da essere possibile la loro diretta sostituzione sulla scheda del computer senza la necessita' di nessun genere di modifica al software: le differenze, tuttavia, esistono e sono anche abbastanza profonde a livello di circuiteria interna, che nel 68882 e' assai piu' evoluta di quella del suo predecessore, comprendendo una parte totalmente nuova, denominata CU (Conversion Unit) che si prende in carico tutte le conversioni di formato liberando cosi' l'APU (Aritmetic Processing Unit) da questo lavoro e rendendo quindi possibile l'esecuzione delle istruzioni floating point non solo in modo concorrente con la MPU, ma anche all'interno del FPCP stesso, aumentando in tal modo l'efficienza e la velocita' di esecuzione. Questa particolare caratteristica di MC68882, tuttavia, per essere sfruttata al meglio delle sue possibilita', richiede una particolare ottimizzazione del codice che viene passato al coprocessore, consistente nel riorganizzare l'ordine in cui le istruzioni vengono eseguite, come viene spiegato nell'User Manual di questo chip, onde mantenere costantemente impegnati sia l'APU che la CU. Attualmente non ci risulta che esistano su Amiga dei compilatori in grado di portare a termine automaticamente questo genere di ottimizzazione; nonostante cio' anche dalla semplice sostituzione fisica di un 68881 con un 882 ci si puo' aspettare un incremento delle prestazioni floating point che, sebbene difficile da quantizzare, puo' essere valutato nell'ordine del 10 - 25%. Le alternative non Motorola: Sebbene un coprocessore matematico sia un componente abbastanza specializzato, e' possibile reperire sul mercato una rosa abbastanza elevata di circuiti concepiti per questo scopo con ottimi livelli di prestazioni e con costi che crescono in maniera vertiginosa mano a mano che ci si porta su FPUs sempre piu' rapide, al punto che anche il costo dei coprocessori nella fascia di prestazioni subito superiore a quella dei chips fin qui considerati, quali ad esempio i summenzionati Weitek, si attesta intorno ai 1500-2000 $/pezzo. Si tratta in questo caso di componenti estremamente sofisticati che, sebbene utilizzino piu' o meno lo stesso genere di approccio dei chip Motorola per portare a termine le singole operazioni, sono in grado di ridurre notevolmente il collo di bottiglia che si verifica sul bus di sistema, dovuto alle richieste contemporanee di accesso da parte di MPU ed FPCP, aumentando cosi' le prestazioni di un fattore che puo' variare a secondo della configurazione ma che comunque e' mediamente compreso tra il 50 ed il 200%. L'interfacciamento tra questi chips e una MPU non e', purtroppo, cosi' semplice quanto quello dei componenti che nascono come dedicati: essi si basano sul modello cosiddetto Memory Mapped, che permette di passare contemporaneamente al coprocessore l'istruzione da eseguire ed il dato da elaborare, riducendo cosi' drasticamente l'attivita' sul bus: l'acceleratore numerico viene visto dal processore principale come se fosse un'area di memoria, posta ad un indirizzo dipendente dalle singole implementazioni. Ogni ciclo di indirizzamento all'interno di questa area seleziona una delle possibili istruzioni del coprocessore, mentre il dato ad essa relativo si trova sul data bus; ammettendo che ad indirizzi diversi corrispondano diverse operazioni, risulta evidente come in questo modo si riesca nel caso peggiore a dimezzare l'attivita del bus relativa al coprocessore. Interfacciare uno di questi chip ad Amiga, benche' indubbiamente fattibile, implica la soluzione di una serie di problemi che non sono poi cosi' banali, dalla realizzazione di una scheda dotata della glue logic (circuiteria di interfacciamento) necessaria a quella di una libreria in grado di gestire il tutto, dato che il supporto per questi chip non viene fornito dai normali compilatori. Per necessita' di elaborazione ancora piu' spinte (piu' vicine a quelle di un supercomputer che a quelle di Amiga) sono poi disponibili altre soluzioni ancora piu' sofisticate (inutile dire anche molto piu' costose) quali ad esempio quelle basate su processori bit-slice studiati appositamente per questo compito: a questo livello, tuttavia, non esiste quasi mai una soluzione preconfezionata e si deve qundi costruire il number cruncher assemblando moduli quali ALU, barrel shifters, banchi di registri etc. in modo da creare una unita' custom ottimizzata al limite per uno specifico problema e che non potrebbe essere piu' altrettanto valida se applicata alla soluzione di un diverso tipo di problema. Una particolare classe di componenti in grado di effettuare elaborazioni numeriche ad altissima velocita', anche se su di una classe circoscritta di problemi, e' quella conosciuta sotto il nome di DSP (Digital Signal Processor), alla quale appartiene il Motorola 56001: un esempio della loro grande potenza di elaborazione ci viene fornito dal NeXT, l'ultima macchina ideata da Steve Jobs, che utilizza per l'appunto un 56001 in abbinamento con un 68882 come number cruncher per una MPU 68030. In questa nuova macchina il 68882 si occupa di eseguire tutte le elaborazioni numeriche di carattere generale, mentre il DSP si occupa principalmente di quelle (e sono tante) collegate con la sintesi in tempo reale di suoni di elevatissima qualita': lo scopo principale di questo componente, che puo' essere liberamente riprogrammato, e' quello di rendere possibili simulazioni del comportamento di segnali, anche analogici, in tempo reale, cosa di grande utilita' per applicazioni scientifiche ed ingegneristiche, che sono il target principale a cui questa macchina e' dedicata. Per esemplificare meglio la potenza di questo dispositivo vi bastera' pensare ad una applicazione dimostrativa che gira sul NeXT, che utilizza il 56001 come equalizzatore stereo a 10 bande in tempo reale sul segnale proveniente da un compact disk; cio' significa effettuare dieci filtraggi FIR per ogni campione a 12 bit proveniente dal compact, ad una cadenza di 88.400 campioni al secondo (ed ogni operazione di filtraggio richiede un congruo numero di operazioni quali moltiplicazioni ed addizioni), task tuttaltro che semplice e che tuttavia il DSP puo' affrontare senza defaillances. In conclusione: Nelle pagine precedenti abbiamo dato una scorsa a quello che sono i dispositivi specifici per l'elaborazione numerica che possono essere integrati nell'ambiente MC6800 e quindi almeno in teoria collegati al nostro Amiga: in pratica, tuttavia, la rosa di chips che ha senso inserire in ambiente Amiga comprende esclusivamente MC68881/2 FPCP, del resto gia' in grado di generare un throughput dell'ordine del milione e mezzo di Whetstones, di almeno tre ordini di grandezza superiore a quello della sola MPU ed oltre al quale non ha piu' molto senso l'impiego di Amiga, dato che si e' gia' abbondantemente nel campo delle prestazioni dei supermini. Per chi volesse inserire un MC68881 o MC68882 nel proprio Amiga sono inoltre disponibili presso diversi produttori di accessori hardware delle schede multifunzionali che prevedono uno zoccolo dedicato a questi chip, oltre a delle scede acceleratrici (specificatamente per A2000) che montano un 68020 o 30 ed uno zoccolo per FPU: grazie a questi prodotti e' possibile portare le prestazioni di un Amiga al livello di quelle di un VAX con una spesa di circa 3-4000 $, cosa che sara' decisamente gradita a tutti coloro che necessitano una macchina di elevatissime prestazioni come number cruncher ad un prezzo accessibile, pensiamo ad esempio a chi fa grafica in ray tracing a livello professionale e non puo' certo limitarsi ad una produzione di un paio di frames al giorno, che sono il limite medio di un A2000 in configurazione base, e nel contempo non puo' o non vuole spendere un paio di centinaia di milioni per ogni macchina. Se le vostre esigenze sono invece tali da richiedere qualcosa di piu' sofisticato, e' difficile pensare di risolverle utilizzando un Amiga, che per quanto sia una buona macchina non puo' essere sfruttata al di la' di un certo limite: a questi livelli infatti e' sovente necessario sviluppare sia l'hardware che il software ottimizzandoli per l'impiego a cui sono destinati, il che implica indirettamente il mettere in secondo piano le considerazioni sui costi. Stefano A. M. Lassini