open source multicube explorer


Hoy he tenido la oportunidad de probar una nueva herramienta open source (pero no GPL) que se ha programado como producto entregable del proyecto MULTICUBE en el que estoy trabajando. Se trata de un framework para la exploración del espacio de diseño de sistemas embebidos. Se llama multicube explorer y ha sido programado por Vittorio Zaccaria en el Politécnico de Milán.

Nada más descargarlo me leído el archivo INSTALL y he comprobado que tengo los paquetes necesarios en mi estación de trabajo, que corre un antiguo Fedora Core 7:

1. GCC g++ 4.0.1 or higher

$ rpm -qa |egrep -i ‘gcc’
gcc-c++-4.1.2-27.fc7
libgcc-4.1.2-27.fc7
gcc-4.1.2-27.fc7
gcc-gfortran-4.1.2-27.fc7

2. Libxml2

$ rpm -qa |egrep -i ‘libxml’
libxml2-devel-2.6.31-1.fc7
libxml2-python-2.6.31-1.fc7
libxml2-2.6.31-1.fc7

3. Bison/YACC parser generator

$ rpm -qa |egrep -i ‘bison’
bison-2.3-3.fc7

4. Flex/Lex lexical analyzer

$ rpm -qa |egrep -i ‘flex’
flex-2.5.33-9.fc7

Tras descomprimirlo y compilarlo ejecuto los tests para comprobar que todo está correctamente instalado.

tests/do_tests

resultando:

$ ./do_tests
1) Tested XML design space construction: PASSED
2) Tested XML rules : PASSED
3) Tested XML error reporting : PASSED
4) Tested XML input/output interface : PASSED
5) Tested full factorial features : PASSED

Tras esto me leí el documento pdf que viene en la carpeta de documentación para aprender a usar la herramienta. Básicamente la herramienta se puede utilizar mediante su shell (una shell simple que interpreta a una serie de comandos) o de forma automática mediante un script. En cualquiera de los casos hay que pasarle la especificación del sistema y caso de uso a explorar en un documento XML siguiendo el formato definido en el proyecto MULTICUBE.

En la carpeta de ejemplos viene un ejemplo de sistema simple que utiliza un script de python como simulador de pega que utilizo para iniciar una sesión y cacharrear un poco:

$ bin/m3explorer -x examples/simple_sim/simple_sim_ds.xml

Information: Creating the xml_driver
Information: Loading the xml_driver

Multicube Explorer - Version release_0_5
Send bug reports to zaccaria@elet.polimi.it, gpalermo@elet.polimi.it
--

m3_shell> show_vars

Shell variables:
Name                  Value
----------            ------------------------
ds_parameters      [ "par1_exp2" "par2_step1" "par3_step2" ]
par1_exp2             [ "1024" "4096" ]
par2_step1            [ "1" "2" ]
par3_step2            [ "1" "5" ]

Databases in memory
Name             size
-----------------------------
root             (available)   0
m3_shell> drv_show_info
XML driver written by A. Sivieri
m3_shell> doe_define_doe "m3_random_doe"
Information: Current doe has been set to 'Random doe'
m3_shell> opt_show_info
Error: Please define the optimizer
m3_shell> opt_define_optimizer "m3_aprs"
Information: Current optimizer has been set to 'Adaptive Pareto Random Search optimizatation'
m3_shell> opt_show_info
Adaptive Pareto Random Search optimizatation
m3_shell> opt_tune
Information: Starting with the Adaptive Pareto Random Serach optimization process
Information: solutions_number variable not found
Information: Evaluating point: [ par1_exp2=2048 par2_step1=1 par3_step2=1 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=2 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=1 par3_step2=1 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=1 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=2 par3_step2=5 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=1 par3_step2=1 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=1 par3_step2=5 ]
Information: Skipping point: [ par1_exp2=4096 par2_step1=2 par3_step2=1 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=1 par3_step2=5 ]
Information: Evaluating point: [ par1_exp2=2048 par2_step1=2 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=1 par3_step2=1 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=1 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=1 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=2 par3_step2=3 ]
Information: Evaluating point: [ par1_exp2=4096 par2_step1=2 par3_step2=5 ]
Information: Evaluating point: [ par1_exp2=1024 par2_step1=1 par3_step2=5 ]
m3_shell> show_vars

