使用nvcc CUDA编译器时,分段错误的可能原因是什么?

时间:2012-12-11 22:48:03

标签: compiler-construction cuda segmentation-fault nvcc

我有一个CUDA类,我们称之为A,在头文件中定义。我编写了一个测试内核,它创建了一个类A的实例,它可以很好地编译并产生预期的结果。

另外,我有我的主要CUDA内核,它也编译好并产生预期的结果。但是,当我向主内核添加代码以实例化类A的实例时,nvcc编译器会因分段错误而失败。

更新

为了澄清,分段错误发生在编译期间,而不是在运行内核时。我用来编译的行是:

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

其中<My include dir>是包含一些实用程序头文件的本地路径的路径。

我的问题是,在花费大量时间隔离展示行为的最小示例(由于相对较大的代码库而不是微不足道)之前,有没有人遇到过类似的问题?如果内核太长或者使用太多寄存器,nvcc编译器是否有可能失败并死掉?

如果寄存器计数等问题会以这种方式影响编译器,那么我需要重新思考如何实现我的内核以使用更少的资源。这也意味着将事情缩减到最小的例子可能会使问题消失。然而,如果这甚至不可能,我不想浪费时间在一个死胡同,而是宁愿尝试将事情简化为最小的例子,并将向NVIDIA提交错误报告。

更新

根据@njuffa的建议,我重新启动了-v标志启用的编译。输出结束如下:

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

这表明问题是由ptxas程序引起的,该程序无法从ptx文件生成CUDA二进制文件。

1 个答案:

答案 0 :(得分:3)

这似乎是CUDA 5.0 ptxas汇编程序中某种类型的真正错误。有人向NVIDIA报告过,我们可以假设它在问题被提出三年多以来的某个时间被修复了,并且添加了这个答案。

[这个答案已经从评论中汇总并添加为社区维基条目,以便将这个问题从未回答的问题列表中删除]