Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information