我正在尋找利用GPU來碾壓某些方程式,但無法弄清楚如何從C#訪問它。我知道XNA和DirectX框架允許您使用着色器來訪問GPU,但是如何在沒有這些框架的情況下訪問它?如何使用GPU進行數學
回答
我還沒有從C#做過,但基本上你使用CUDA(假設你在這裏使用nVidia卡,當然)SDK和CUDA工具包來實現它。
nVidia已經移植(或寫入?)BLAS實現以用於支持CUDA的設備。他們提供了大量關於如何進行數字運算的示例,但您必須弄清楚您將如何從C#中解脫出來。我敢打賭,你將不得不用非託管的C或C++編寫一些東西並與之鏈接。
如果您不想使用C#,請查看Theano。這對您的需求可能有點矯枉過正,因爲他們正在構建一個框架,用於從Python進行GPU的機器學習,但是......它的工作原理非常好。
恐怕我在使用GPU方面的知識在理論上超出了爲DirectX/XNA編寫着色器並且與CUDA(NVidia特定版本)有點關係。不過,我已經聽說了很多關於OpenCL(開放計算語言)的知識,它允許您運行OpenCL智能推送到顯卡的算法,或者如果您沒有兼容的GPU,可以在CPU上運行。
您在GPU上運行的代碼必須專門寫在OpenCL的C99子集中(如果這不符合您的要求,因爲您已經問過如何從C#中使用它),但超出了您的數字運算算法,您可以使用C#編寫應用程序的其餘部分,並通過使用Open Toolkit很好地協同工作;
如果你的GPU是NVIDIA,你可以使用CUDA。
這裏有一個例子,解釋所有的鏈,包括一些C/C++代碼:CUDA integration with C#
而且還有一個CUDA.NET庫調用可以在這裏找到:CUDA.NET
如果你的GPU是ATI ,那麼有ATI Stream。 .NET支持對我來說不太清楚。也許Open Toolkit Library有它,通過OpenCL支持。
最後,有一個名爲「Accelerator」的微軟研究項目,該項目有一個可在任何硬件(只要它支持DirectX 9)上工作的託管包裝器。
有兩種選擇,如果你不想惹的P/Invoke的東西和非託管代碼:
- 使用提到CUDA.NET庫。它工作得很好,但它的目標是CUDA,所以只有nVidia卡。如果你想解決更復雜的問題,你必須學習CUDA,編寫你自己的內核(用C語言編寫),用nvcc進行編譯,並通過這個庫從C#執行。
- 使用Microsoft Research Accelerator。這是MS Research構建的一個很好的庫,它可以在任何有很多內核(多核nVidia/ATI GPU和多核處理器)上運行代碼。它完全獨立於平臺。使用它,我對結果印象深刻。在C#中使用加速器也有很好的tutorial。
第二種選擇是我推薦,但是如果你堅持使用nVidia GPU沒有問題 - 第一種方法可能會更快。
我已經在C#中利用NVIDIA的CUDA庫和.NET的P/invoke完成了它。這需要一些謹慎的內存管理和對CUDA庫的詳細瞭解。這種技術可以與任何你想在C中創建的定製GPU/CUDA內核結合使用,因此這是一種非常強大的靈活方法。
如果您想節省很多精力,您可以從CenterSpace軟件(我工作的人)購買NMath Premium,並且您可以在幾分鐘內在C#上運行NVIDIA GPU上的大問題。 NMath Premium是一個大型的C#/。NET數學庫,它可以在GPU上運行大部分LAPACK和FFT,但如果硬件不可用或者問題大小不合理,則會退回CPU。
- 1. 在Silverlight 5上使用GPU進行通用數學運算
- 2. 使用pyopencl進行GPU編程
- 3. Java使用GPU與BigInteger進行計算
- 4. OpenACC使用AMD GPU進行編譯
- 5. XNA,矢量數學和GPU
- 6. 如何使用Keras進行多GPU訓練?
- 7. 使用GPU同時進行數字運算和並行渲染
- 8. 如何使用c#在datagridview中進行數學運算?
- 9. 如何使用Jupyter Notebook和Sublime進行數據科學項目?
- 10. 如何在jQuery中使用單詞進行數學運算?
- 11. 如何在SQL Server中使用GUID進行數學計算
- 12. 可以在GPU上的浮點數組上進行數學運算的庫?
- 13. GPU在科學模擬中如何以及在哪裏使用?
- 14. 爲什麼我們需要GPU進行深度學習?
- 15. 在Theano中使用GPU進行數據增強
- 16. 如何讓GPU在GPU上運行?
- 17. 在GPU上執行的數學在GPU上有不同的結果
- 18. 如何使用cudaMemcpyPeer在不能使用P2P的不同進程中的GPU之間複製GPU數據?
- 19. 進行數學計算
- 20. 如何充分利用GPU進行TensorFlow Estimators?
- 21. 如何在ASM中使用多位數字進行數學運算
- 22. GPU加速數學瀏覽器
- 23. 在Matlab中使用GPU進行並行計算
- 24. 如何在應用程序腳本中進行數學運算?
- 25. 用pyspark進行數學運算
- 26. 如何使用tflearn深度學習進行文檔分類
- 27. 如何使用keras.applications中的模型進行傳輸學習?
- 28. 如何使用機器學習對URL進行分類?
- 29. 使用YouTube進行電子學習
- 30. 使用Encog進行集成學習
NVidia,ATI,英特爾或通用? – Bobby 2011-05-05 08:30:21
@Bobby:我正在尋找一些通用的,理想的。 – 2011-05-05 08:31:05
查看顯示如何檢測圖形卡並運行代碼或回退到CPU的答案會很有趣。 – tiagoboldt 2011-05-05 08:31:54