Altri articoli sul numero 63
 Articoli sullo stesso argomento

Alcuni  programmatori  assembler  hanno  chiesto come mai la
velocita'  di  accesso  alla Chip RAM e ai registri dei chip
custom su A4000/040 e' inferiore a quella dell'A1200 base, a
parita'  di  modo video e carico DMA:  tutti i programmi che
fanno  continuo accesso alla Chip RAM e ai registri dei chip
custom  (es:   i  demo)  su  A4000/040 girano piu' piano.  A
volte   cio'   significa   che   non   girano  affatto:   le
sincronizzazioni  del  programma saltano e il 4000 si pianta
(chiaramente  in  questo  caso  non sono stati scritti da un
"coder" in gamba).

Il  motivo  e'  semplice  se  si riflette sul modo in cui il
68040  deve accedere alla Chip RAM.  Come esempio, prendiamo
il  caso  in  cui  il DMA video e' inattivo (es:  durante il
blanking)  e  bisogna copiare nel registro D5 un valore a 32
bit, che risiede in Chip RAM allineato alla longword.

Poiche'  la  cache dati non e' abilitata per la Chip RAM, il
68040  eseguira'  un  ciclo  di  bus con lettura di longword
singola.   Durante  il  primo ciclo di clock a 25Mhz (quindi
passano 40ns) il 68040 esegue tutti i preparativi.  A questo
punto  sarebbe  pronto  per  leggere  la  longword,  ma  per
inefficienze  delle  PAL della scheda 68040 Commodore devono
passare  altri  due  cicli di clock (altri 80ns) prima che i
segnali  arrivino  al  connettore  della  scheda  CPU:   nel
frattempo il 68040 e' tenuto bloccato.

I  segnali  finalmente  giunti sulla motherboard arrivano al
Fat  Gary,  che obbedisce agli ordini e inizia la manovra di
accesso  alla  Chip  RAM:   ma a malincuore dice alla CPU di
aspettare  sinche'  il  clock a 7Mhz che governa gli accessi
della  Chip  RAM  esegue  una transizione dallo stato alto a
quello  basso,  per  dare  tempo alla povera Alice di capire
quello  che sta succedendo:  in media trascorrono altri 71ns
(se  siamo  particolarmente  sfortunati  pero'  ci  vuole il
doppio).   A questo punto se il ciclo successivo del clock a
7Mhz  e'  dispari  il  68040 ha il "via libera" per accedere
alla  Chip  RAM,  altrimenti  deve  attendere ancora per due
cicli  del  clock  a 7Mhz (282ns):  mediamente attende altri
141ns.

Trascorso  questo  tempo,  Fat  Gary  ordina  a Bridgette di
aprire  le  porte  della  Chip  RAM  al  68040.  Purtroppo i
cardini  sono  un  po'  arrugginiti per l'eta' e ci vogliono
altri  16ns (il doppio se l'accesso non fosse allineato alla
longword).   Le  "porte"  restano aperte esattamente per due
cicli  del clock da 7Mhz, 282ns durante i quali il 68040 sta
ancora fermo.  Se dividiamo il tempo di attesa totale per la
durata   di  un  ciclo  di  clock  a  25Mhz  e  arrotondiamo
all'intero  superiore  (si  deve  fare  perche'  la  CPU  e'
asincrona  con la motherboard) abbiamo il numero di cicli di
CPU complessivi necessari per leggere una longword in questa
situazione  ottimale:   16,  cioe'  sono stati introdotti 14
stati  di  attesa  (al  68040  basterebbero 2 soli cicli per
eseguire una lettura) ed ci sono voluti 640ns.

Nel  caso di A1200 le cose procedono molto diversamente.  Il
68020  ha  bisogno  di  tre  cicli  di  clock  a  14Mhz  per
completare  una lettura invece dei due a 25Mhz del 68040, ma
il  suo  clock e' sincrono con quello a 7Mhz che governa gli
accessi  in  Chip  RAM  e  (come  nel caso di A500/A2000) il
ritardo  della porta viene nascosto.  Quindi la CPU del 1200
spende  il  primo ciclo di clock a 14Mhz (71ns) per emettere
l'indirizzo;  di  nuovo  se  il ciclo successivo del clock a
7Mhz  e'  dispari  il  68020 ha il "via libera" per accedere
alla Chip RAM, altrimenti deve attendere due cicli del clock
a  7Mhz  (282ns):   mediamente  attende  141ns.   Infine per
leggere  la  longword  dalla  Chip  RAM occorrono i canonici
282ns.

In  totale  sono  bastati 494ns:  146ns meno dell'A4000/040.
Nel  tempo  impiegato  per  leggere 150 kilobyte di Chip RAM
l'A4000/040  resta  indietro  di  un'intero  frame  rispetto
all'A1200  inespanso:   ovviamente  nelle applicazioni reali
questi  dati servono per fare dei calcoli, ed e' qui dove il
4000 straccia il 1200 recuperando ampiamente il tempo perso.

Questo   esempio   e'  un  caso  estremo,  semplificato  per
facilitare  la  comprensione  e  senza  la pretesa di essere
rigoroso.  I tempi reali sono un po' diversi e si dovrebbero
considerare  altri  fattori,  ma  il risultato e' confermato
dalla pratica e dimostra ancora una volta che i due stati di
attesa  extra  della  scheda  68040 Commodore e la scelta di
voler conservare lo slot CPU di A3000 (che sull'A4000/040 e'
un corpo estraneo) hanno un effetto rovinoso.

Le  acceleratrici  per  A1200 e la scheda 68030 di A4000 non
peggiorano significativamente le prestazioni della Chip RAM:
un  rallentamento  c'e' sempre perche' bisogna sincronizzare
parti  che  viaggiano  a  clock diversi, ma e' trascurabile.
Chi desidera conoscere la differenza esatta di velocita' tra
la  Chip  RAM  (e  di  conseguenza anche i registri dei chip
custom)  di  A1200, quella di A4000/040 e quella di un A1200
accelerato  puo'  scriversi  una  banale  routine assembler,
badando  che  entri  tutta nella cache istruzioni del 68020.
In questo modo si puo' anche facilmente controllare che cosa
accade al variare del carico DMA video.


Main Previous Next