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.