Acabo de reescribir un programa Matlab en C++ como una función mex para acelerar las cosas, con resultados fantásticos. Esta decisión de optimización fue una muy buena idea, con hasta un factor de aceleración de 20 sin enhebrar. Todavía me dejó curiosidad sobre en qué estaba gastando el tiempo la función mex y quería identificar posibles cuellos de botella.Perfilando una función mex
Estoy buscando una manera de perfilar mex-functions. El profiler de matlab no es de mucha utilidad, y los otros profilers que he descargado (tanto de forma gratuita como de prueba) todos quieren que se ejecute un ejecutable. No soy un gurú mexicano, pero por lo que he entendido, la única forma de ejecutar un mex es desde dentro de Matlab. La función mex se compila en un dll, pero se llama .mex64. Entonces, este problema debería ser similar a perfilar un dll. Para escribir la función mex de C++ utilicé un VS2005 de un solo usuario (es decir, no la versión de equipo) y estoy ejecutando en una plataforma x64.
¿Alguien sabe de una buena manera de perfilar una función mex? ¿Qué herramienta debo usar y cómo la uso cuando comienzo desde Matlab? ¿O hay alguna otra forma de perfilar el código C++?
Gracias por el consejo. Es un buen enfoque. Mi único problema es que la entrada al mexFunction es un gran grupo de grandes estructuras de matlab. Necesito escribir código para crear todo esto en el contenedor para poder ejecutarlo, lo que me impide ir al mismo tiempo y sin pensarlo. – AnnaR
no seguir. ¿no puedes crear todas tus estructuras dentro de matlab y guardarlas en un archivo .mat? (es decir, todo lo que antes era un argumento de entrada para su función mex ahora se guarda en un archivo .mat y se lee desde el nuevo contenedor desde el disco. – second
Es posible perfilar sus archivos mex directamente usando valgrind. Compruebe [this] (http : //stackoverflow.com/questions/11220250/how-do-i-profile-a-mex-function-in-matlab/12405131#12405131) answer. – angainor