我想使用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;
}
cudaMalloc
和new
分配的内存有何区别? cudaMalloc
分配的内存?由于
答案 0 :(得分:4)
cudaMalloc
和设备代码中的new
(或malloc
)分配出逻辑上独立的区域。从API的角度来看,这两个领域通常不具有互操作性。
没有
您可能希望阅读documentation。内核malloc
和free
的描述通常也适用于内核new
和delete
。