約 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 */);
}