有两个函数没搞清楚

有两个cuda API 提供的函数,一直没搞明白:

(1) cudaError_t cudaMemset (void ∗ devPtr, int value, size_t count)说是将由devptr指向的存储区域中前count个字节的值设置为value. 但是我发现只能全部设置成0, 如果设置成其他的值就不对,比如:

cudaMemset(devPtr, 6, mem_size),然后写一个kernel将devptr中的每个数加上4,但返回来的就过并不是10,而是一个非常大的数,不知道为什么?不知道错在哪?

(2)关于将host中的数据拷贝到gpu的constant memory,我用的函数是cudaMemcpyToSymbol,虽然编译没错,但运行时,kernel没有启动,但是将constant memory换成device memory就没事,不知道错在那了?还请 指教。
我是这样用的:

constant int *d_A=NULL;
cudaMalloc((void **)&d_A, mem_size_A);
cudaMemcpyToSymbol(d_A, A, mem_size_A, 0, cudaMemcpyHostToDevice);

cudaMemset ( void * devPtr,
int value,
size_t count
)

Fills the first count bytes of the memory area pointed to by devPtr with the constant byte value value

按LZ的例子每个字节都设上了6,int的话是4字节.LZ自己可以算一下,0x6666是多少?如还不清楚的话,复习一下C的memset.

2)const的空间没有声明吧.
constant int *d_A=NULL;
改为
constant int d_A[d_num];

下面摘自编程手册:
constant变量具有隐含的静态存储.

global void kernel(int *d_b, int count)
{
int tid=blockDim.x
blockIdx.x+threadIdx.x;
int index=tid/blockDim.x; //同一个块内的线程的index相同

*count++; //count初始化为0,想让每个线程都对它加1
d_b[index]++; //d_b[DATA_SIZE/BLOCK_SIZE]初始化为0,这样同一个块内的线程就会对应于数组中的同一个元素
__syncthreads();

这个程序的线程有问题。

0 0