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
Das hat meine Neugierde geweckt, also dachte ich, dass ich eine Prämie draufwerfen würde.
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.
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.
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).
Tags und Links c# mono compiler-construction