Vad är Superscalar?

En superskalär processor kan självständigt utföra flera instruktioner samtidigt under en enda klockcykel. Den inkluderar redundanta exekveringsresurser, såsom flera flyttalsenheter, aritmetiska logiska enheter och heltalsskiftare. Denna typ av processor är designad för parallell beräkning och spekulativ exekvering utan behov av speciell programvara. Det kan förbättra exekveringshastigheten för många processorintensiva applikationer genom att manipulera och ordna om koden. Det används ofta i flera klasser av datorer, inklusive servrar, stationära datorer och till och med bärbara datorer.

Även om vissa aspekter av arkitekturen har använts i processorer sedan 1960-talet, släpptes äkta superskalära processorer inte förrän långt senare. Vissa RISC-processorer (Reduced Instruction Set Computing) som såldes i slutet av 1980-talet och början av 1990-talet var superskalära. Deras enkla kärnor och instruktioner med fast längd gjorde det relativt enkelt att skicka och schemalägga parallella instruktioner. Många icke-RISC-processorer tillverkade sedan slutet av 1990-talet har också superskalära arkitekturer. Inbäddade processorer med låg effekt och andra specialprocessorer är ofta undantag, som optimerar andra aspekter av deras design istället för parallellt exekvering.

Vissa processorer kan dela en enda pipeline med instruktioner från flera exekveringstrådar, så kallade super-threading. När en funktionell enhet är inaktiv eftersom den väntar på den aktuella tråden, kan den köra en instruktion från en annan tråd under tiden. Denna teknik hjälper till att utnyttja processorn fullt ut men är inte lika effektiv som simultan multithreading (SMT). En enda superskalär processor kan exekvera flera instruktioner från flera trådar samtidigt med hjälp av SMT. Att köra trådar samtidigt kan konkurrera om system- och processorresurser, vilket kan sakta ner systemet.

Processorer med flerstegspipelines kan exekvera flera instruktioner samtidigt så länge de befinner sig i olika exekveringsstadier. Däremot kan flera instruktioner utföras i samma steg samtidigt i en superskalär processor. Även om det finns många likheter mellan den här typen av processor och en flerkärnig processor, är de inte samma sak. En flerkärnig processor innehåller flera kompletta processorer, så kallade kärnor, i en enhet. Varje kärna i en flerkärnig processor är vanligtvis superskalär och kan inkludera flera parallella pipelines.

En nyckelfunktion hos en superskalär processor är dess förmåga att exekvera programkod ur funktion av effektivitetsskäl. För att göra detta måste den vara medveten om alla instruktioners beroende av en annan. Om en instruktion påverkar resultatet av eller använder en annans resurser, är det högst troligt att de två inte får utföras parallellt. Det finns tekniker för att eliminera vissa typer av beroenden, men andra måste fördröja bearbetningen tills resurser är tillgängliga.

Utförande i ordning måste också kunna garantera korrekt innehåll i register, flaggor och andra resurser om ett systemavbrott inträffar. I det här fallet måste systemtillståndet se likadant ut, som om koden hade exekverats sekventiellt enligt planeringen. En annan övervägande är hur många instruktioner processorn bör undersöka för att hitta möjligheter till parallell exekvering. Ju större antal, desto effektivare kan utförandet bli. Detta inkluderar även spekulativ exekvering av instruktioner på andra sidan av varje gren i den granskade koden.