本帖最后由 wch8802 于 2013-11-19 15:18 编辑
因为图像直方图程序中一个线程负责统计64个像素点的亮度值统计,所以有像素索引自加操作,这个应该算整数加法指令;通过三通道灰度值计算亮度值涉及到浮点数与整数相乘,以及结果相加,这里涉及到浮点加法指令;最后涉及亮度值得统计涉及到原子加法操作,这里涉及整数加法指令操作。由于程序不仅涉及浮点乘法指令和加法指令,又涉及到整数加法指令。由于基本指令吞吐率整数加法和浮点数加法及乘法指令不一样,导致最后既不能与整数和逻辑运算峰值比较,也不能和浮点运算峰值比较。这个怎么办,求版主解惑。
代码如下:
for(i=0;i<LOOP_N;i++)//LOOP_N=64
{
if(offset<(*w)*(*h))
{
r=((uchar*)ri)[offset];
g=((uchar*)gi)[offset];
b=((uchar*)bi)[offset];
offset++;
u=(unsigned char)(0.299f*r+0.587f*g+0.114f*b);
atomicAdd((int*)&smem,1);
}
}
|