【发布时间】:2012-08-03 17:21:28
【问题描述】:
我在 matlab 中使用 cuda\jacket 时遇到了一个非常缓慢的 if 语句响应。 (对于找到局部最大值的相同代码,使用简单的 for 循环和 if 条件,5 秒对 0.02 秒)
作为 GPU 编程的新手,我去阅读了,当我看到之前的 matlab if statements with CUDA SO 讨论时,我觉得缺少了一些东西。 您无需使用 cuda 即可知道对代码进行矢量化会更好。但是,在某些情况下,无论如何您都需要使用 if 语句。 例如,我想找出 2D 图像的像素(比如 m(a,b))是否是其 8 个最近邻居的局部最大值。在 matlab 中,一个简单的方法是在 if 语句中使用 8 个逻辑条件:
如果 m(a,b)>m(a-1,b-1) & m(a,b)>(a,b-1) & m(a,b)>(a+1,b -1) & ... 等所有最近的邻居
如果您知道如何解决(或矢量化)这个问题,我将不胜感激...
【问题讨论】:
-
我不完全确定你想在这里矢量化什么 - 你已经在 matlab 中拥有局部最大值函数,它本质上是你正在寻找的矢量化版本......或者你只是想将 8 个
if布尔条件向量化为 1?在那种情况下,请参阅我的答案...
标签: performance matlab if-statement cuda jacket