我有一项任务要做。我需要在CUDA上运行Flood Fill算法。在CPU上我有一个带队列的非递归方法,但我不知道如何将此代码移动到GPU以便它运行得更快。有人可以帮忙吗?
编辑: 这是我的CPU代码,只是普通的FloodFill,我的修改很少
void cpuFloodFill(std::vector<std::vector<int>> *colorVector, int node)
{
std::queue<int> q;
q.push(node);
int i,j;
while(!q.empty())
{
int k = q.front();
q.pop();
k2ij(k, &i, &j);
if((*colorVector)[i][j] == COLOR_TARGET)
{
(*colorVector)[i][j] = COLOR_REPLACEMENT;
if(i - 1 >= 0 && i - 1 < X && j >= 0 && j < Y)
q.push(ij2k(i - 1, j));
if(i + 1 >= 0 && i + 1 < X && j >= 0 && j < Y)
q.push(ij2k(i + 1, j));
if(i >= 0 && i < X && j - 1 >= 0 && j - 1 < Y)
q.push(ij2k(i, j - 1));
if(i >= 0 && i < X && j + 1 >= 0 && j + 1 < Y)
q.push(ij2k(i, j + 1));
}
}
}
答案 0 :(得分:1)
在名为CUDA Skel的图像骨架化工具包中有一个GPU泛洪填充实现。其源代码的链接在网站上。请注意代码的许可:源代码和工具包可以在适当的引用下免费用于研究目的。