Jeg syntes, det lyder rigtigt kedeligt. Specielt, hvis det bare er en "simpel" paritetskontrol. Men uanset dybden af kontrollen, og dens merforbrug, så er risiko for at det går galt. Måske både med kontrollen, og beregningen.
Metoden, viser tydeligt, at AMD og Intel aldrig har hørt om asynkrone processorer, trods de har haft nogle få projekter i disse. Men lært af disse - det har de åbentbart ikke. En langt bedre metode, der ikke giver anledning til fejlberegninger, og ting der skal gøres igen, ekstra kontrolkredsløb der bruger strøm osv. er asynkron logik. Her arbejdes med true, false, og none. Når du udfører en operation, nulstiller du først alt til "none". Dette tager lidt tid, og gør at teknikken ikke er så hurtig. Herefter, går det hurtigt. Sætter du dine data på din CPU, får du svar, så snart de foreligger. Og det går hurtigere end for synkron logik. En inverter, er bare to krydsede ledninger - og tager ingen tid. Fordi alt findes på både normalt, og komplement form, er det ofte hurtigere end synkron logik. Samtidigt bruges kun NMOS transistorer - og de er hurtigere. Normalt CMOS logik, har kæmpe kapaciteter og P-MOS transistorer med dårlig ledeevne, der trækker ned. Netop denne dårlige ledeevne, præger Intels logik.
Når nogle har fået langsommere resultateter i asynkron logik, skyldes det at de ikke har været dygtige. Det kræver flere transsitorer, fordi man skal nulstille CPU'en (eller blokke deraf), men selve beregningen går hurtigere. Hvis der derfor er flere blokke, eller CPU'er der arbejder på skift, så går hastigheden op.
Og så kommer oveni, at strømforbruget er lavere. Fordi der er flere transistorer, spredes samme funktion ud på større område - men med mindre forbrug, og per areal bliver forbruget ikke så stort ved samme udregning. Til gengæld, kan normalt laves væsentligt flere udregninger i sekundet, da man umiddelbart fortsætter til næste fase, så snart resultatet af tidligere beregning foreligger. Har du f.eks. en addition, hvor to tal lægges sammen, så vil deres bit "ribble" igennem. Imidlertid, så er det kun hvis det er nødvendigt. Ofte, vil bit 7 komme prompte - og kan derfor bruges ved beregning af jump/branch. Og samme med de andre bits. Så snart de forekommer, kan de gå videre til efterfølgende. Er der ikke afhængigheder, foreligger beregningen straks, og man kan gå videre til næste beregning straks. Til gengæld, kræves lidt analog kunnen, hvis man skal lave det godt. Det kan give større hastighed.
En godt designet asynkron processor, er væsentligt hurtigere end dens synkrone "ditto". Laver du en kæmpe VLIW CPU, hvor flere indstruktioner udregnes samtidigt, så kan du udregne mange indstruktioner, uden det tager tid - fordi det er "dybden" af opgaven, som betyder noget. Evt. afhængigheder mellem CPU'erne, giver anledning til en dybde, og denne bestemmer tiden. Som regel, er denne dybde logaritmisk med antallet af CPU'er, og har du således en VLIW processor, med 128 CPU'er, så er dybden 7, hvilket svarer til det tager 7 indstruktioner at udfører 128. Kræver alle indstruktioner data fra de forrige, vil det kræve en dybde på 128 - så 7 er kun typisk. Imidlertid, viser det sig, at hastigheden, for at udføre disse 128 indstruktioner, der alle bruger hinandens data, også er væsentligt hurtigere, end for en normal VLIW, fordi man kan designe den med hensyn til at flowet i resultat retningen minimeres, og fordi at f.eks. invertere ikke bruges. Kombineret med, det kun bruges n-mos, så er forsinkelsen langt mindre, end i CMOS. Der er ikke de tunge P-MOS transistorer der giver problemer. Problemet er mere verificeringen af, at alle data foreligger, og man kan fortsætte. I nogle tilfælde kan det give lidt tung logik, men her findes triks der kan løse det. Så det er ikke et problem.
Få steder - f.eks. ved ram kredse - er det en ulempe med asynkron logik. Årsagen er, at et normalt ramlager fungerer ved meget små spændinger, som transformeres op af en klokket differentialforstærker. Og netop her - hvor det ikke er sædvanlig logik - er en fordel, at kunne forstærke de små spændinger, når man mener de er store nok. Det er nok muligt, at lave analoge forstærkere der gør dette, og som kan give svar på hvornår data foreligger - men det er lidt mere kompleks. Ved skrivning til ram, vil man normalt også bruge self-timed logik - men det kan vises, at skrivning ikke betyder noget. Det kan altid caches, og man kan altid skrive flere bytes af gangen, hvor det er kritisk.
Når Intel og AMD vil lave en CPU, som ikke fungerer, er det ikke første gang. Sidste forsøg var pentium fejlen. Havde IBM ikke gået imod, så havde vi haft pentium fejl endnu - og de var nok vokset. For hver generation, kommer større afvigelse, og større fejl. Sådan er det gået med software, fordi man ikke har sagt at vi intet accepterer, hvis det ikke er 100% perfekt. Indenfor hardware, har vi altid gjort det. Er der noget, der ikke fungerer - så kan vi ikke "bare" rette fejlen. Tingene skal fungere. I nogle tilfælde, kan vi måske tillade os at rette fejlen, hvis vi er sikker på det går godt - men vi bør notere os, at det er sket fejl, så vi ved vores hardware ikke har været godt nok udviklet.
Med andre ord, er Intel ude på et sidespor. Og det er stor sandsynlighed for, at det kun kan føre til at fremtidens processorer, faktisk regner forkert. Dog, ikke ofte - men så tit, at vi aldrig kan vide, om det er en regnefejl, eller en softwarefejl. Hos Intel, kan man hævde, at sandsynligheden er mindre, end for software fejl.
Bruges asynkron teknik, opnås præcis de samme fordele. Samtidigt, opnås fordel i hastighed, fordi logikken er N-MOS. Der opnås fordel, fordi alt er på normal og komplement form, uden det tager ekstra tid. Der opnås større hastighedsfordel, fordi man bitvis kan se, at operationen er færdig - og det går hurtigere, end hvis man skal "antage" en fiktiv synkron hastighed, som afstemmes. Det sidste, vil simpelthen ikke fungere. Der er stor forskel på hver enkelt indstruktion, og på data. En asynkron CPU giver ofte stor hastighed, fordi der bruges tallet 7 i stedet for 9. Den kommer hurtigere igennem. Du kan ikke opnå det samme, ved at "gætte" en hastighed. Den hastighed du gætter, vil være forkert - undtagen for de data du har testet med. Og i alle andre tilfælde, vil den være ringere. Dette betyder nemt en faktor 3 - eller mere. Intels processorer, vil stadigt være 3 gange for langsomme, fordi de ikke kan justere genneralt optimalt. Og hvor det går galt, tager det ekstra tid. Ved asynkron logik er forsinkelsen eksakt den som det tager, i det enkelte tilfælde. Og det går ikke pludseligt for hurtigt, eller for langsomt. Samtidigt er resultatet altid korrekt. Mange mener endog, at asynkron teknik, er mere pålideligt, end synkron logik.
Hvis man - som Intel / AMD laver en fejlberegning, så koster denne beregning strøm. Der er masser af spikes i kredsløbet, fordi data må ændres. Det koster energi, og medfører varme. Dette findes ikke ved asynkron logik. Data kommer ind - og ud - og skifter højst éen gang. Der er ikke data, der går op, ned, op, ned, og så bestemmer sig, efter at have taget forkert, og være blevet sendt videre, og må gå om. Temperaturen vil være alt for stor, og typisk er forbruget væsentligt større, end for en asynkron CPU. Og giver højere temperatur, bedre hastighed?
Så det betaler sig ikke at regne forkert. Gør det korrekt. Og gør det korrekt i første huk. Tag den tid det tager, og sig når du er færdig - så nemt fungerer asynkron logik. Så snart du er færdig, kan de efterfølgende i princippet anvende svaret og fortsætte.
Synkron logik, regner forkert. Der bruges unødigt strøm til dette. Det går tid, inden output stabiliserer sig. Man sætter en tidsplan for, hvornår man ved output foreligger. Indtil dette, må man vente. Man har en "time manager", der fortæller hvornår tingene skal ske. Og det sker eksakt efter planen. Alt det som ikke kan vurderes korrekt, må sættes på at tage hensyn til worst-case. Herefter, skal data gerne foreligge korrekt, og hvis de ikke gør, er det bare kedeligt. Resultatet bliver taget trods forkert resultat. Nu vil Intel ikke mere sætte tidsplanen efter worst-case, men mere optimalt. Til gengæld, vil de indføre en "test" der sikrer resultatet er korrekt. Hvis det så ikke er korrekt, må man vente, til det er korrekt. Men, der er stadigt masser af unyttige spikes, testen tager tid, og kan være forkert, og forkerte data sendes videre og er årsag til senere forkerte beregninger, der så må gøres om. Det giver forbrug uden lige. Ikke noget for laptops.
Håber, at jeg har givet et indtryk af, at selvom Intels logik måske er fremtiden, så vil den aldrig blive god.