基于GPU-MATLAB的LU分解

基于GPU-MATLAB的LU分解,matlab,gpu,linear-algebra,scientific-computing,Matlab,Gpu,Linear Algebra,Scientific Computing,我试图在MATLAB上运行LU分解,这样它就可以使用GPU了。 根据NVidia/MATLAB文档,LU应该由CUDA支持(例如,请参阅) 现在,我比较了CPU和GPU之间的速度,虽然GPU对于矩阵乘法和FFT来说确实更快,但对于LU分解,它似乎给出了几乎相同的结果,这对我来说非常重要 我试过不同尺寸的,但基本上还是一样的 比如说, 在GPU上: A=gpuArray(randn(1000)); tic; [l,u,p]=lu(A); toc Elapsed time is 0.056832 s

我试图在MATLAB上运行LU分解,这样它就可以使用GPU了。 根据NVidia/MATLAB文档,LU应该由CUDA支持(例如,请参阅)

现在,我比较了CPU和GPU之间的速度,虽然GPU对于矩阵乘法和FFT来说确实更快,但对于LU分解,它似乎给出了几乎相同的结果,这对我来说非常重要

我试过不同尺寸的,但基本上还是一样的

比如说,

在GPU上:

A=gpuArray(randn(1000));
tic; [l,u,p]=lu(A); toc
Elapsed time is 0.056832 seconds.
在CPU上:

B=randn(1000);
tic; [l,u,p]=lu(B); toc
Elapsed time is 0.031463 seconds.
CPU甚至更快。我的CPU是i7-2630QM,GPU是GT-550M(笔记本电脑)。 我还在一台装有GTX-660的更强大的计算机上进行了试验,结果是一样的


我的MATLAB版本是2012b

在特斯拉C2070上使用MATLAB R2013a,我看到了:

A = gpuArray.randn(1000);
tic; [l,u,p]=lu(A); toc
Elapsed time is 0.016663 seconds.

比我的CPU快2倍。随着矩阵大小的进一步增加,加速比也随之增加,在我的机器上,GPU的峰值速度大约快5倍——这对于高端(尽管稍旧)GPU来说是典型的,而不是像样的6核CPU。

信不信由你,有时并行化代码会使速度变慢。这通常是由于数据的大小。它如何在各种(更大)阵列大小下运行?对于许多方法,在GPU速度真正起飞之前,您必须达到一定的大小。(即使1000by1000看起来足够大…)在命令窗口中键入
gpuDevice
。您将看到GT-550M的“计算能力”非常贫乏。您需要>=1.3。把这个和特斯拉牌比较一下。谢谢。我在另一台装有8核CPU的特斯拉C1060的计算机上试用了它,我设法使特斯拉的速度提高了约2倍。此外,当我开始在单核模式下运行MATLAB时,使用标志“-singleCoreThread”,那么GPU的速度要快得多。似乎有些函数是在多核上自动运行的,而不需要使用“分布式”等来指定。是的,在最近的版本中,MATLAB中的许多东西本质上是多线程的——这就是为什么在线性代数等方面,你需要一个相对强大的GPU来击败MATLAB最先进的CPU实现。