約 2GB のローカル メモリを使用するカーネルがあります。cudaMalloc
以前に実行すると、2.5GB のメモリを割り当てようとするMyが失敗しますkernel_func
。
kernel_func
の実行が終了した後も 2GB のメモリがまだ使用されていることがわかりましたcudaMalloc
。誰かが解決策または説明を持っていますか?
グローバルメモリを使用kernel_func
すると問題が解決することはわかっていますが、何らかの理由で、その巨大なローカル静的配列にローカルメモリを使用する必要があります。
__global__ kernel_func() {
// The huge static array goes here
short my_array[50000];
}
int main() {
kernel_func<<<64, 128>>>();
// my_array is still occupying memory are this point
// This cudaMalloc will fail with insufficient memory
cudaMalloc(/* 2.5GB data */);
}