|
Ublas : |
From: Manuel González Castro (iinmgc00_at_[hidden])
Date: 2007-03-28 13:01:03
Hi,
my colleague Francisco is out of the office, so I will answer on behalf
him:
Karl Meerbergen wrote:
> I checked the source code. The symbol copy is defined in
> blas1_overload.hpp, but not in blas1.hpp.
>
> I recall that copy was not implemented because of the
> availability of std::copy(), which should also work well.
>
> Do you really want to use blas::copy ?
We use uBLAS as core for our multibody dynamics simulation software. Now
we are comparing high-performance BLAS implementations (ATLAS, GotoBLAS,
ACML, MKL) in terms of efficiency. The bindings helped us a lot: we can
change the BLAS implementation transparently from uBLAS to others.
The copy function is used in bottleneck code, and therefore we suspect
than a fast BLAS implementation, which performs better than std::copy,
can help us.
Since detail::copy functions are already defined in blas1_overload.hpp,
the problem can be solved by adding to blas1.hpp the following code for
the "boost::numeric::bindings::blas::copy" function, it is very similar
to "axpy" in the same file (line #37):
------------- start --------------
// y <- x
template < typename vector_type_x, typename vector_type_y >
void copy(const vector_type_x &x, vector_type_y &y )
{
#ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS
BOOST_STATIC_ASSERT( ( is_same< typename traits::vector_traits<
vector_type_y >::value_type, typename traits::vector_traits<
vector_type_x >::value_type >::value ) ) ;
#else
BOOST_STATIC_ASSERT( ( is_same< typename vector_type_y::value_type,
typename vector_type_x::value_type >::value ) ) ;
#endif
assert( traits::vector_size( x ) == traits::vector_size( y ) ) ;
const int n = traits::vector_size( x ) ;
const int stride_x = traits::vector_stride( x ) ;
const int stride_y = traits::vector_stride( y ) ;
const value_type *x_ptr = traits::vector_storage( x ) ;
value_type *y_ptr = traits::vector_storage( y ) ;
detail::copy( n, x_ptr, stride_x, y_ptr, stride_y ) ;
}
------------- end --------------
Thanks,
Manuel