CUDA程序不同模式编译出来的结果怎么不一样?

使用共享区做矩阵运算是不同编译模式得出的结果怎么不一样?
我用的是VS2005,用的开勇大哥做的那个CUDA VS WIZARD,里面有四种模式,EmuDebug、EmuRelease、Debug和Release
我在用EmuDebug、EmuRelease,下面的代码可以正常运行,如果换成其它2种都得出来很不对的数,我想做的效果就是,将两个大小相同8*8的矩阵一一对应的相减,取相减后数的绝对值,然后在把这些值相加起来。返回!原来在做别的CUDA程序时,在debug,和release模式下编译过,也可以正常得出结果。请高手指点。本人初学者

比如说同样是下面这个内核代码,我用EmuDebug、EmuRelease返回正常,可是用其它那两种模式编译出来的效果肯定有问题。

还有一个问题是我在申请共享区时,在呼叫调用内核函数时

global static void _FunctionFour(int *cmOne,int *cmTwo,int *cmThree)
{
shared int data[65];

const int tid = threadIdx.x;

if(tid == 0)
data[0] = 0;

int temp = cmOne[tid] - cmTwo[tid];

data[tid+1] = temp > 0 ? temp : -temp;

data[0] += data[tid+1];

__syncthreads();

if(tid == 0)
*cmThree = data[0];
}

呵呵!emu时,程序在主机上运行,并不在显卡上运行。可能与此有关!你仔细检查一下!

可是我把内核函数部分改成下面这样,在debug,和release模式下运行就可以得到结果,我怀疑是同步处理的问题。。
global static void _FunctionFour(int *cmOne,int *cmTwo,int *cmThree)
{
*cmThree = 100;
}

请高手指点。。。

global static void _FunctionFour(int *cmOne,int *cmTwo,int *cmThree)
{
shared int data[65];

const int tid = threadIdx.x;

if(tid == 0)
data[0] = 0;
__syncthreads()
int temp = cmOne[tid] - cmTwo[tid];

data[tid+1] = temp > 0 ? temp : -temp;

data[0] += data[tid+1];

__syncthreads();

if(tid == 0)
*cmThree = data[0];
}
这样看看,呵呵!