Ejercicios con subrutinas

Para aplicar lo que hemos aprendido de subrutinas os pediría que modifiquéis la solución del problema [*] ahora separando todas las tareas indivisibles en subrutinas. Podéis además comparar la velocidad de ejecución de ambos programas, el viejo y el modificado, usando el programa time en el terminal UNIX*.

Otra manera de valorar el rendimiento de un programa que use subrutinas es ejecutarlo de esta manera: perl -d:DProf programa.pl [argumentos que necesite] . Tras su ejecución se habrá generado un archivo llamado tmon.out que pasaremos como argumento a otro programa: dprofpp tmon.out , generando una salida como esta, donde se ve qué coste empírico tiene cada subrutina (del módulo dnalib) durante la ejecución del programa. Por ejemplo, la subrutina get_sq_dist fue invocada 124763 veces consumiendo un 64.9 por cieto del tiempo total:

Exporter::export has -1 unstacked calls in outer
Exporter::Heavy::heavy_export has 1 unstacked calls in outer
Total Elapsed Time = 34.29820 Seconds
  User+System Time = 16.72820 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 64.9   10.85 10.858 124763   0.0000 0.0000  dnalib::get_sq_dist
 23.0   3.852  7.964      3   1.2841 2.6548  dnalib::get_template_contacts
 14.4   2.410  7.221    588   0.0041 0.0123  dnalib::check_base_contact
 6.31   1.055  2.990      3   0.3517 0.9968  dnalib::calc_DNA_complementarity
 3.03   0.507 11.056      3   0.1690 3.6853  dnalib::predict_sites_complex
 0.72   0.121  0.121  28932   0.0000 0.0000  dnalib::tobase4
 0.50   0.084  0.084  30720   0.0000 0.0000  dnalib::num2compbase
 0.42   0.070  0.070      1   0.0700 0.0700  dnalib::extract_BLAST_TF_alignments
 0.41   0.069  0.069    581   0.0001 0.0001  dnalib::calc_Pvalue
 0.41   0.069  0.069    598   0.0001 0.0001  dnalib::calc_family_preferences
 0.24   0.040  0.050      5   0.0080 0.0100  main::BEGIN
 0.23   0.039  8.113      1   0.0391 8.1126  dnalib::build_CM_complexes
 0.20   0.034  0.034  30720   0.0000 0.0000  dnalib::num2base
 0.18   0.030  0.030      3   0.0100 0.0100  dnalib::get_protein_coordinates
 0.17   0.029  0.029    581   0.0001 0.0001  dnalib::calc_def_cost

Bruno Contreras-Moreira
http://www.eead.csic.es/compbio