Memory 具有cudaHostAllocPortable的cudaHostAlloc内存不能在不同的线程中写入

Memory 具有cudaHostAllocPortable的cudaHostAlloc内存不能在不同的线程中写入,memory,memory-management,cuda,access-violation,memcpy,Memory,Memory Management,Cuda,Access Violation,Memcpy,我试图用一个工作线程写入CUDA主机内存(我在主线程中创建的)。 这方面的代码非常简单。我用它来创建内存 unsigned char* _new; cudaHostAlloc(&_new, _size, cudaHostAllocPortable); 并将新指针传递给另一个线程。但是,此线程在尝试使用写入时会创建内存冲突 memcpy(_new, _source, _size); 或 当我使用\u new=新的无符号字符[\u size]或将数据复制到同一线程中,都可以正常工作 有谁

我试图用一个工作线程写入CUDA主机内存(我在主线程中创建的)。 这方面的代码非常简单。我用它来创建内存

unsigned char* _new;
cudaHostAlloc(&_new, _size, cudaHostAllocPortable);
并将新指针传递给另一个线程。但是,此线程在尝试使用写入时会创建内存冲突

memcpy(_new, _source, _size);

当我使用
\u new=新的无符号字符[\u size]
或将数据复制到同一线程中,都可以正常工作


有谁知道为什么会发生这种情况,以及我如何解决这个问题吗?

经过一个漫长而疲惫的夜晚,我终于发现了问题所在

在cuda分配调用之后,线程开始写入主线程的内存。 因此,一旦线程启动,它就不知道这个区域中有一些可写内存,这导致了内存冲突


为了解决这个问题,我将分配调用移动到线程的run()方法中。这样,当两个线程都处于活动状态时,就会分配内存。修正

我正在使用CUDA 4.2。上下文不应该是问题。请选择您的回答作为答案,以便此问题显示为关闭。
cudaMemcpy(_new, _source, _size, cudaMemcpyHostToHost);