【发布时间】:2012-03-12 04:26:34
【问题描述】:
各位,如果标题令人困惑,我深表歉意。我虽然漫长而艰难,但无法想出正确的方法来用一行来表达这个问题。所以这里有更多细节。我正在做一个基本的图像减法,其中第二个图像已被修改,我需要找到对图像进行了多少更改的比率。为此,我使用了以下代码。两张图片都是 128x1024。
for(int i = 0; i < 128; i++)
{
for(int j = 0; j < 1024; j++)
{
den++;
diff[i * 1024 + j] = orig[i * 1024 + j] - modified[i * 1024 + j];
if(diff[i * 1024 + j] < error)
{
num++;
}
}
}
ratio = num/den;
上述代码在 CPU 上运行良好,但我想尝试在 CUDA 上执行此操作。为此,我可以设置 CUDA 对图像进行基本减法(下面的代码),但我不知道如何执行条件 if 语句来得出我的比率。
__global__ void calcRatio(float *orig, float *modified, int size, float *result)
{
int index = threadIdx.x + blockIdx.x * blockDim.x;
if(index < size)
result[index] = orig[index] - modified[index];
}
所以,到目前为止,它可以工作,但我无法弄清楚如何并行化每个线程中的 num 和 den 计数器来计算所有线程执行结束时的比率。对我来说,感觉 num 和 den 计数器是独立于线程的,因为每次我尝试使用它们时,它们似乎只增加一次。
任何帮助都将不胜感激,因为我刚刚开始使用 CUDA,而且我在网上看到的每个示例似乎都不适用于我需要做的事情。
编辑:修正了我幼稚的代码。忘记在代码中键入主要条件之一。这是漫长的一天。
for(int i = 0; i < 128; i++)
{
for(int j = 0; j < 1024; j++)
{
if(modified[i * 1024 + j] < 400.0) //400.0 threshold value to ignore noise
{
den++;
diff[i * 1024 + j] = orig[i * 1024 + j] - modified[i * 1024 + j];
if(diff[i * 1024 + j] < error)
{
num++;
}
}
}
}
ratio = num/den;
【问题讨论】:
标签: c++ visual-studio-2008 cuda