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
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
@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. –
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