Closed nbecker closed 6 years ago
Here's what valgrind says:
==11586== Invalid write of size 8
==11586== at 0x2BF64EA7: void xt::detail::excluding_copy<unsigned long const*, unsigned long const*, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > > >(unsigned long const*, unsigned long const*, unsigned long const*, unsigned long const*, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF6170A: xt::xreducer<xt::detail::maximum<double>, xt::jlarray<double> const&, xt::jltensor<unsigned long, 1ul> const&>::xreducer<xt::detail::maximum<double>, xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&>(xt::detail::maximum<double>&&, xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF5E95C: auto xt::reduce<xt::detail::maximum<double>, xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&>(xt::detail::maximum<double>&&, xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF5E9AF: auto xt::amax<xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&>(xt::jlarray<double>&, xt::jltensor<unsigned long, 1ul>&) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF5F569: auto logsumexp2<xt::jlarray<double>, xt::jltensor<unsigned long, 1ul> >(xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF5CB5F: register_julia_modules::{lambda(xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>)#2}::operator()(xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>) const (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF5D333: std::_Function_handler<xt::jlarray<double> (xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>), register_julia_modules::{lambda(xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>)#2}>::_M_invoke(std::_Any_data const&, xt::jlarray<double>&&, xt::jltensor<unsigned long, 1ul>&&) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF7E963: std::function<xt::jlarray<double> (xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>)>::operator()(xt::jlarray<double>, xt::jltensor<unsigned long, 1ul>) const (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF7E60F: jlcxx::detail::ReturnTypeAdapter<xt::jlarray<double>, xt::jlarray<double>, xt::jltensor<unsigned long, 1ul> >::operator()(void const*, jl_array_t*, jl_array_t*) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x2BF7E249: jlcxx::detail::CallFunctor<xt::jlarray<double>, xt::jlarray<double>, xt::jltensor<unsigned long, 1ul> >::apply(void const*, jl_array_t*, jl_array_t*) (in /home/nbecker/xtensor-julia-test/liblogsumexp.so)
==11586== by 0x1609A2CD: ???
==11586== by 0x1609A326: ???
==11586== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==11586==
signal (11): Segmentation fault
@nbecker, I just run your original code.
In the test_logsumexp.jl you call the function y = logsumexpnb.logsumexp(u,Array{UInt64}([1])) with u instead of x. I.e. there is one dimension less than expected by the algorithm.
When calling with x it works for me.
We should probably throw an appropriate runtime error or a warning, though.
However, we also fixed some memory issues in the reducers with the latest release.
Cheers,
Wolf
Closing this issue, and opening the following: https://github.com/QuantStack/xtensor/issues/629
Trying conversion of logsumexp test from python to julia I did try changing the pass by const&'s to pass by value
https://gist.github.com/nbecker/af2011043a29e1635adfaad73c0e4e9e