capypad
0 Tage Serie
csharp / expert
Snippet

SIMD-Vektorisierung mit Vector<T>

Single Instruction, Multiple Data (SIMD) ermöglicht es einem einzigen CPU-Befehl, mehrere Datenpunkte gleichzeitig zu verarbeiten. Vector<T> in C# ermöglicht hardwarebeschleunigte Parallelverarbeitung auf Arrays, was die Performance für mathematische und datenintensive Algorithmen erheblich steigert.

snippet.csharp
csharp
1
2
3
4
5
6
7
8
public void VectorAdd(int[] a, int[] b, int[] result) {
int vSize = Vector<int>.Count;
for (int i = 0; i <= a.Length - vSize; i += vSize) {
var v1 = new Vector<int>(a, i);
var v2 = new Vector<int>(b, i);
(v1 + v2).CopyTo(result, i);
}
}
Erklärung
1
int vSize = Vector<int>.Count;
Ruft die Anzahl der Elemente ab, die die Hardware in einem Register verarbeiten kann (z.B. 4 oder 8).
2
(v1 + v2).CopyTo(result, i);
Führt die Addition auf allen Vektorelementen gleichzeitig aus und schreibt sie in den Speicher zurück.