Está en la página 1de 4

DISPRO

  1  
Departamento  de  Electrónica  
Pontificia  Universidad  Javeriana  
  Taller  diseñado  por  Juan  C.  Giraldo  
 
 
 
Capítulo:  Algoritmos  y  Pensamiento  Algorítmico  
Tema:  Uso  de  construcciones  para  realizar  iteraciones  
Habilidad  Personal:  Habilidad  para  hacer  transformación  de  bucles  
 
Program  Outcomes:      
CDIO:  
3.2.     COMMUNICATION  
    3.2.5.     Graphical  Communication  
4.5.     IMPLEMENTING  
    4.5.3.     Software  Implementing  Process  (Algorithmic  thinking)  
ABET:  
(g.)   Develop  an  ability  to  communicate  effectively  
(k.)   An  ability  to  use  techniques,  skills,  and  modern  engineering  tools  
necessary  for  engineering  practice  
 
 
 
1.   DE  QUÉ  SE  TRATA:  
 
Las   transformaciones   de   bucle   o   en   inglés   "loop  transformations"   es   un   concepto  
simple.   En   pocas   palabras   trata   sobre   distintas   técnicas   para   RECORRER  
BUCLES,  CICLOS  o  LOOPS,  sin  alterar  el  propósito  de  los  algoritmos.  

 
 
2.   INTRODUCCIÓN  A  LAS  TRANSFORMACIONES  DE  BUCLE:  
 
Para  el  desarrollo  de  este  taller  se  tomará  como  referencia  una  de  las  operaciones  
de   matrices   más   simples   que   consiste   en   iniciar   todos   sus   valores   con   cero.   Por   tal  
motivo  es  deseable  que  antes  de  iniciar  este  taller  desarrolle  el  diagrama  de  flujo  
para   iniciar   con   ceros   una   matriz   cuadrada   que   puede   ser   de   16x16   o   32x32.  
Suponga  que  usa  las  variables  “i”  y  “j”  para  recorrer  las  filas  y  columnas.  

Por  simplicidad,  en  las  siguientes  figuras  se  usa  una  matriz  de  4x4,  en  donde  cada  
recuadro  menor  corresponde  a  una  posición  de  la  matriz  que  debe  ser  iniciada  con  
el  valor  0.0.  

En   la   técnica   de   Loop   Reversal,   la   variable   contadora   va   en   sentido   contrario   al  


usual,   es   decir,   decrementando   su   valor   tanto   para   el   contador   “i”   como   el   “j”   en   la  
matriz  cuadrada  de  4x4.  Por  tal  razón  ambos  se  inician  con  el  máximo  valor,  y  en  
cada  uno  de  los  ciclos  se  indaga  hasta  llegar  a  cero,  decrementando  con  i-­‐-­‐,  j-­‐-­‐  como  
se  muestra  en  la  Fig.  1.  

 
 

       

       

       

       
 
Figura  No.  1.  Técnica  de  Loop  Reversal  

En   la   técnica   de   Loop   Unrolling,   dentro   del   cuerpo   del   bucle   se   hacen   varias  
operaciones   por   lo   que   la   variable   contadora   debe   hacer   saltos   diferentes   del  
tradicional   de   uno   en   uno.   En   la   Fig.   2.   se   aprecia   que   se   puede   eliminar   uno   de   los  
dos  ciclos  anidados  para  recorrer  la  matriz.  

A[0][0]  =  A[0][1]  =  A[0][2]  =  A[0][3]  =  0.0;

A[1][0]  =  A[1][1]  =  A[1][2]  =  A[1][3]  =  0.0;

A[2][0]  =  A[2][1]  =  A[2][2]  =  A[2][3]  =  0.0;

A[3][0]  =  A[3][1]  =  A[3][2]  =  A[3][3]  =  0.0;

 
Figura  No.  2.  Técnica  de  Loop  Unrolling  

