GLUT应用程序中的openGL vs openCL?

时间:2017-03-14 03:55:25

标签: c++ opengl opencl

之前我从未进行过GPU加速,但我发现50%的运行时都在这个功能中:

typedef std::array<uint16_t, NUMBER_CHEMICALS> Chemical_t;
std::vector<Chemical_t> chemical, next, emitters;

void FluidGrid::diffuse(float dt)
{
    const int N = (squares.x-1)*(squares.y-1);
    const int w = squares.x;

    for(int i = w; i < N; ++i)
    {
//store as integer 0-255 b/c bulldozer doesn't have multiple FPUs
        uPoint2B rate = diffusionRate[i];

        for(int k = 0; k < NUMBER_CHEMICALS; ++k)
        {
            int temp   = (chemical[i-1][k] + chemical[i+1][k])*rate.x
                       + (chemical[i-w][k] + chemical[i+w][k])*rate.y;
            next[i][k] = std::max((temp >> 8) + emitters[i][k], 0);
        }
    }
}

幸运的是,它似乎是GPU加速的一个很好的候选者,我想知道在同一个应用程序中使用openCL和openGL是否会出现问题,因为两者都使用相同的资源,或者如果这个计算应该移动到渲染线程使所有GPU上下文都在一个线程中。

是否有任何理由使用openGL而不是openCL来加速这一点,因为已经存在GL上下文?或者这不是加速的好选择,因为它可能是内存而不是CPU瓶颈?

0 个答案:

没有答案