我有一个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++)
{
//...
}
}
}对于我最初的程序,当τ很小(即: 2,10,15)时,这个程序运行得很好,但是当τ在27左右时,有时会抛出一个异常。我创建的最小工作示例在τ接近300之前没有这个问题。
在我的C#程序中遇到的具体错误是
Cloo.OutOfResourcesComputeException:“检测到的OpenCL错误代码:OutOfResources。”
这通常发生在调用Kernel.Execute()方法之后的下一行。
我错过了什么概念?
发布于 2018-04-14 06:53:13
感谢Huseyin对安装正确运行时的建议。
我还需要在代码中选择正确的平台。
在我的电脑上,我目前有三个平台。其中两个似乎与CPU (英特尔i7)有关。其中一个似乎是GPU (NVidia gtx 660 ti)。
我试着在我的GPU上显式地运行,结果它的能量用完了。正如您从上面的错误消息中看到的。
当我指定CPU时
CLCalc.InitCL(Cloo.ComputeDeviceTypes.Cpu, 1);它跑得更好了。谁会想到,我的CPU似乎比GPU的咕噜声更大。也许这是一个简单化的衡量标准。同样值得注意的是,我的CPU支持比GPU更晚的OpenCL版本。
https://stackoverflow.com/questions/43928179
复制相似问题