0

我正在尝试使用工作线程写入 CUDA 主机内存(我在主线程中创建)。代码非常简单。我用

unsigned char* _new;
cudaHostAlloc(&_new, _size, cudaHostAllocPortable);

并将指针 _new 传递给另一个线程。但是,该线程在尝试写入时会创建内存冲突

memcpy(_new, _source, _size);

或者

cudaMemcpy(_new, _source, _size, cudaMemcpyHostToHost);

当我_new = new unsigned char[_size];在同一个线程中使用或复制数据时,它可以工作。

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

4

1 回答 1

0

经过一个漫长而累人的夜晚,我终于发现了它的问题所在!

写入主线程内存的线程是在 cuda 分配调用之后启动的。因此,一旦线程启动,它并没有意识到这个区域有一些可写的内存,这导致了内存冲突。

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

于 2012-12-21T11:13:14.650 回答