memcpy个别byte无法拷贝

我正在用memcpy从gpu memory向gpu memory拷贝数据,数据为long long int (8bytes).
我的一个block里面有32个threads. 结果对于每个threadIdx.x = 16的thread,要拷贝的8bytes的最低一个bytes一直拷不过去。
如果用赋值的话,则8个bytes都拷不过去。
但是用printf输出源数据个8个bytes是完全正确的。

LZ您好:

从未遇到过您这样的问题,估计是您代码的问题,请您提供您代码和出错的详情。

感谢合作。

已经找到原因,是kernel函数里的memcpy问题,我发现如果memcpy的size = 0,那么它仍然拷贝一个byte过去,不知道这是什么原因?附上一个小程序,您可以看到仍有一个byte被改了

#include <iostream>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_functions.h"
using namespace std;
__global__ void copy(char *dev)
{
	char temp = 'g';
	memcpy(dev + 10,&temp,0);
}
int main( )
{
	char *host = new char [32];
	char *host1 = new char [32];
	char *dev;
	host = "abbbbbbbbbbbbbbbbbbbbbbbbbbb";
	cudaError error1 = cudaMalloc(&dev,32);
	cudaError error2 = cudaMemcpy(dev,host,32,cudaMemcpyHostToDevice);
	copy<<<1,1>>>(dev);
	cudaError error3 = cudaMemcpy(host1,dev,32,cudaMemcpyDeviceToHost);
	cout<<host1<<endl;
	return 0;
}

楼主您好,请不要使用任何未定义的行为:
例如:
(1)复制大小为0或者负数的
(2)输入或者输出指针为NULL或者无效的
(3)输入区域或者输出区域重叠的

它们均不是memcpy()的设计原意,并将导致未定义的行为(根据不同的实现将展现出不同的随机行为),感谢来访。