C # Vektorisierte Array-Addition

7

Gibt es überhaupt eine Möglichkeit, das Hinzufügen von Elementen über Arrays auf SIMD-Art zu "vektorisieren"?

Zum Beispiel würde ich gerne drehen:

%Vor%

In etwas wie:

%Vor%

Ich weiß, dass etwas in den C ++ / XNA-Bibliotheken existiert, aber ich wusste nicht, ob wir es in den Standard-.Net-Bibliotheken haben.

Danke!

    
Alex Moore 21.11.2011, 16:11
quelle

3 Antworten

13

Sie wollen Mono.Simd betrachten:

Zypern

Es unterstützt SIMD in C #

%Vor%     
sehe 21.11.2011, 16:15
quelle
5

Mono bietet eine relativ gute SIMD-API (wie erwähnt), aber wenn Mono keine Option ist, würde ich wahrscheinlich eine C ++ / CLI-Interface-Bibliothek schreiben, um das Heavy-Lifting durchzuführen. C # funktioniert ziemlich gut für die meisten Problem-Sets, aber wenn Sie anfangen, in Hochleistungs-Code zu kommen, ist es am besten, zu einer Sprache zu gehen, die Ihnen die Kontrolle gibt, um mit der Leistung wirklich schmutzig zu werden.

Hier bei der Arbeit verwenden wir P / Invoke, um in C ++ geschriebene Bildverarbeitungsroutinen aus C # aufzurufen. P / Invoke hat etwas Overhead, aber wenn Sie nur sehr wenige Anrufe machen und auf der nativen Seite viel arbeiten, kann es sich lohnen.

    
Ron Warholic 21.11.2011 16:20
quelle
2

Ich schätze, es hängt alles davon ab, was Sie tun, aber wenn Sie sich Sorgen machen, Vektorsummen zu vektorisieren, sollten Sie sich vielleicht eine Bibliothek wie Math.NET , die optimierte numerische Berechnungen bieten.

Von ihrer Website:

  

Es zielt auf Microsoft .Net 4.0, Mono und Silverlight 4 ab und unterstützt neben einer rein verwalteten Implementierung auch native Hardware-Optimierung (MKL, ATLAS).

    
madd0 21.11.2011 16:20
quelle

Tags und Links