2016-06-29 30 views
-1

Es gibt ein langes Byte-Array, das zum Ziel-Array vom Typ short hinzugefügt werden muss. Die Lösung ist hier zu finden: SEE byte + short. Ich versuche, dies mit managed SIMD zu tun, die die Unterstützung von „entpacken“ Befehl fehlt (benötigte zum Entpacken einzelnen 16-Element-Byte-Array mit zwei 8-Elemente kurzen Arrays für die Zugabe) . Hier sind die unterstützten Operationen verwaltet SIMD:.NET SIMD Byte und ushort Array hinzufügen

enter image description here

Hat jemand eine Idee, wie die Zugabe von zwei Arrays (short [] = byte [] + short []) erreicht werden kann, die reduzierte SIMD mit Befehlssatz oben (Vermeidung von Skalaraddition)?

Antwort

0

Die folgenden API proposal fügen die Einschränkungs- und Erweiterungsoperationen hinzu. Die vorgeschlagene API folgt einem ähnlichen Design wie die zugrunde liegenden SSE2-Anweisungen; um zu erweitern, werden die untere und die obere Hälfte des Eingabevektors in zwei Ausgabevektoren geschrieben. Um zu verengen, werden Elemente, die von zwei Eingabevektoren kommen, konvertiert (mit einer Sättigung mit oder ohne Vorzeichen) und dann in einen einzelnen Ausgabevektor gepackt.

Da es sich um einen API-Vorschlag handelt, kann es sehr lange dauern, bis das Produkt tatsächlich ausgeliefert wird, oder es kann ewig dauern.

Diese Methoden sind nutzlos (in Bezug auf die Leistung), es sei denn, das JIT wird schließlich aktualisiert, um Intrinsics zu generieren. Dies bedeutet, dass Sie einfach annehmen sollten, dass die Fähigkeit noch nicht da ist. Wenn Sie derzeit einen systemeigenen Code verwenden (über C++/CLI oder P/Invoke), sollten Sie weiterhin Ihre aktuelle Vorgehensweise verwenden, da die Alternative noch nicht existiert.

Um den Status der JIT-seitige Implementierung herauszufinden: Add JIT intrinsics support for vector conversion on AMD64 and x86 #10662

auf den Kommentaren Basierend es in .NET Standard-nicht 2.0 sein wird, aber es ist wahrscheinlich, 2.1 Teil von .NET Standard.