【问题标题】:OpenCL OutOfResourcesOpenCL OutOfResources
【发布时间】:2017-10-11 05:02:01
【问题描述】:

我有一个 OpenCL 内核,它在运行时会引发 OutOfResources 异常。

注意:我在 C# 中使用 Cloo

我为我的问题创建了一个最小的工作示例,内核现在看起来像这样:

__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.OutOfResourcesComputeException: '检测到 OpenCL 错误代码: 资源不足。'

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

我错过了什么概念?

【问题讨论】:

  • 我曾经设法让这个与 tau = 100 一起工作,似乎没有任何改变,但我的 GPU 不再喜欢这样了。
  • 如何检查对数组的越界访问?
  • @huseyintugrulbuyukisik 我使用剪辑来做到这一点。
  • @huseyintugrulbuyukisik 这里是剪辑代码,以防您有兴趣pastebin.com/R4TWy3Jb
  • 剪辑是否像 clamp(T x,T min, T max) 一样工作,但在 2D 中?

标签: memory out-of-memory opencl gpu gpgpu


【解决方案1】:

感谢 Huseyin 关于安装正确运行时的建议。

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

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

我尝试在我的 GPU 上显式运行,但它没电了。从上面的错误信息可以看出。

当我指定 CPU 时

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

它运行得更好。谁能想到,我的 CPU 似乎比 GPU 更脏。也许它是一个简单的指标。还值得注意的是,我的 CPU 支持比 GPU 更高版本的 OpenCL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-15
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2021-08-05
    相关资源
    最近更新 更多