Использование MMX с Managed C ++ - PullRequest
0 голосов
/ 11 февраля 2011

Насколько я понимаю, JIT не компилирует MSIL в собственный машинный код, который будет использовать инструкции MMX на x86.Если это правда (поскольку мне трудно найти актуальную информацию по этому вопросу), я хочу использовать MMX в своем коде.Я работаю над приложением, которое будет выполнять практически все умножения чисел с плавающей запятой одинарной точности (это искусственные нейронные сети).У меня есть несколько вопросов по этому вопросу.

Во-первых, если я смешиваю управляемый и неуправляемый код в одном и том же проекте, разве все это не скомпилировано в MSIL, потому что «Это просто работает»?Получу ли я лучшую производительность, если сделаю неуправляемые части в виде статических или динамических библиотек, скомпилирую их и использую их в своем управляемом проекте?

Я также изучал использование своего графического процессора с OpenCL (или CUDA, нотогда это не будет работать на ATI :() но если бы я это сделал, разве не нужно было бы вызывать скомпилированный код GPU из неуправляемого c ++?

В общем, я просто ищу лучшегоспособ получить самую быструю артмитику с плавающей запятой, при этом все еще имея возможность использовать мой управляемый графический интерфейс и многопоточность, и используя расширения, такие как MMX, кажется, мой лучший вариант (если я только хочу использовать процессор). Какой наилучший способ может быть дляидти делать такие вещи?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2011

MMX - это целочисленный набор команд, а не с плавающей запятой.Он поддерживает только 64-битные упакованные байты, слова и двойные слова.SSE имеет поддержку с плавающей запятой.Используйте управляемый #pragma в своем коде для переключения между машинным кодом и генерацией MSIL.

0 голосов
/ 11 февраля 2011

Во-первых, если я смешиваю управляемый и неуправляемый код в одном и том же проекте, разве все это не скомпилировано в MSIL, потому что «Это просто работает»

Нет.Если вы не компилируете с /clr:pure, нативный код может оставаться нативным и смешиваться с .NET-кодом.Это называется сборкой в ​​смешанном режиме.(С /clr:pure все превращается в IL, и вы вообще не можете использовать нативный код.) Нативный код останется нативным.

0 голосов
/ 11 февраля 2011

вы можете смешивать управляемый и неуправляемый код.Только управляемый компилируется в MSIL.Все остальное - нативное.

Между управляемым и неуправляемым стоит цена ... но не так уж и плохо.

Поэтому я бы написал нативную библиотеку, которая выполнила бы все ваши высокопроизводительные задачиа затем используйте его из своего управляемого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...