删除内核中的 cudaMalloc 分配的内存

Jab*_*ber 1 cuda

我想cudaMalloc使用delete[];删除内核内部分配的数组;但是内存检查器显示访问冲突,数组保留在内存中,内核继续执行。

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

__global__ void kernel(int *a)
{
    int *b = new int[10];

    delete[] b; // no violation

    delete[] a; // Memory Checker detects access violation.
}

int main()
{
    int *d_a;
    cudaMalloc(&d_a, 10 * sizeof(int));

    kernel<<<1, 1>>>(d_a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 设备代码分配的内存cudaMallocnew设备代码中分配的内存有什么区别?
  2. 是否可以删除cudaMalloc设备代码中分配的内存?

谢谢

Rob*_*lla 5

  1. cudaMalloc在主机代码中和new(或malloc)在设备代码中分配逻辑上独立的区域。从 API 的角度来看,这两个领域通常不能互操作。

您可能希望阅读文档。在内核那里给出的描述mallocfree一般适用于内核newdelete为好。