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.
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.,
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 :-)