2013-08-07 3 views
1

J'utilise matlab pour écrire un programme avec de nombreuses itérations. Il ne peut pas être vectorisé car le traitement des données dans chaque itération est lié à celui de l'itération précédente.Comment le code mex fonctionne plus lentement que le code matlab

Ensuite, je transforme le code matlab en mex en utilisant le codeur MATLAB intégré et la vitesse qui en résulte est encore plus faible. Je ne sais pas si j'ai besoin d'écrire le code Mex par moi-même, car il semble que le code Mex n'aide pas.

+0

duplication possible de [le fichier mex de Matlab est lent par rapport à son équivalent droit en C] (http://stackoverflow.com/questions/5228388/matlab-mex-file-is-slow-compared-to-its-straight- c-equivalent) – TheCodeArtist

+0

Je ne pense pas que ce soit un doublon, cette question traitait d'un cas spécifique où le ralentissement se produisait au niveau de la passerelle MEX-MATLAB (selon la réponse acceptée, cela a été corrigé dans R2011a), plus le PO n'utilisait même pas les functinos MX-API. Alors que celui-ci utilise * MATLAB coder * pour la génération de code. Cela dit, cette question ne peut pas être résolue dans sa forme actuelle, nous avons besoin de voir du code (par exemple quel était le code MATLAB original, et quel est le code C généré). – Amro

+2

Avez-vous essayé d'utiliser l'outil profileur de Matlab? en C pour déterminer quelles parties prennent le plus de temps? Et Amro a raison, s'il vous plaît poster du code. – MattG

Répondre

0

Je suggère que si vous le pouvez, vous contactez MathWorks pour leur demander conseil. Si vous n'êtes pas en mesure de le faire, je vous suggère de lire la documentation et d'essayer tout ce que vous trouverez avant d'abandonner.

J'ai trouvé que quelques petites modifications à la façon dont on implémente le code MATLAB, et quelques petites modifications aux paramètres du projet (comme désactiver la réactivité à Ctrl-C, les appels extrinsèques à MATLAB) peuvent faire donner une différence de vitesse d'un ordre de grandeur ou plus dans le code généré. Il n'y a pas beaucoup de personnes en dehors de MathWorks qui seraient capables de donner de bons conseils sur les changements qui pourraient être valables/raisonnables pour vous. Je devrais dire que j'ai seulement utilisé MATLAB Coder sur un projet, et je ne suis pas du tout un programmeur C expert (en fait pas même compétent). Néanmoins, j'ai réussi à produire du code C qui était environ 10-15 fois plus rapide que le code MATLAB original quand il était mexed. J'y suis par a) juste en jouant avec tous les différents paramètres pour voir ce qui s'est passé et b) méthodiquement en passant par la documentation, et voir s'il y avait des endroits dans mon code MATLAB où je pouvais appliquer les constructions que je rencontrais (comme coder.nullcopy, coder.unroll etc.). Bien sûr, votre code peut différer considérablement.

Questions connexes