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
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.