2010-07-03 82 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。这是更多的工作,但可能是你唯一的途径(即使自动化软件包在某种程度上工作,这种方法仍然可以提供更多的加速,因为你可以更聪明地进行内存管理,例如,如果你知道自己在做什么)。