Depuração de patos de borracha realmente funciona.
Acontece que é suficiente usar unsetenv antes de chamar cuInit ou cudaSetDevice, e o valor inicial da variável environmetal será ignorado.
#include <stdio.h>
#include <stdlib.h>
#include <cuda.h>
int
main(int argc, char **argv, char **env)
{
int x;
unsetenv("CUDA_VISIBLE_DEVICES");
cuInit(0);
// Now we see all the devices on machine
cuDeviceGetCount(&x);
printf("%d\n",x);
return 0;
}