Boost logo

Ublas :

Subject: Re: [ublas] Numeric bindings for Intel Performance Primitives (IPP)
From: Rutger ter Borg (rutger_at_[hidden])
Date: 2009-03-24 16:34:38


Markus Rickert wrote:
>
> I've been using the Intel Performance Primitives (IPP) for quite some
> time at our department for several applications in robotics, collision
> detection and motion planning. Maybe these bindings are also interesting
> for other users.
>
> The ippm library for small matrices only works on dense matrices, but
> has support for stride parameters. Vector and matrix proxies such as
> ranges, rows, columns etc. are supported through this.
> These stride parameters are however missing in the ipps library. Due to
> this, proxies are not supported there.
>
> In order to be able to use optimized implementations on different
> architectures (Intel, AMD, Cell, ...), I am also thinking about a common
> interface description - similar to the proposed lapack::solve prototype.
> The idea would be to simply change a namespace to switch to a different
> platform (using boost::numeric::bindings::ipp; -> using
> boost::numeric::bindings::acml;) without additional modifications.
>
> Please find attached the implemented bindings and additional test code.
>
>
> Markus

Interesting stuff, I'll try to look into it. As for back-end selection, from
an implementation point of view, I think it would be a better choice to use
functionality of the preprocessor, e.g.,

#define BOOST_NUMERIC_BINDINGS_HAVE_ATLAS
#define BOOST_NUMERIC_BINDINGS_HAVE_CUBLAS

which also enables you to include or not include certain source files. It
also reduces clutter in namespaces by not needing to import a namespace. In
addition, it still allows you to handle more than one back-end at the same
time, i.e., a run-time ATLAS-like optimized selection (e.g. based on matrix
size) of the back-end would technically be possible :-)

Kind regards,

Rutger