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.
"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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Open-source - Yeppp! Bibliothek (ich bin der Autor) stellt SIMD-optimierte data-processing-Funktionen, und ist brauchbar von .Net Sprachen über die offiziellen " Bindungen. Es unterstützt nicht nur SSE, aber auch später-SIMD-Erweiterungen bis zu AVX2 aus der kommenden Intel Haswell-Prozessoren. Die Bibliothek wählt automatisch die optimale version für den Prozessor es läuft.
Es funktioniert unter Mono unter Linux (und natürlich unter .Net in Windows), aber Mac wird zur Zeit nicht unterstützt.
Laden Sie die neueste offizielle Version, und finden Sie vorgefertigte Dateien im Verzeichnis binaries
In der nächsten Version (Beta 3) Mac OS X werden ebenfalls unterstützt
Diese Bibliothek sieht toll aus, werde es testen mit einer audio-engine die ich bin-Kodierung rigth jetzt: kvraudio.com/forum/viewtopic.php?p=5526631
InformationsquelleAutor Marat Dukhan
April 2013, Steam-Umfrage berichtet, dass nur 64% von PCs haben support für SSE4.1. In anderen Worten, wenn Sie davon ausgehen, SSE4.1-Unterstützung, wirst du Abstürzen auf etwa ein Drittel aller consumer-PCs.
Ich bin nicht vertraut mit dem Mono.Simd, aber eine gute alternative auf Windows DirectXMath, wenn man sich die Mühe macht zu schreiben eine passende C++/CLI wrapper. Weder wird, profitieren Sie von den neuesten Informationen, aber ergänzen Sie diese haben müssen, auf Grundlage relativ leicht mit Interna. Ich bin mir nicht sicher, dass Sie werde in der Lage sein zu tun, deutlich besser als Mono.Simd mit ihm, obwohl.
Gibt es keine solche Sache als "inline Assembler" in C#, wenn Sie möchten, verwenden Sie C++ - oder Assembler-code aus C# haben, müssen Sie rufen Sie über P/Invoke oder C++/CLI wrapper. Aus den zwei, C++/CLI hat weniger overhead.
Sagte, dass, wenn Sie brauchen, um zu optimieren die Hölle aus einem kleinen Stück code, die beste option sein könnte, um zu umschreiben, dass der code komplett in native C++.
InformationsquelleAutor Asik