Memory OpenCL外部资源

Memory OpenCL外部资源,memory,out-of-memory,opencl,gpu,gpgpu,Memory,Out Of Memory,Opencl,Gpu,Gpgpu,我有一个OpenCL内核,在运行时抛出OutOfResources异常 注意:我将Cloo用于C 我为我的问题创建了一个最低限度的工作示例,内核现在如下所示: __kernel void MinBug ( __global float * img, __global float * background, __global int * tau ) { int neighbourhoodSize = tau[0]; const int x

我有一个OpenCL内核,在运行时抛出OutOfResources异常

注意:我将Cloo用于C

我为我的问题创建了一个最低限度的工作示例,内核现在如下所示:

__kernel void MinBug
(
    __global float  * img, 
    __global float  * background,
    __global int    * tau   
)
{
    int neighbourhoodSize = tau[0];

    const int x = get_global_id(0); 
    const int y = get_global_id(1);

    for (int i = -neighbourhoodSize; i <= neighbourhoodSize; i++)
    {
        for (int j = -neighbourhoodSize; j <= neighbourhoodSize; j++)
        {
            //...
        }
    }
}
对于我的原始程序,当tau很小时(即:2、10、15),这运行良好,但一旦tau达到27左右,这有时会抛出异常。我创建的最小工作示例在tau接近300之前没有这个问题

我在C程序中遇到的具体错误是

Cloo.OutOfResourcesComputerException:'检测到OpenCL错误代码: 资源匮乏。”

这总是发生在调用Kernel.Execute方法后的下一行


我缺少了什么概念?

感谢Huseyin就安装正确的运行时提供的建议

我还需要在代码中选择正确的平台

在我的电脑上,我目前有三个平台。 其中两个似乎与CPU intel i7有关。 其中一款似乎是GPU NVidia gtx 660 ti

我试着在我的GPU上显式运行,结果它没电了。从上面的错误消息中可以看到

当我指定CPU时

CLCalc.InitCL(Cloo.ComputeDeviceTypes.Cpu, 1);

它跑得好多了。谁会想到,我的CPU似乎比GPU有更多的咕噜声。也许这是一个过于简单的指标。还值得注意的是,我的CPU支持比GPU更高版本的OpenCL。

感谢Huseyin提供了安装正确运行时的建议

我还需要在代码中选择正确的平台

在我的电脑上,我目前有三个平台。 其中两个似乎与CPU intel i7有关。 其中一款似乎是GPU NVidia gtx 660 ti

我试着在我的GPU上显式运行,结果它没电了。从上面的错误消息中可以看到

当我指定CPU时

CLCalc.InitCL(Cloo.ComputeDeviceTypes.Cpu, 1);

它跑得好多了。谁会想到,我的CPU似乎比GPU有更多的咕噜声。也许这是一个过于简单的指标。同样值得注意的是,我的CPU支持比GPU更高版本的OpenCL。

我曾经成功地使用tau=100实现了这一点,但似乎没有任何变化,但是我的GPU不再喜欢这样了。你如何检查对数组的越界访问?@huseyintugrulbuyukisik我使用剪辑来完成这项工作。@huseyintugrulbuyukisik这里是剪辑代码,如果你感兴趣的话,剪辑可以像clampT x,T min,T max那样工作,但是在2D中?我曾经设法让它在tau=100时工作,似乎没有任何变化,但是我的GPU不再喜欢这样了。如何检查对阵列的越界访问?@huseyintugrulbuyukisik我使用剪辑来完成此操作。@huseyintugrulbuyukisik这里是剪辑代码,如果您感兴趣的话,剪辑的工作方式是clampT x,T min,T max,但在2D中?