Mit SSE in C#

Ich bin derzeit auf der Codierung eine Anwendung in C#, die profitieren könnten viel aus der Verwendung von SSE, als ein relativ kleines Stück code bewirkt, dass 90-95% der Ausführungszeit. Der code selbst ist auch perfekt für SSE (wie es matrix und vectorbased), so ich ging vor und begann, Mono zu verwenden.Simd und auch wenn dies einen signifikanten Unterschied in der Ausführungszeit, dies noch nicht genug ist. Das problem mit Mono.Simd ist, dass es nur noch sehr alte SSE-Anweisung (hauptsächlich von SSE1 en SSE2, glaub ich), die bewirkt, dass die dotproduct (oder Skalare/innere Produkt) z.B. bis 3 Anweisungen, während es sein kann, umgesetzt mit SSE4 in nur 1 Anweisung (und da SSE4 gibt es seit 2006 kann man getrost davon ausgehen, dass jeder moderne computer hat es jetzt). Auch eine Reihe von anderen Funktionen nicht enthalten sind (Holen Sie sich den absoluten Wert jeder Zahl zum Beispiel, die brauchen auch einen plumpen workaround).

Meine Frage ist, gibt es andere Bibliotheken, die ich anrufen kann von meinem C# - code, um die Verwendung von SSE/SIMD? Es ist auch möglich, die Verwendung von inline-assembly in C#, also anscheinend kann ich auch C++-code, obwohl dies bewirkt, dass eine kleine Leistungseinbußen, aber wenn jemand eine relativ einfach zu verwendende C++ - Bibliothek, die mit diesen Funktionen das wäre akzeptabel, denke ich.

Vielen Dank im Voraus für jede Hilfe.

Erstellen Sie eine Bibliothek-Klasse in C++/CLI. Sie können SSEx-Interna im code, zusammengestellt, die mit #pragma unmanaged-in-Effekt. Sie wird jedoch nie einen einzigen SSE4 Unterricht effizient, da der Aufwand bei der Umstellung von managed auf unmanaged code ausführen. Dauert etwa 5 Nanosekunden, plus was auch immer overhead ist eingebunden in das Marshalling von Argumenten und der unvermeidlichen Kopie, die Sie brauchen, um get-Variablen ausgerichtet, 16. Ihre systemeigenen code muss bedeutend genug sein, amortisieren sich diese Kosten.
"da SSE4 gibt es seit 2006 kann man getrost davon ausgehen, dass jeder moderne computer hat es von jetzt" - Penryn (Intel) war im Januar 2008 und Bulldozer (AMD) war im Oktober 2011. Wenn Sie nicht über ein fallback auf SSE2 code-crash auf alle CPUs, die älter als diese Daten für Intel und AMD jeweils.
Sie können opencl-Wrapper.

InformationsquelleAutor me me | 2013-05-27

Schreibe einen Kommentar