2010-10-14 5 views
1

Hallo Tout le monde,bonne performance sur Octave ou Matlab/Bad Performance sur gcc

Je suis en fait sur le sujet de la 3D-balayage pour ramasser robotique & place-applications. Pour commencer, j'utilise un algorithme ICP pour faire correspondre la position d'un objet de référence par rapport à l'objet réel. Pour cela j'utilise Octave/Matlab avec le code suivant: http://www.mathworks.com/matlabcentral/fileexchange/12627-iterative-closest-point-method

Après quelques essais, l'algorithme semble générer une précision satisfaisante au moment approprié. Une correspondance de 6000 à 6000 points de données coûte 100 boucles d'itération, soit environ 15 secondes de temps de calcul.

En fait, j'essaie d'extraire ce matlab/octave-code pour l'intégrer dans mon application afin d'essayer un parallélisme de l'algorithme. Lorsque je cours le code inchangé à partir de ma propre application c, le temps de calcul augmente d'environ 10 à 20 fois. (Mêmes jeux de données!)

Si vous avez activé la fonction Inline et le niveau d'optimazion -O3. Y a-t-il d'autres optimisations que fait Octave lors de la génération d'un fichier .oct? Je ne sais vraiment pas pourquoi il y a une si grande différence de performance.

L'algorithme ICP massif fait double addition, multiplication et division!

Merci pour votre aide!

, Greets Jodel

Répondre

1

Je pense que Octave, comme Matlab, utilise une implémentation de BLAS qui est accordé pour le matériel que vous utilisez. Le faites vous ? Sinon, cela pourrait expliquer la différence de vitesse.

+0

Octave/Matlab utilise le BLAS pour accélérer certaines opérations, ce qui semble logique. En fait, j'utilise du C-Code, je l'extrait du Matlab Envoriment et le temps de calcul augmente d'environ 20 fois. Pensez-vous que le gcc/g ++ accélère le code C externe via BLAS? Je n'utilise aucune accélération matérielle. – jodel

+1

@jodel: GCC (et la plupart des autres compilateurs dont j'ai entendu parler) n'utilisera BLAS que si vous le faites en appelant les fonctions BLAS et en liant à libblas (ou à tout autre nom sur votre système). Oui, je m'attendrais à ce qu'une implémentation BLAS d'une procédure soit plus rapide que votre propre implémentation de la même procédure, sauf si vous avez passé beaucoup de temps à optimiser votre propre implémentation, notamment en l'optimisant pour l'utilisation de la hiérarchie mémoire. –

+0

Le code utilisé n'accélère pas dans une bibliothèque externe. Pour cette raison, je pense qu'il y a peut-être une autre raison pour laquelle la performance est si mauvaise sans utiliser d'octave. – jodel