help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-gsl] How to efficiently use temporary vectors and matrices


From: Boris Langendoen
Subject: [Help-gsl] How to efficiently use temporary vectors and matrices
Date: Fri, 13 Feb 2004 01:25:10 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113

Hello,

I am trying to implement a realtime version of a kalman filter for the navigation of my universities unmanned helicopter project.

One of the requirements is a 100Hz realtime update rate so some efficiency is necessary. I prototyped the filter in octave/matlab, and it is running at about 6ms per update on my development pc (under Octave/GNU/Linux).

The control computer runs under QNX, and all our realtime code is ANSI C, so now I am attempting to move my filter code to C. I am trying to use GSL as the library, and hope to arrive at about 1ms per update (so that the control code etc... has some time left to do its thing).

The problem I have, is that I have written several functions, each of which needs a number of 'temporary' matrices and vectors to do its internal calculations. These matrices and vectors' sizes can be computed when the filter starts, and remain fixed during runtime. The values of the elements are not always constant.

If I follow the examples from the gsl documentation, I see only two options to create these temporary matrices within my functions.

Either (re-)allocate all the temporary matrices each time I call a function, fill them with the required values and then use them. I have been told this is not very fast, and looks unnecessarily complex to me.

Or allocate all the temporary matrices when the filter starts (during the startup routine), and pass them as arguments to the functions. This should make the code fast in the sense that allocation / deallocation will not have to be done so often, but is also complex as all the temporary matrices are declared and allocated somewhere outside of the calling functions (at the moment I need 37 temporary matrices and 27 temporary vectors in total). It also looks like quite hard to debug.

I would like to know if I missed some (perhaps obvious) solution to this problem. I am not a computer science student so I have no formal training in the field.

Many thanks,

Boris Langendoen,

MSc student, Control & Simulation Division
Faculty of Aerospace Engineering
Delft University of Technology
The Netherlands






reply via email to

[Prev in Thread] Current Thread [Next in Thread]