我的程序在我的标准Ubuntu x64机器上运行良好,但是如果我在valgrind
下运行,则会看到以下错误:
==22246== Conditional jump or move depends on uninitialised value(s)
==22246== at 0x9854DCBC: ??? (in /usr/lib/x86_64-linux-gnu/libcudnn.so.6.0.21)
==22246== by 0x98182940: cudnnGetConvolutionBackwardFilterWorkspaceSize (in /usr/lib/x86_64-linux-gnu/libcudnn.so.6.0.21)
==22246== by 0x982C3787: ??? (in /usr/lib/x86_64-linux-gnu/libcudnn.so.6.0.21)
==22246== by 0x9817FC0F: cudnnGetConvolutionBackwardFilterAlgorithm (in /usr/lib/x86_64-linux-gnu/libcudnn.so.6.0.21)
==22246== by 0x903F4908: caffe::CuDNNConvolutionLayer<float>::Reshape(std::vector<caffe::Blob<float>*, std::allocator<caffe::Blob<float>*> > const&, std::vector<caffe::Blob<float>*, std::allocator<caffe::Blob<float>*> > const&) (cudnn_conv_layer.cpp:149)
==22246== by 0x904F35D8: SetUp (layer.hpp:72)
==22246== by 0x904F35D8: caffe::Net<float>::Init(caffe::NetParameter const&) (net.cpp:148)
==22246== by 0x904F523F: caffe::Net<float>::Net(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, caffe::Phase, int, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const*, caffe::Net<float> const*) (net.cpp:45)
--from here is my own code
不幸的是,尽管我的代码几乎是caffe
的沼泽标准接口,但是该模型是我无法在此处共享的复杂专有模型。而且,CuDNN是封闭源代码,因此我无法调试它以查看这是否值得关注。
使用Google搜索cudnnGetConvolutionBackwardFilterWorkspaceSize valgrind
和cudnnGetConvolutionBackwardFilterAlgorithm valgrind
除了添加--track-origins=yes
的提示外没有其他有用的方法,但是当我添加时,错误就消失了...
我实际上要解决的问题是深度学习模块在目标平台上的标准库中崩溃,并调用了释放已释放的内存的调用。但是,目标是基于ARM的设备,我无法访问它进行进一步的研究。