我正在尝试使用工作线程写入CUDA主机内存(我在主线程中创建)。 这个代码非常简单。我用
创建内存unsigned char* _new;
cudaHostAlloc(&_new, _size, cudaHostAllocPortable);
并将指针_new传递给另一个线程。但是,当尝试使用
写入时,该线程会产生内存冲突memcpy(_new, _source, _size);
或
cudaMemcpy(_new, _source, _size, cudaMemcpyHostToHost);
当我使用_new = new unsigned char[_size];
或在同一个帖子中复制数据时,它可以正常工作。
有人知道为什么会发生这种情况以及如何解决这个问题吗?
答案 0 :(得分:0)
经过漫长而疲惫的夜晚,我终于发现了它的错误!
写入主线程内存的线程是在cuda分配调用之后启动的。 因此,一旦线程启动,它就不会意识到此区域中存在可写内存,这会导致内存冲突。
为了解决这个问题,我将分配调用移到了线程的run()方法中。像这样,当两个线程都处于活动状态时,内存将被分配。固定!