CUDA 6.5 compiler

Hi all,

Compiling under L4T with CUDA 6.5 compiler. I’m getting an internal error, “catastrophic error detected in compilation”, with the following scenario:

 // Constructor
 ConvolutionNode(std::initializer_list<std::string> inputList): Node(inputList) {
      // ...
 }

 // Invocation
 pRegistry->registerNode("conv0_1", new ConvolutionNode({ "conv1_1", "idata" });

The compiler throws this error when attempting to instantiate the Node class in the line above.

Tips?

When the compiler reports an internal error, in the vast majority of cases this means there is a bug in the compiler. Since compilers are very complex software products, even identifying workarounds normally requires in-depth analysis by the CUDA compiler team (often no workaround is possible and programmers simply have to wait for a bug fix to materialize).

Since nobody is going to spend time looking at a 3+ years old compiler, your best option is to upgrade to a more recent CUDA version, ideally the latest (9.1 at this time). Avoid version 7.0, as that was unusually buggy, while versions 7.5 and 8.0 are quite robust in my experience.

Of course you could muck around with the source code, e.g. re-stating code in slightly different idioms or reducing optimization level, in the hopes of somehow avoiding the bug, but if it were me, I would not spend time on that.

L4T is tegra, i.e. Jetson, probably

You’re asking a lot of Jetson questions here when there are forums dedicated to Jetson.

I’m assuming you have a TK1:

https://devtalk.nvidia.com/default/topic/1028734/tegra-k1-vs-tegra-x1-vs-tegra-x2-cudnn-convolution-speeds/#5232826

I think upgrading Jetson TK1 beyond 6.5 may be difficult, but you should certainly install the latest Jetpack. However, for TK1 (not sure if that is what you have) you will be limited to CUDA 6.5:

https://developer.nvidia.com/linux-tegra-r216

As njuffa said, nobody is going to spend any time with CUDA 6.5. If you want help, provide a complete example, maybe there will be workaround suggestions. You may have to muck around with the code.

Or go get yourself a TX1 or TX2.

Isn’t std::initializer_list part of C++11 ?

http://en.cppreference.com/w/cpp/utility/initializer_list

I think C++11 support was a “hidden” beta feature in CUDA 6.5. Early and ragged. Are you compiling with the proper switches? I imagine you are.

So if you want to stay with TK1/CUDA 6.5, you’ll probably need to choose something that doesn’t excite this particular compiler issue.