Dank je voor de link. Ik begin het beter te begrijpen. Ik ga het proberen simpel uit te leggen...
Multi-core tasks:
Basically wat ze doen is de L1 cache op een bijzondere manier sharen en L2 cache sharen. L3 cache hebben ze niet. De bijzondere manier van sharen houdt in dat ze (waarschijnlijk 64-bits aan) data kunnen delen in iets minder dan 1 kloktick.
When tasks are split across cores it adds a cycle to the scheduling and execution portions of the processor but that seems like a small price to pay especially if it is only intermittently needed.
Dat betekent dat je deze grap kunt uithalen:
-> worload: add, add, add
-> core 1: add & share, yield, add
-> core 2: yield, add&share.
(voor het gemak zijn fetch & store weggehaald).
Kortom, als synchronizatie mechanisme kunnen ze yields (wacht 1 kloktick) gebruiken omdat ze weten dat een cache-sync minder dan 1 kloktick duurt. Dit is leuk, omdat je nu de 'yields' kan invullen met andere instructies die ook 1 kloktick duren -- en daarvan gaat het harder. Deze grap werkt omdat de verschillende cores allemaal dezelfde klok gebruiken.
Ik verwacht dat de microcode als gevolg allemaal instructies heeft van 1 kloktick; dat scheduled gewoon makkelijk (en het is prima om complexe instructies om te schrijven; AMD en Intel doen dat ook al jaren via microcode).
Next up is a question of scaling, how high can things go for core counts? Soft Machines says that the Shasta architecture can go to 4/8 cores, basically double what they have now, without taking a latency hit.
4 cores klinkt logisch, omdat je de L1 cache zo kan positioneren dat de cores op gelijke afstand zitten (en dan werkt het bovenstaande mechanisme). Bij meer cores verwacht ik een flinke latency hit -- want dan moet je alsnog via L2 cache. Basically krijg je dan deze situatie (die ik ook beschrijf in de eerdere reactie):
The best they could do is get the data from a shared L2 or L3 which would both pollute the L1s and/or slow things down to the point where any gains from splitting the task would be lost and then some.
Single-core tasks:
Ook hier geeft het artikel een antwoord op:
Occasionally this software will need to do something more complex but the bulk of the work is basically a big lookup table. [...] They don’t emulate code, they just translate it to the native ISA, a 32-bit add is a 32-bit add on both native and emulated hardware, but probably have differing opcodes.
Basically is dit wat de standaard translation table in je processor ook doet. Een instructie levert N andere "RISC" instructies op die door de processor worden afgehandeld. Dat is meestal een 1:1 vertaling, maar kan ook iets lastigers zijn (zoals bijv. bij DIV).
Het enige verschil is dat je dit ding kan programmeren, analoog aan microcode firmware upgrades. Kortom, het is mogelijk de processor on-par te krijgen met "normale" Intel processoren, mits de microcode genoeg instructies aankan.
Voorzichtige conclusie:
De grootste innovatie van VISC is het L1 cache sharing mechanisme, wat kan worden gebruikt om synchronizatie problemen tussen processoren op te lossen. Dat geeft nieuwe mogelijkheden met hyperpipelining, wat je hiermee kan schalen van 2 threads naar 4 (zij claimen 4/8 als max) -- en dat is precies waar ze reclame mee maken. Nice, hebben ze goed verzonnen.
Dat je er meerdere instructiesets op kan draaien zie ik niet heel erg het nut van in voor consumenten of bedrijven. Dit zie ik vooral een middel om "interface completeness" en "patches" te kunnen ondersteunen -- wat het een nuttige feature maakt voor bedrijven als Intel/AMD en adoptie makkelijker maakt.