2011-11-22 61 views
4

目前我有一個控制檯應用程序,這對我來說很好,但對其他人來說不是。我需要創建一個GUI。我正在爲使用Visual Studio 2010和CUDA 3.2構建自定義的Windows 7進行開發。CUDA與Windows Forms/WPF的集成

我可以簡單地在Windows窗體/ WPF中創建一個GUI,然後只是聲明一個extern「C」函數,該函數將被解析爲調用CUDA內核的函數?我剛纔試圖這樣做,並且我有很多編譯錯誤,包括一些CLR的東西。經過Google的快速瀏覽,我覺得它並不像看起來那麼簡單。

- 編輯

廣義的問題是:如何以包括C++ Windows窗體/ WPF應用程序代碼CUDA?

+0

你嘗試了什麼?你有什麼錯誤? – Bart

+0

那麼,強制框架3.5後,我沒有這些錯誤更多..但我很驚訝的「C++」的語法..「公共系統類Form1:公共系統:: Windows ::窗體::形式」是沒有C++給我..如何在那裏包含* .cu文件?或使用'extern' ..? – Queequeg

+0

嗯,這不是標準的C++。從我所知道的(但我從來沒有使用它),它是微軟的C++或C++/CLI託管擴展。也許有更多經驗的人可以幫助你。 – Bart

回答

1

我的伴侶和我有同樣的問題。由於簡單性,我們決定在C#Windows窗體中編寫GUI。但是,我們無法在同一個項目中找到任何使用CUDA的方式(即使對於託管C++也不行)。可能有一些做法,但這是我們的解決方案:我們創建了另一個項目,它是用原生C++編寫的,並生成了dll文件。然後,我們在C#中使用了P/Invoke(平臺調用),以便我們可以從dll調用導出的函數。在dll中,應該有內核和一些設備函數,但是你應該創建另一個調用內核並將被導出的函數。你可以谷歌P/Invoke,並找出如何導入本地C++函數從DLL到C#應用程序。

+0

如果我找不到解決方案,我只需構建一個C++控制檯應用程序,並通過標準輸入/輸出lol進行通信。 – Queequeg

+0

是的,但是如果您需要交換信息,則必須在文件中寫入太多信息,並且速度可能會很慢。如果沒關係,繼續:) –

+0

其實,如果你編寫另一個應用程序,那麼2個應用程序之間的交互將很困難。當你有一個應用程序和一個DLL時,你只需使用dll的函數,因爲它是你自己的,所以交互更容易。 –

2

如果您使用Visual Studio 2010,則可以通過下載Cuda Toolkit v4.2,然後下載CudaFy.net開始。在谷歌搜索每個將讓你到正確的網頁。然後你確定nvcc正在運行。有必要將C#代碼編譯爲低級(cuda)代碼。然後您可以下載示例應用程序來測試它們的工作方式。你可以開始here