我编了这样一个程序,最开始64个元素的数组初始值全为1,目的是将64个元素的数组中以2、3交替作为该数组数据,但是我在设备端显示的时候在0-31号线程下是2、3交替,但其后就全部是1。然后我将该数组传回主机端显示的时候则数组中64个元素按2、3交替存放的。不知道是什么原因??请高手指教一下。谢谢了!!
非常感谢
zhongliangv External Media (UID: 25720864)
希望以后还能得到您的指导,谢谢!!
// includes, system
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
// includes, project
#include <cufft.h>
#include <cutil_inline.h>
#include "cuPrintf.cuh1"
#define size 64
__global__ void my(int *da)
{
int tid=threadIdx.x;
int Ns,p,q;
if(tid<32) //取了线程的一半,因为在一个线程的条件下,可以提取到数组两个 //下标,就正好取到了整个数组
for(Ns=1;Ns<2;Ns=Ns<<1)
{ p=tid/Ns*Ns*2+tid%Ns;
q=p+Ns;
da[p]=da[p]+1;
da[q]=da[q]+2;
__syncthreads();
}
//cuPrintf("%d\n",da[tid]);
}
int main()
{ int i;
int *h_data1=(int*)malloc(sizeof(int) * size);
int *h_result1=(int*)malloc(sizeof(int) * size);
for ( i =0; i <size; i++)
{
h_data1[i]=1;
}
int * d_data1;
cutilSafeCall(cudaMalloc((void**)&d_data1, sizeof(int)*size));
cutilSafeCall(cudaMemcpy(d_data1, h_data1,sizeof(int)*size,
cudaMemcpyHostToDevice));
cudaPrintfInit();
my<<<1,size>>>(d_data1);
cudaPrintfDisplay(stdout, true);
cudaPrintfEnd();
cutilSafeCall(cudaMemcpy(h_result1, d_data1,sizeof(int)*size,
cudaMemcpyDeviceToHost));
for(i=0;i<size;i++)
printf("i=%d:%d\n",i,h_result1[i]);
}