Shell variables:
Name                  Value
----------            ------------------------
ds_parameters         [ "par1_exp2" "par2_step1" "par3_step2" ]
evaluations           15
par1_exp2             [ "1024" "4096" ]
par2_step1            [ "1" "2" ]
par3_step2            [ "1" "5" ]

Databases in memory
Name             size
-----------------------------
root             (available)   10
m3_shell> db_show_optimum
Information: Computing optimum point; please note that the cost function is the product of all the metrics
Optimum point: [ par1_exp2=2048 par2_step1=1 par3_step2=1 ]   cost:1
m3_shell> db_report
root: Current database contents
[ par1_exp2=2048 par2_step1=1 par3_step2=1 ] :   2050  2046  2048
[ par1_exp2=2048 par2_step1=2 par3_step2=3 ] :   2053  2043  12288
[ par1_exp2=2048 par2_step1=1 par3_step2=3 ] :   2052  2044  6144
[ par1_exp2=4096 par2_step1=2 par3_step2=5 ] :   4103  4089  40960
[ par1_exp2=2048 par2_step1=1 par3_step2=5 ] :   2054  2042  10240
[ par1_exp2=4096 par2_step1=1 par3_step2=5 ] :   4102  4090  20480
[ par1_exp2=4096 par2_step1=1 par3_step2=1 ] :   4098  4094  4096
[ par1_exp2=4096 par2_step1=1 par3_step2=3 ] :   4100  4092  12288
[ par1_exp2=4096 par2_step1=2 par3_step2=3 ] :   4101  4091  24576
[ par1_exp2=1024 par2_step1=1 par3_step2=5 ] :   1030  1018  5120
Number of points in the DB: 10
m3_shell> db_plot_objectives
Information: plotting the current db
Error: plotting functionalities available only in 2D.
m3_shell> db_filter_pareto
Information: Filtering the database for pareto points..
m3_shell> exit
Information: Removing xml_driver
Information: Exiting from Multicube Explorer shell

Como primeros comentarios tengo que decir que la shell se podría mejorar con una historia de comandos y la capacidad de corregir y editar las líneas de comando. La herramienta crea un directorio y una serie de subdirectorios para guardar archivos temporales de la exploración. Se le puede decir que los borre a la salida.

Al final del documento pdf viene un ejemplo completo en shell y en script (que se encuentra en el directorio de ejemplos) que se puede ejecutar con:

bin/m3explorer -x examples/simple_sim/simple_sim_ds.xml -f examples/simple_sim/simple_sim_scr.sc

Este es contenido del script:

set clean_directory_on_exit = “true”
db_change_current “full_db”
doe_define_doe “m3_full_doe”
opt_define_optimizer “m3_pareto_doe”
opt_tune
db_write “my_full.db”
db_change_current “pareto_db”
db_read “my_full.db”
db_export “my_full.csv”
set objectives = { “sum” “difference” “product” }
db_filter_pareto
db_report
db_write “my_pareto.db”
db_export “my_pareto.csv”

El resultado visible son cuatro ficheros, dos en formato db (un formato de texto plano nativo de la herramienta) y otros en CSV (campos separados por comas) Uno de los pares de ficheros es la lista completa de puntos del espacio de diseño obtenidas de la simple enumeración de las permutaciones de los parámetros de exploración (i.e my_full.db) y el otro par el conjunto de pareto de puntos no dominados (i.e my_pareto.db)

Puesto que la herramienta implementa algoritmos de exploración y diseño de experimentos puede servir para la exploración del espacio de cualquier problema, aunque no sea de diseño de sistemas embebidos. Voy a pensar si puedo usarlo también al estilo weka en minería de datos o utilizando su algoritmo evolutivo como prueba de concepto de la práctica de computación evolutiva.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s