2017-05-15 13 views
1

delete[]を使用してカーネル内のcudaMallocによって割り当てられた配列を削除したい。メモリチェッカはアクセス違反を示し、配列はメモリ内に保持され、カーネルは引き続き実行されます。カーネル内のcudaMalloc割り当てメモリを削除する

#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によって割り当てられたメモリをデバイスコードで削除することはできますか?デバイス・コードに

おかげホスト・コードで

答えて

4
  1. cudaMallocnew(又はmalloc)は、論理的に別個の領域の外に割り当てます。 2つの領域は、APIの観点からは一般的に相互運用できません。

  2. ない

あなたはdocumentationを読むことを望むかもしれません。カーネル内のmallocfreeの記述は、一般に、カーネル内のnewdeleteにも適用されます。

関連する問題