首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于GPU并行处理Matlab的图像处理算法

基于GPU并行处理Matlab的图像处理算法
EN

Stack Overflow用户
提问于 2016-08-24 18:18:26
回答 2查看 363关注 0票数 0

我想加速我的算法,因为我需要在数百张图像上运行它,所以我尝试使用未矢量化的GPU代码,在GPU上运行相同的代码,我有nvidia Geforce GT 650 m,我的PC上有2GB,但是它比CPU版本慢。在搜索之后,我确信可以使用批处理传递到矢量化的GPU代码(pagefun,bsxfun),我在没有解决方案的情况下试图解决这个问题。有人能帮我处理一下这个代码吗?

代码语言:javascript
复制
Q=100;
       for i=3:n-2
        for j=3:m-2 
         A(i,j)=0;
            for c=1:Q
                        if B(i,j,c)~=0
                        A(i,j)=A(i,j)+(-(B(i,j,c)).*log(B(i,j,c)));
                        end
            end
        end
       end

另一个问题,为什么Matlab只使用我CPU的20%?如何利用CPU的优势来加速我的处理

Matlab是一个单线程应用程序吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 19:32:52

矢量化版本如下:

代码语言:javascript
复制
BB = B(3:(n-2),3:(m-2),:);
cutoff = 10^(-6);
logBB = log(BB);
logBB(BB<cutoff) = 0; % remove divergent terms
A = -sum(BB.*logBB,3);

即使在CPU上,这也应该运行得更快。如果您有一个GPU,您所需要做的就是拥有输入数组。

代码语言:javascript
复制
BB = gpuArray(BB);

存储在GPU上,然后收集结果

代码语言:javascript
复制
A = gather(A);

回到CPU

票数 1
EN

Stack Overflow用户

发布于 2016-08-24 19:14:50

你需要买并行计算工具箱。(使用parfor)。

这是matlab的一个众所周知的限制,其中一些底层函数不能跨多个内核(而不是线程)进行并行化。一个快速的大概是看看多少CPU matlab使用,并乘以你在你的个人电脑的核心数量(这应该使你的某处,约100%)。

如果您想要利用您的计算机GPU,并行计算工具箱是唯一的方法这样做。

来自mathworks

这取决于你在做什么。对于某些代码,MATLAB只能使用单个处理器的单个核,而对于另一些代码,MATLAB将自动利用所有可用的核(也许是处理器)。它实际上取决于基本的功能。有些事情很难并行化。有时,您可以帮助MATLAB处理类似parfor循环的事情。其他时候,您可能需要类似MPI的东西。还有一些时候,你真的无能为力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39130421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档