2010-01-20 47 views
9

考慮到執行禁用位從高級別管理環境(如VB.NET 2008或C#)對本機處理器執行指令的推薦方式是什麼。另外有沒有人在對圖形處理器執行GPU指令時達到類似的效果?從託管代碼執行CPU/GPU指令

+2

真正的問題是:你想完成什麼?您可以在CUDA.NET中使用GPU(http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx)。 – 2010-01-20 17:09:49

+0

目標是儘可能接近裸機運行自定義計算,但從託管環境啓動。 – PeanutPower 2010-01-20 17:28:58

+0

[使用GPU與c#]可能重複(http://stackoverflow.com/questions/375011/utilizing-the-gpu-with-c-sharp) – 2012-07-26 23:26:57

回答

8

有對C#幾個GPU選項,直接訪問,而恢復到的P/Invoke或寫自己的C++包裝:

  • Brahma是挺有意思的。它可以通過定製的LINQ提供程序直接訪問GPU。該代碼包含一些在GPU上運行的高度計算方法的示例,全部使用LINQ以C#編寫。
  • SlimDX爲所有主要的DirectX功能提供了很好的.NET包裝。使用自定義着色器,您可以通過DirectX在GPU上進行計算。它還包括DX11支持,因此您可以直接使用計算着色器(如果有硬件的話)。
  • 您可以通過CUDA.NET訪問CUDA。
  • 您可以通過OpenCL.NET使用OpenCL。

至於CPU指令,這通常需要使用匯編指令降低到較低級別的本機代碼。可能最有意義的完全管理(至少部分相關)選項是使用Mono.Simd,它可以在Mono堆棧上運行時從託管代碼直接訪問CPU中的SIMD指令。

+0

Thankyou Mono.Simd鏈接是真棒 – PeanutPower 2010-01-20 17:42:15

2

使用任何您想要的指令創建非託管的.dll庫,並使用P/Invoke來調用它。

3

這不是一個選項。您必須使用內聯彙編或內聯函數在由MASM生成的或者在非託管C/C++中編寫的DLL中調用函數。或者使用C++/CLI編譯器並使用#pragma managed生成混合模式代碼。

請注意,您現在不能再依賴於JIT編譯器來生成適用於操作系統的任何平臺代碼。使用Project + Properties,Build選項卡,Platform Target強制架構匹配您的非託管代碼。

看看CUDA的受管GPU代碼。