线程数据计算问题

请问大家,我写的核函数的线程分配如下:
if ( tid == 499 )
{
ei[tid] = sin( OMIGA * i ); (1)
}

else
{

if ( tid != IncidentEnd )
{
hi[tid] = hi[tid] - 0.5*( ei[tid+1] - ei[tid]); (2)
__syncthreads();
}

if ((tid != IncidentStart) && (tid != IncidentEnd) )
{
ei[tid] = ei[tid] - 0.5*( hi[tid] - hi[tid-1]); (3)
__syncthreads();
}

一共用了1000个线程。作用是:在线程tie=499处设了一个源(1)处,(2)(3)两行代码是计算tid索引的数据的迭代关系。但结果很奇特!前499个线程(0——498),计算出来的数据完全正确,但是后面的500个线程(500——999)计算结果全是零,这是为什么呢? 我觉得(2)(3)的计算对线程来说是对称的啊, 为什么前面能出结果,而后面的全是零啊? 线程数据输出图见附件。 谢谢!

补充:正确的仿真图应该是0–488tid 和500–999tid的数据是对称的,但图上图,500–999tid的数据却是0,感觉这结果很不可思议,因为0–499tid和500–999tid都采用的是同一个计算方程啊(都是(2)(3),图片里只给出了ei(tid)数据图,hi(tid)相似),但是0–488都能正常出来啊!!

我建议楼主先去掉__syncthreads(),因为你用了分支以后,无法进入分支的线程是不会到达__syncthreads()同步的

谢谢您啊!我试试看。

我这觉着吧,把else拿掉吧,亲~

为了保证ei[499]的值后面能正确用到,在原来else的地方加上__syncthreads()吧。

以及以前的__syncthreads()留着吧,你不是前面一半都没问题么。

无责任酱油建议,欢迎LZ勇做小白鼠!

非常感谢啊!!

LZ问题解决了么?也回复反馈下吧,表都是各种致谢,解决问题才是关键。

问题解决了,所以还得致谢啊!呵呵……恭喜发财!