OpenCL程序冻结每次使用的私有变量
我得到了一个内核方法,简化后看起来像这样OpenCL程序冻结每次使用的私有变量,opencl,Opencl,我得到了一个内核方法,简化后看起来像这样 __kernel void calculate (__global float *a, __global float *b, __global int *res) { int workItem = get_global_id(0); // Syntax may not right, but you get the idea int found = 0; for (int i = 0; i<100000000; i++) {
__kernel void calculate (__global float *a, __global float *b, __global int *res) {
int workItem = get_global_id(0); // Syntax may not right, but you get the idea
int found = 0;
for (int i = 0; i<100000000; i++) {
float c = a[i]*3;
float d = b[i]*2;
if (c<d) {
found++;
}
}
res[workItem]= found;
}
或
它也不起作用
我在创建程序和内核时读取每个步骤的返回代码,所以这不是问题所在
我在这里做错了什么?这里有几个问题
get\u global\u id()
检索到的值,输出除外。但是,由于它们都使用相同的输入,您将为每个工作项获得相同的输出李>
工作项及其关联的全局ID旨在允许您将处理划分为离散单元,而不是一个大的整体循环。我建议你看一些教程,以便更好地理解这个概念。在理解他之前,不要开始编写自己的代码
至于为什么你的程序会冻结你的电脑,我只能猜测,没有看到你的主机代码。也许你得到了?嗨,关于这些问题,我理解你的意思,记住这只是一个简单的代码片段,我的实际代码不是这样的。我必须做这个巨大的循环大概200次。所以问题是缓冲区溢出,就像你说的,我正试图找出哪一个。一个问题是调用另一个内核函数的代价,设置所有参数。。高?我正在考虑将其分解为多个内核函数。
if (true) {
found++;
}
if (1<2) {
found++
}
__private float c= ..;
__private float d= ..;