在Matlab中使用GPU进行并行计算

Using the GPU for parallel computing in Matlab

我已经到了一个阶段,我的数组变得庞大,单个函数需要大约 2 天的时间来计算。

我正在处理图像并使用 kmeansgmm - fitgmdist.

我有一个带有 Nvidia Tesla GPU 的工作站,它在受支持的列表中,我想使用它们的处理能力来帮助加快我的工作。

查看文档,我了解到为了使用 GPU 函数,我所要做的就是首先将传递给函数的数组传递给 GPU。即

model_feats = get_feats(all_imges);
kmeans = kmeans(model_feats, gaussians, 'EmptyAction','singleton', 'MaxIter',1000);
gmm{i} = fitgmdist(model_feats, 128, 'Options',statset('MaxIter',1000), ...
            'CovType','diagonal', 'SharedCov',false, 'Regularize',0.01, 'Start',cInd);

我所有的处理时间都被这两个函数占用了。因此,如果我要使用 GPU 核心,我所要做的就是使用 gpuArray 函数吗?例如上面会变成:

temp_feats = get_feats(all_imges);
model_feats = gpuArray(temp_feats);

kmeans = kmeans(model_feats, gaussians, 'EmptyAction','singleton', 'MaxIter',1000);
gmm{i} = fitgmdist(model_feats, 128, 'Options',statset('MaxIter',1000), ...
            'CovType','diagonal', 'SharedCov',false, 'Regularize',0.01, 'Start',cInd);

这行得通吗?首先将数组传递给 gpuArray?

是否适用于任何函数

P.S. Sorry I have to ask here rather than just try it myself, but I do not have access to the workstation as of now, but I can request access to it. Before I request access to it I wanted to make sure if my script will work with gpuArray.

不幸的是,简而言之,您问题的答案是否定的,它不会起作用。

matlab GPU 支持几乎是部分的。当前支持的接受 gpuArray 输入的函数如下:http://de.mathworks.com/help/distcomp/run-built-in-functions-on-a-gpu.html

所以根据我的理解,由于 kmeans 不在列表中,它应该不起作用。如果我错了,请有人纠正我。

但另一方面,如果您进行 google 搜索,您可以在 GPU 上看到 kmeans 的第 3 方 matlab 实现。由于我不能保证代码的质量,所以我不会发布 link。

祝你好运!