Mono c # -Code von Microsoft .net aufrufen?

7

Ich habe einen neuronalen Netzcode in c # geschrieben, der von der Verwendung von SIMD profitieren würde Unterstützung. Mono 2.2 kam gerade heraus, das SIMD unterstützt, aber Microsofts c # unterstützt das noch nicht . Da ich mit meinem c # Setup zufrieden bin, habe ich mich gefragt, ob ich eine Lib in Mono für dieses Stück schreiben und es von .net aus aufrufen könnte.

Bearbeiten: Ich denke, was ich wirklich wissen möchte ist, dass es möglich ist, mono auf etwas wie eine DLL zu kompilieren, von der ich dann anrufen kann Punkt net. Ich habe Miguel de Icaza auf einer podcast , dass für den iphone der mono compiler es ihnen erlauben würde, sich auf eine exe für moonlight zu kompilieren, damit es nicht gegen die bedingungen des service für iphone verstoße, so dass ich darüber nachgedacht habe, was man noch kompilieren kann zu.

Ich habe gehört, dass Miguel de Icaza in einem anderen Podcast " Herding Code "(Episode 28) sagt, dass Sie den Mono-Compiler verwenden können, um ihn zu kompilieren eine exe nicht nur zum Zwischencode. Was bedeutet das?

Das hat meine Neugierde geweckt, also dachte ich, dass ich eine Prämie draufwerfen würde.

    
Rex Logan 24.01.2009, 18:52
quelle

3 Antworten

5

Im Wesentlichen, wenn Sie es mit Simd schreiben und die DLL mit Ihrem Code verteilen, wird die Beschleunigung verwendet, wenn die Ziel-VM dies unterstützt. Wenn nicht, bricht es nicht. Sie können also die Bibliothek verwenden und allen Benutzern Ihres Programms, die .NET-Anwendungen mit Mono ausführen, einen Geschwindigkeitsschub geben.

Microsoft hat gesagt, dass er plant, solche Unterstützung in seiner nächsten Version seiner Laufzeit hinzuzufügen, obwohl ich die Verbindung nicht finden kann und es in dieser Sekunde nicht handlich habe --- kann die Verbindung aus einem historischen Backup graben wenn jemand genug interessiert ist.

    
Michael Trausch 26.02.2009, 22:08
quelle
11

Aus Miguel de Icazas Blog :

  

Unsere Bibliothek bietet C # Fallbacks für   alle beschleunigten Anweisungen.   Dies bedeutet, dass wenn Ihr Code auf einem läuft   Maschine, die keine SIMD zur Verfügung stellt   Unterstützung oder eine der Operationen, die   Sie verwenden wird in Ihrem nicht unterstützt   Maschine, der Code wird fortgesetzt   richtig funktionieren.

     

Dies bedeutet auch, dass Sie die verwenden können   Mono.Simd API mit Microsoft .NET auf   Windows zum Prototypen und Entwickeln von   Code, und führen Sie es dann mit voller Geschwindigkeit   mit Mono.

Wie ich es verstehe, bedeutet das, dass Sie Code schreiben können, der Mono.Simd verwendet, und es unter .Net ausführen kann, aber es wird nicht schneller sein als regulärer Code, weil die .NET-Laufzeit nicht funktioniert SIMD noch nicht unterstützen.

    
oefe 24.01.2009 19:18
quelle
5

Um die SIMD-Funktionen nutzen zu können, sollte die Runtime diese nativ unterstützen können. Grundsätzlich behandelt Mono Mono.Simd namespace speziell in der Laufzeitumgebung. Offensichtlich unterstützt Microsoft .NET Runtime diese Funktion nicht. Die angegebene Assembly Mono.Simd ist jedoch eine vollständig gültige und normale .NET-Assembly, die in verwaltetem Code geschrieben wurde und daher auf .NET CLR ausgeführt werden kann. Es wäre jedoch nur eine Softwareemulation dessen, was SIMD-Anweisungen tun.

Sie können die Mono-Laufzeit unter Windows ausführen und diese Funktionen nutzen, aber es gibt keine direkte Möglichkeit, die Hälfte der Anwendung auf .NET und die andere Hälfte auf Mono auszuführen (Sie könnten natürlich Kommunikationsmechanismen als zwei verschiedene Anwendungen verwenden) kann verwenden, aber es macht überhaupt keinen Sinn für dieses Szenario).

    
Mehrdad Afshari 26.02.2009 21:58
quelle

Tags und Links