Quais são algumas das possíveis causas de uma falha de segmentação ao usar o compilador nvcc CUDA?

Eu tenho uma aula de CUDA, vamos chamá-loA, definido em um arquivo de cabeçalho. Eu escrevi um kernel de teste que cria uma instância de classeA, que compila bem e produz o resultado esperado.

Além disso, tenho meu kernel principal do CUDA, que também compila bem e produz o resultado esperado. No entanto, quando eu adiciono código ao meu kernel principal para instanciar uma instância de classeA, o compilador nvcc falha com uma falha de segmentação.

Atualizar:

Para esclarecer, a falha de segmentação acontece durante a compilação, não ao executar o kernel. A linha que estou usando para compilar é:

`nvcc --cubin -arch compute_20 -code sm_20 -I<My include dir> --keep kernel.cu`

Onde<My include dir> é o caminho para o meu caminho local contendo alguns arquivos de cabeçalho do utilitário.

Minha pergunta é: antes de gastar muito tempo isolando um exemplo mínimo exibindo o comportamento (não trivial, devido à base de código relativamente grande), alguém encontrou um problema semelhante? Seria possível que o compilador nvcc falhasse e morresse se o kernel fosse muito longo ou usasse muitos registradores?

Se um problema como contagem de registros puder afetar o compilador dessa maneira, então precisarei repensar como implementar meu kernel para usar menos recursos. Isso também significa que reduzir as coisas para um exemplo mínimo provavelmente fará com que o problema desapareça. No entanto, se isso não for possível, não quero perder tempo em um beco sem saída, mas vou tentar reduzir as coisas a um exemplo mínimo e enviar um relatório de bug para a NVIDIA.

Atualizar:

De acordo com a sugestão de @njuffa, eu reran a compilação com o-v sinalizador ativado. A saída termina com o seguinte:

#$ ptxas  -arch=sm_20 -m64 -v  "/path/to/kernel_ptx/kernel.ptx"  -o "kernel.cubin" 
Segmentation fault
# --error 0x8b --

Isso sugere que o problema é devido àptxas programa, que está deixando de gerar um binário CUDA a partir doptx Arquivo.

questionAnswers(1)

yourAnswerToTheQuestion