Выполнение инструкций CPU / GPU из управляемого кода - PullRequest
9 голосов
/ 20 января 2010

С учетом бита отключения выполнения, каков рекомендуемый способ выполнения инструкций для собственного процессора из высокоуровневой управляемой среды, такой как VB.NET 2008 или C #. Кроме того, кто-нибудь достиг аналогичного в выполнении инструкций GPU против графического процессора?

Ответы [ 3 ]

8 голосов
/ 20 января 2010

Существует несколько вариантов графического процессора для C # для прямого доступа без возврата к P / Invoke или написания собственных оболочек C ++:

  • Брахма довольно интересно. Он обеспечивает доступ к графическому процессору напрямую через специализированного поставщика LINQ. Код включает в себя несколько примеров высоко вычислительных методов, выполняемых на графическом процессоре, все они написаны на C # через LINQ.
  • SlimDX предоставляет приятную оболочку .NET для всех основных функций DirectX. С помощью пользовательских шейдеров вы можете выполнять вычисления на GPU через DirectX. Он также включает поддержку DX11, поэтому вы можете напрямую использовать вычислительные шейдеры (если у вас есть оборудование для этого).
  • Вы можете получить доступ к CUDA через CUDA.NET .
  • Вы можете использовать OpenCL через OpenCL.NET .

Что касается инструкций процессора, для этого обычно требуется сброс на собственный уровень более низкого уровня с инструкцией на ассемблере. Вероятно, наиболее интересным полностью управляемым (по крайней мере частично связанным) вариантом будет использование Mono.Simd , который обеспечивает прямой доступ к инструкциям SIMD в ЦП из управляемого кода при работе в стеке Mono.

3 голосов
/ 20 января 2010

Это не вариант. Вам потребуется P / Invoke для функции в DLL, которая была сгенерирована MASM или написана на неуправляемом C / C ++ с использованием встроенной сборки или встроенных функций. Или используйте компилятор C ++ / CLI и создайте код смешанного режима с управлением #pragma.

Помните, что теперь вы больше не можете зависеть от JIT-компилятора, генерирующего любой код платформы, подходящий для операционной системы. Используйте Project + Properties, вкладку Build, Platform Target, чтобы заставить архитектуру соответствовать вашему неуправляемому коду.

Посмотрите на CUDA для управляемого кода GPU.

2 голосов
/ 20 января 2010

Создайте неуправляемую библиотеку .dll с любыми инструкциями и используйте P / Invoke для ее вызова.

...