Вызов моно кода C # из Microsoft .net? - PullRequest
7 голосов
/ 24 января 2009

У меня есть некоторый код нейронной сети, написанный на c #, который выиграл бы от использования поддержки SIMD . Mono 2.2 только что вышел, который поддерживает SIMD, но Microsoft C # пока не поддерживает это. Будучи довольным моей настройкой c #, мне было интересно, смогу ли я написать библиотеку в моно для этого куска и вызвать ее из .net.

Edit: Я думаю, что я действительно хочу знать, можно ли скомпилировать mono в нечто вроде DLL, которую я затем могу вызвать из dotnet. Я слышал Miguel de Icaza на подкасте , говорящем, что для iphone моно-компилятор позволит им компилировать в исполняемый файл для лунного света, чтобы он не нарушал условия обслуживания для iphone так что это заставило меня задуматься над тем, что еще можно скомпилировать.

Я слышал, как Мигель де Иказа на другом актерском модуле Эпизод Хединг-кода 28 говорит, что вы можете использовать моно-компилятор для компиляции в исполняемый файл, а не только в промежуточный код. Каковы последствия этого?

Это подняло моё любопытство, поэтому я подумал, что я могу бросить в него награду.

Ответы [ 3 ]

11 голосов
/ 24 января 2009

Из Блог Мигеля де Иказы :

Наша библиотека предоставляет запасные варианты C # для все ускоренные инструкции. Это означает, что если ваш код работает на машина, которая не обеспечивает SIMD поддержка, или одна из операций, которые вы используете не поддерживается в вашем машина, код будет продолжать работать правильно.

Это также означает, что вы можете использовать Mono.Simd API с Microsoft .NET на Windows для создания прототипа и разработки код, а затем запустить его на полной скорости используя Mono.

Насколько я понимаю, это означает, что вы можете написать код, который использует Mono.Simd и сможет запускать его под .Net, но он не будет быстрее обычного кода, поскольку среда выполнения .Net не пока не поддерживает SIMD.

5 голосов
/ 27 февраля 2009

По сути, если вы пишете это с помощью Simd и распространяете dll с вашим кодом, он будет использовать ускорение, если целевая виртуальная машина поддерживает его. Если нет, это не сломается. Таким образом, вы можете использовать библиотеку и дать всем пользователям вашей программы, которые запускают приложения .NET с Mono, ускорение.

Говорят, что Microsoft планирует добавить такую ​​поддержку в своем следующем выпуске среды выполнения, хотя я не могу найти ссылку и не могу ее использовать прямо сейчас - могу выкопать ссылку из исторической резервной копии если кто-то заинтересован достаточно.

5 голосов
/ 27 февраля 2009

Для того, чтобы воспользоваться преимуществами SIMD, среда выполнения должна иметь возможность изначально поддерживать его. В основном Mono обрабатывает пространство имен Mono.Simd специально во время выполнения. Очевидно, что среда выполнения Microsoft .NET не поддерживает эту функцию. Однако предоставленная сборка Mono.Simd является полностью допустимой и нормальной сборкой .NET, написанной в управляемом коде, и поэтому она может работать в .NET CLR, но это будет просто программная эмуляция того, что делают инструкции SIMD.

Вы можете запустить Mono runtime в Windows и воспользоваться этими функциями, но прямого способа запустить половину приложения в .NET и другую половину в Mono нет (вы, конечно, могли бы использовать коммуникационные механизмы как два отдельных приложения). можно использовать, но это вообще не имеет смысла для этого сценария).

...