1

我有一个任务要做。我需要在 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));
        }

    }
}
4

1 回答 1

1

在名为CUDA Skel的图像骨架化工具包中有一个 GPU 洪水填充实现。其源代码的链接在网站上。请注意代码的许可:源代码和工具包可免费用于研究目的并适当引用。

于 2013-06-11T14:19:48.973 回答