Opened 7 years ago

Closed 4 years ago

#11458 closed Patches (obsolete)

Performance improvement in boost/math.quaternion.hpp

Reported by: Scott Macintire <scott.macintire@…> Owned by: John Maddock
Milestone: To Be Determined Component: math
Version: Boost 1.58.0 Severity: Optimization
Keywords: Cc:

Description

Quaternion makes use of std::valarray to make some trivial math operations take fewer LOC to implemen. valarray always mallocs, even for a small number of values, in this case 2 or 4. This has a huge performance impact on quaternion division. In an model I am working on, replacing the use of valarray with a normal stack array resulted in a 32% performance improvement. As the changes are not hard to implement and rely on no special libraries, I believe that the boost library can benefit from these changes.

I've attached a modified header to this that should fix the issue, but do not have time or resources to fully test it for boost inclusion. I've done my best to emulate your style, but I assume someone will want things done slightly differently.

Attachments (1)

quaternion.hpp (77.2 KB ) - added by Scott Macintire <scott.macintire@…> 7 years ago.
editted header

Download all attachments as: .zip

Change History (3)

by Scott Macintire <scott.macintire@…>, 7 years ago

Attachment: quaternion.hpp added

editted header

comment:1 by gast128@…, 7 years ago

Although this issue is about the heap alloc, it seems that Intel has made a valarrray using SIMD instructions. That could be the next improvement:

https://software.intel.com/en-us/node/514490.

Perhaps a valarray with static sizes could in itself be a good addition to Boost (in Boost.Container, but this probably this spawns a heated modularization discussion).

comment:2 by John Maddock, 4 years ago

Resolution: obsolete
Status: newclosed

Current version no longer uses valarray.

Note: See TracTickets for help on using tickets.