Cannot generate cuda coredump when cuda kernel access illegal address

I tried to generate a cuda coredump to debug my code.
I set CUDA_ENABLE_COREDUMP_ON_EXCEPTION to 1 and test with two code snippets.
The first one can get coredump file as expected. This sample use a dereference on a null pointer to generate coredump:
global void k(int *d){
int *x = NULL;
*d = *x;
}

The second one cannot get coredump file. This sammple produced a accessing array out of bound error:
global void k(int *d){
*(d+0x10000000) = 1;
}

I guess the second one produced just a runtime error but not a exception so no coredump file generated?
Any comments are appreciated. Many thanks!

Hi @leeyoung48,
Can it be the case that (d + 0x10000000) points to other valid object in global memory?

I dont think so. BTW, I run these snippets on qnx platform, and using cuda-memcheck can raise cuda exception and get coredump file.

@AKravets Any luck to find some explanation for this? Eventually I have to run this code without memecheck. So memcheck works wont help.

Hi @leeyoung48
How do you run memcheck? Are you using set cuda memcheck on in cuda-gdb?

If so, the difference is the following:

  • CUDA_ENABLE_COREDUMP_ON_EXCEPTION=1 would generate coredump on MMU exception (so accessing another object via d pointer would not trigger an error)
  • set cuda memcheck on in cuda-gdb wold actually check for out of bound access (so accessing another object via d pointer would trigger an error)

@AKravets ,Thanks for your quick reply.
I didnt use cuda-gdb.
I used "cuda-memcheck my_test_app" to get the core file.
I think your reply make sense.
If that, perhaps low level mmu mechanism of QNX makes coredump file not generated for my sacond case.

@leeyoung48
Glad I was able to help! Do you need any additional help with the tools?

Nope, thanks.