有一段代码看不明白

计算c=a+b的核函数
global void deviceAdd(char *a,char *b,char *c,int N)
{
shared char d[1024];
shared int pd;

int tid = threadIdx.x;
if(tid==0)
	pd = 0;
if(tid<N)
{
	int sum = a[tid]+b[tid];
	c[tid] = sum%10;
	d[tid] = sum/10;
	pd += d[tid];
}
__syncthreads();
while(pd)
{
	pd = 0;
	int sum = c[0];
	if(tid>=1)
	{
		sum = c[tid] + d[tid-1];
		c[tid] = sum%10;
	}
	__syncthreads();
	d[tid] = sum/10;
	pd += d[tid];
}
if(tid==0)
	c[N] = d[N-1];

}
不明白pd的作用

LZ你好:

我无法理解此代码的意图,以及这也不是您宣称的“计算c=a+b”。

如果这个代码是第三方提供的,请您询问一下该第三方这段代码的实现意图。
如果这个代码是您撰写的,那么请您回答一下,对一个block内共享的变量pd,各个线程都直接上去修改,而且不是原子操作,也不是简单标记,这么干到底是为了神马?

这个是我同学给我的,我看他在电脑上跑过,确实是计算c=a+b的,只不过a和b的值用的是固定的,并且a和b两个数的位数相同,他的意图是计算特别大的数的加法。只是我一直不明白那个共享的变量pd的作用

请您即刻联系您的同学以获得第一手资料!

哎,要是能联系到我就不用来论坛来问了

既然ICE反复告诉您,您始终坚持不信,那么您还来论坛干嘛??

不相信就别来了。