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

时间:2017-05-15 21:06:24

标签: 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;
}
  1. 设备代码中cudaMallocnew分配的内存有何区别?
  2. 是否可以删除设备代码中cudaMalloc分配的内存?
  3. 由于

1 个答案:

答案 0 :(得分:4)

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

  2. 没有

  3. 您可能希望阅读documentation。内核mallocfree的描述通常也适用于内核newdelete