SIMD-Vektor-Crunching
摘要
Vektorrechnung kann als Rechnen mit replizierten ALUs gelesen werden. Um von dieser Hardware-Parallelität zu profitieren, müssen wir unsere Berechnungen als Operationssequenzen über kleinen Vektoren formulieren. Wir diskutieren, wie gut geeignete Schleifen aussehen müssen, die Vektoreinheiten ausnutzen können, wir diskutieren das Verhältnis zwischen Schleifen mit Vektorisierung und teilweiser Schleifenentfaltung, und wir diskutieren den Unterschied zwischen horizontaler und vertikaler Vektorisierung. Diese Erkenntnisse ermöglichen es uns, Realisierungsvarianten der Vektorisierung auf dem Chip zu untersuchen: Werden breite Vektorregister verwendet, oder führen wir Hardware-Threads mit Lockstepping ein, wie erleichtern Maskierung und Blending die effiziente Handhabung leichter Thread-Divergenz, und warum erfordert nicht-kontinuierlicher Datenzugriff, dass wir Registerinhalte sammeln und verteilen?