En  la  técnica  de  Loop  Interchange,  en  lugar  de  recorrer  por  filas  el  bucle  interior,  
el   recorrido   se   hace   por   columnas.   En   lenguaje   C   los   elementos   contigüos   se  
almacenan  por  filas  mientras  que  en  Fortran  por  columnas.  En  la  Fig.  3.  Se  muestra  
un  recorrido  por  columnas  al  estilo  del  lenguaje  de  programación  Fortran.  

 
DISPRO   3  
Departamento  de  Electrónica  
Pontificia  Universidad  Javeriana  
  Taller  diseñado  por  Juan  C.  Giraldo  
 

       

       

       

       

 
Figura  No.  3.  Técnica  de  Loop  Interchange  

A   la   técnica   Loop   Tiling   (en   donde   tile   traduce   loza   o   baldosa)   se   le   conoce  
también   como   Loop   Blocking.   El   recorrido   en   esta   técnica  se  hace  en  bloques   de  
valores  que  están  cercanos,  como  se  muestra  en  la  Fig.  4.  Para  comprender  mejor  
loop  tiling,   suponga   que   ya   tiene   construido   un   algoritmo   para   iniciar   una   matriz  
de   2x2   (recuadros   sombreados   con   rojo)   y   a   continuación   se   re-­‐usa   este   algoritmo  
pero  haciendo  un  recorrido  por  bloques.  Esta  técnica  requiere  incorporar  más  de  
dos  ciclos  para  controlar  el  recorrido.  

       

       

       

       
 
Figura  No.  4.  Técnica  de  Loop  Tiling  

 
 

Finalmente   la   técnica   de   Loop   Fusion,   será   fundamental   a   lo   largo   de   este   curso.  


Como   su   nombre   lo   indica   se   busca   fusionar   loops   aprovechando   una   misma  
condición   de   iteración   y   un   mismo   número   de   conteos.   En   la   plantilla   que   se  
adjunta   se   propone   un   ejercicio   sobre   loop   fusion   que   debe   ser   realizado   para  
ganar  experticia  en  el  uso  de  esta  técnica  y  finalmente  se  propone  otro  para  aplicar  
la  técnica  de  loop  tiling.  

 
 
3.   INSTRUCCIONES:  
 
Tras   esta   breve   introducción   a   algunas   de   las   técnicas   las   transformaciones   de  
bucle,  estudie  con  detenimiento  los  enlaces  que  se  referencian  al  final  de  esta  guía.  

Usando   la   plantilla   adjunta,   Usted   debe   elaborar   un   diagrama   de   flujo   para   cada  
una   de   las   cuatro   técnicas   explicadas   inicialmente.   Luego   debe   seguir   las  
instrucciones  para  aplicar  la  técnica  de  Loop  Fusion  y  de  Loop  Tiling  propuestos.  

 
 
4.   ENTREGA  DEL  TALLER:  
 
Los  diagramas  de  flujo  deben  entregarse  usando  el  formato  de  planchas  en  “power-­‐
point”  suministrado  por  el  profesor  de  la  asignatura  en  formato  “.ppt”  o  “pptx”.  
 
Debe  enviar  su  trabajo  al  correo  electrónico  que  su  profesor  indique  en  un  archivo  
con   el   nombre   “username_loop_transformation”   en   letras   minúsculas,   siendo  
“username”   el   nombre   de   usuario   de   su   propio   correo   electrónico.   El   envío   debe  
realizarlo   antes   de   las   11:59   PM   del   día   especificado,   registrando   el   tiempo   de  
dedicación  para  esta  actividad.    
 
 
5.   MATERIAL  DE  REFERENCIA  PARA  ESTUDIO  PERSONAL:  
 
https://en.wikipedia.org/wiki/Loop_optimization  
https://en.wikipedia.org/wiki/Loop_fission  
https://en.wikipedia.org/wiki/Loop_fusion  
https://en.wikipedia.org/wiki/Loop_interchange  
https://en.wikipedia.org/wiki/Loop_inversion  
https://en.wikipedia.org/wiki/Loop-­‐invariant_code_motion  
https://en.wikipedia.org/wiki/Loop_tiling  
https://en.wikipedia.org/wiki/Loop_unrolling  
 
 
 
“loop_transformation_instructions.pdf”  

También podría gustarte