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

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

3 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам