Wat is Vectorisatie?

Optimalisatie die dezelfde berekening die in een lus per element wordt gedaan omzet in een vorm die met SIMD-instructies meerdere elementen tegelijk verwerkt. Voorwaarde is dat er tussen de iteraties geen datafhankelijkheid is.

Japanse benaming: ベクトル化

“Vectorisatie” komt voor in 4 oefenvragen uit 2 onderwerpen, bijv. Compilers, Geheugenhiërarchie en prestaties.

Vakgebied: Compilers

Nu oefenen: vragen over Vectorisatie

Welk soort instructie wordt gebruikt bij automatische vectorisatie door een compiler?

  1. AInstructies die een interrupt veroorzaken
  2. BSIMD-instructies die meerdere gegevens tegelijk verwerken
  3. CInstructies die de inhoud van de cache in één keer volledig wissen
Antwoord en toelichting tonen

Antwoord: B. SIMD-instructies die meerdere gegevens tegelijk verwerken

Automatische vectorisatie is een optimalisatie waarbij lussen die per arrayelement dezelfde berekening uitvoeren worden herkend en vervangen door SIMD-instructies die meerdere elementen tegelijk verwerken. Met een 128-bits SIMD-register kunnen bijvoorbeeld vier getallen van 32 bit tegelijk worden opgeteld, zodat het aantal berekeningen van de lus bij succes een vierde wordt. Voorwaarden zijn dat er geen afhankelijkheid tussen iteraties is en dat de data aaneengesloten liggen; bij een mogelijke overlap van pointers wordt het soms achterwege gelaten. Interrupts of cache-instructies spelen geen rol.

“Vectorisatie” in de toelichting

Vragen met “Vectorisatie” (4)

  1. Welk soort instructie wordt gebruikt bij automatische vectorisatie door een compiler?
  2. Wat is de belangrijkste reden dat de bovenstaande lus moeilijk te vectoriseren is met SIMD-instructies?
  3. Waarom herordent een compiler onder strikte instellingen de optelling (a + b) + c van floating-pointgetallen niet eigenmachtig tot a + (b + c)?
  4. Waarom wordt een bewerking die alleen de x-coördinaten optelt vaak sneller wanneer een array van structuren wordt omgeschreven tot een structuur van arrays (elke component in een eigen array)?

Verwante termen

SIMD Numerieke apertuur (NA) Abstracte syntaxisboom (AST) Basic block Common subexpression elimination Constant folding Control-flow-graaf (CFG) Inlining Instructiescheduling Intermediaire representatie (IR)

Naar de woordenlijst