blas::nrm2 fails for cuda
The following code (npneq/inq!1130 (diffs) ):
gamma_ = boost::multi::blas::nrm2(df_[pos]);
compiles on the CPU but fails when compiling with Cuda (and HIP). df_
is a 2-d array.
The error is (https://gitlab.com/npneq/inq/-/jobs/7912329225):
/builds/npneq/inq/external_libs/multi/include/multi/adaptors/../adaptors/blas/nrm2.hpp(25): error: no instance of function template "boost::multi::cuda::cublas::context::nrm2" matches the argument list
argument types are: (boost::multi::size_type, thrust::pointer<const double, thrust::cuda_cub::tag, const double &, thrust::use_default>, boost::multi::index, double *)
object type is: boost::multi::cuda::cublas::context
{ return blas::default_context_of(x.base())->nrm2(n, x.base(), x.stride(), res), std::next(res); }
^
detected during:
instantiation of "auto boost::multi::blas::nrm2_n(const It &, Size, A0D) [with It=boost::multi::array_iterator<double, 1L, thrust::pointer<const double, thrust::cuda_cub::tag, const double &, thrust::use_default>>, Size=boost::multi::size_type, A0D=double *]" at line 47
instantiation of "auto boost::multi::blas::copy_n(boost::multi::blas::nrm2_ptr<boost::multi::subarray<double, 1L, std::allocator_traits<gpu::caching_allocator<double, thrust::mr::allocator<double, thrust::mr::memory_resource<thrust::universal_ptr<void>>>>>::pointer, boost::multi::layout_t<1L, boost::multi::size_type>>::const_iterator, boost::multi::layout_t<1L, boost::multi::size_type>::size_type>, Size2, ItOut) [with ItOut=double *, Size2=int]" at line 67
instantiation of "auto boost::multi::blas::nrm2_ref<X, Ptr>::decay() const->boost::multi::blas::nrm2_ref<X, Ptr>::decay_type [with X=boost::multi::subarray<double, 1L, thrust::pointer<double, thrust::cuda_cub::tag, double &, thrust::use_default>, boost::multi::layout_t<1L, boost::multi::size_type>>, Ptr=boost::multi::blas::nrm2_ptr<boost::multi::array_iterator<double, 1L, thrust::pointer<const double, thrust::cuda_cub::tag, const double &, thrust::use_default>>, boost::multi::size_type>]" at line 68
instantiation of "boost::multi::blas::nrm2_ref<X, Ptr>::operator boost::multi::blas::nrm2_ref<X, Ptr>::decay_type() const [with X=boost::multi::subarray<double, 1L, thrust::pointer<double, thrust::cuda_cub::tag, double &, thrust::use_default>, boost::multi::layout_t<1L, boost::multi::size_type>>, Ptr=boost::multi::blas::nrm2_ptr<boost::multi::array_iterator<double, 1L, thrust::pointer<const double, thrust::cuda_cub::tag, const double &, thrust::use_default>>, boost::multi::size_type>]" at line 136 of /builds/npneq/inq/src/mixers/broyden.hpp
instantiation of "void inq::mixers::broyden<FieldType>::operator()(FieldType &, const FieldType &) [with FieldType=inq::basis::field_set<inq::basis::real_space, double, inq::parallel::partition>]" at line 56 of /builds/npneq/inq/src/mixers/broyden.hpp
implicit generation of "inq::mixers::broyden<FieldType>::~broyden() noexcept [with FieldType=inq::basis::field_set<inq::basis::real_space, double, inq::parallel::partition>]" at line 56 of /builds/npneq/inq/src/mixers/broyden.hpp
instantiation of class "inq::mixers::broyden<FieldType> [with FieldType=inq::basis::field_set<inq::basis::real_space, double, inq::parallel::partition>]" at line 56 of /builds/npneq/inq/src/mixers/broyden.hpp
instantiation of "inq::mixers::broyden<FieldType>::broyden(int, double, long long) [with FieldType=inq::basis::field_set<inq::basis::real_space, double, inq::parallel::partition>]" at line 962 of /usr/include/c++/11/bits/unique_ptr.h
instantiation of "std::_MakeUniq<_Tp>::__single_object std::make_unique<_Tp,_Args...>(_Args &&...) [with _Tp=inq::mixers::broyden<inq::basis::field_set<inq::basis::real_space, double, inq::parallel::partition>>, _Args=<int, double, boost::multi::size_type>]" at line 129 of /builds/npneq/inq/src/ground_state/calculator.hpp