【发布时间】: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