2010-07-03 157 views
1

我有一個項目,需要大量的圖像處理,並希望添加GPU支持來加快速度。matlab共享C++庫和OpenCL

我想知道如果我將我的matlab編譯成C++共享庫並從OpenCL程序中調用它,這是否意味着matlab代碼將在GPU上運行?

回答

1

我自己的(半受教育的)猜測是你會發現這很難做到。但是,其他人也走上了同樣的道路。 This paper可能是開始研究的好地方。並且Google搜索出現了Accelereyes以及Mathworks文件交換中您可能想要跟進的一些項目。

+1

Accelereyes僅適用於NVIDIA顯卡,我使用的是ATI iptatiproject項目似乎很有前途,我會檢查出來謝謝 – omarzouk 2010-07-03 17:49:52

+1

yikes !!!!就像我擔心的那樣,我將不得不手動編寫算法,以便能夠使用OpenCL來完成。我的意思是這樣我會更好地使用C++而不是matlab,導致我從matlab中剩下的只是一些矩陣數據結構:D 雖然我想知道Accelereyes如何爲nvidia做他們的封裝嗯 – omarzouk 2010-07-03 18:31:14

+0

Accelereyes是隻是一個重載矩陣的基本操作符(如乘法,反轉等)的包裝器,以使它們在GPU上執行,這當然確實提供了非常好的提升,但它不是最有效的做法,因爲算法本身沒有寫入充分利用GPU的並行功能,如使用並行排序算法而不是迭代或遞歸算法,但這意味着整個matlab庫的重寫:D – omarzouk 2010-07-10 21:54:22

0

即將發佈的R2010b中的Parallel Computing Toolbox(9月1日發佈)支持多種功能的GPU處理。不幸的是,它只支持CUDA(版本1.3和更高版本),所以使用ATI顯卡時,你運氣不好。不過,無論如何,您可能只想購買專用GPU。

1

夾克的一切都是用c/C++/cuda編寫的。 Infact我們現在有一個測試版libjacket(http://www.accelereyes.com/downloadLibjacket),如果您願意,它可以用來擴展不僅僅是matlab,還有其他語言。

@OSaad 我們的大部分功能都是最快的選擇。在C或matlab中。

0

通常情況下,如果你能以「矢量化」的方式編寫你的Matlab代碼,那麼像AccelerEyes和Jacket這樣的軟件包就有可能在GPU上運行。你可以通過檢查Matlab本身是否能夠在CPU上的多個內核上運行來驗證這一點(現在,如果事情能夠以一種明顯的方式進行並行化,那麼Matlab將使用多個內核)。

如果這不起作用,那麼你需要通過mex下拉到C/C++,然後從那裏自己調用OpenCL。 Mex是Matlab如何與C代碼進行對話的,因此您可以編寫由Matlab調用的C代碼(並接收矩陣等),然後初始化並調用OpenCL。這是更多的工作,但可能是你唯一的途徑(即使自動化軟件包在某種程度上工作,這種方法仍然可以提供更多的加速,因爲你可以更聰明地進行內存管理,例如,如果你知道自己在做什麼)。