2012-11-10 2 views
6

Je suis sur le point d'écrire un algorthim pour les applications en temps réel, ce qui implique des NLP de grande dimension (programmations non linéaires).Quel est l'écart de performance entre Matmab fmincons et le solveur NLP de C++ comme ipopt?

avant les implentations, j'ai besoin de chronométrer mes algorithmes pour voir si c'est faisable pour les applications en temps réel, donc j'utilise les fmincons intégrés de Matlab comme référence. Comme le montre l'expérience, les algorithmes matlab ont tendance à varier plus lentement que leurs équivalents en C++. Je veux donc estimer quel type de gain de performance je peux espérer dans ce cas particulier? Comme mon travail est principalement lié aux applications en temps réel, je n'utilise donc que rarement la PNL (programmation non linéaire), donc j'ai demandé à mes collègues de travailler, ils me recommandent d'essayer ipopt pour commencer, j'ai googlé son site web, il n'y a pas de Il n'y a pas beaucoup de sujets concernant les détails de leurs algorithmes (au moins dans Matlab, il n'est pas difficile de vérifier les détails de leurs algorthims), donc je n'ai pratiquement aucune idée de la précision/robustesse/optimalité etc. à propos de ça. Donc n'importe quelle aide ici concernant les implémentations C++ de NLP sera très utile, merci beaucoup à l'avance.

+1

Les problèmes de recherche sont très dépendants du domaine; La seule réponse définitive que vous obtiendrez est d'avoir les deux systèmes pour résoudre un problème réel que vous pourriez rencontrer, et de voir comment ils fonctionnent. – Isaac

Répondre

2

Beaucoup de ces types de problèmes sont dominés par de grandes multiplications matricielles O (n^~ 3). Si tel est le cas et que les deux systèmes utilisent le même algorithme, les performances seront similaires et ne dépendront pas du langage, car la fonction de multiplication de la matrice sous-jacente sera implémentée de manière native dans asm.

Si l'algorithme n'est pas dominé par une simple fonction comme celle-ci, et nécessite beaucoup de gestion de la mémoire, la bibliothèque C++ gagnera beaucoup (3-10 x comme rapide).

(Si les performances sont critiques, de nombreuses personnes utilisent OpenCL pour extraire du matériel vers le GPU qui conçoit pour ce type de calcul numérique, et présente des différences de prix/performances dans la plage 20-100x. off à un cluster si vous en avez besoin encore plus rapidement.)

+0

Je suis d'accord avec vous sur beaucoup de parties, mais je pense que GPU peut apporter des améliorations ici, en utilisant SQP comme exemple, pratiquement la méthode doit avoir beaucoup de branchement pour fonctionner correctement, vu la très faible performance de branchement du GPU et le cache très bas. supprimer complètement tout avantage GPU sur CPU dans la bande passante de la mémoire), je serai surpris si implantation GPU ne sera pas significativement plus lent que leur contrepartie CPU. – user0002128

+0

L'avantage des GPU sur CPU est son architecture massivement parallèle, qui a effectivement des milliers de cœurs de processeurs contre une dizaine de processeurs. Pourvu que votre problème puisse être subdivisé en une structure parallèle de données (ce que tous ne peuvent pas), le GPU gagnera par ordre (s) de grandeur. http://www.youtube.com/watch?v=IEWGTpsFtt8 –

Questions connexes