19
Simulated Annealing in Simulated Annealing in 512 bytes 512 bytes EMICRO2004 Microelectronics School Marcelo Johann Marcelo Johann B R A Z I L B R A Z I L

Simulated Annealing in 512 bytes

Embed Size (px)

DESCRIPTION

Simulated Annealing in 512 bytes. Marcelo Johann. EMICRO200 4 Microelectronics School. B R A Z I L. P lacement. minimiz e total wire length (WL) ; minimiz e maximum local congestion (MLC) ;. thanks to Renato Hentschke. General A pproaches. Abstraction Placement with Overlaps Steps - PowerPoint PPT Presentation

Citation preview

Page 1: Simulated Annealing in 512 bytes

Simulated Annealing in 512 bytesSimulated Annealing in 512 bytes

EMICRO2004Microelectronics School

Marcelo JohannMarcelo Johann

B R A Z I LB R A Z I L

Page 2: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.2

• minimize total wire length (WL);• minimize maximum local congestion (MLC);

PPlacementlacement

thanks to Renato Hentschke

Page 3: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.3

General General AApproachespproaches

Abstraction

Placement with Overlaps

Steps

• Global Placement

• Detailed Placement – eliminate overlaps and set exact positions

• Legalization– Fit into slots, grid position, mirroring

Page 4: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.4

BasicBasic Algorit Algorithhmsms• Recursive Bisection • Cluster Growth, Force-Directed, ...• General combinatorial optimization:

– Simulated annealing, simulated evolution, linear programming, quadratic assignment, resistive networks, neural networks, etc...

• Analytical Placement– integer programming to spread cells

• Most used:– simulated annealing, recursive bisection;– multi-level, Analytical;

Page 5: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.5

Simulated AnnealingSimulated Annealing

Three basic functions: Temperature Schedule (above), Cost (wire length) and Perturbation (changes in current solution).

Perturbation

Cost

Reject / Accept

thanks to Renato Hentschke

Page 6: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.6

S. A. S. A. inin 5 512+12+ bytes bytes

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

Looks crazy, but works!Looks crazy, but works!

Page 7: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.7

S. A. S. A. inin 5 512+12+ bytes bytes

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

A big number!!!

Page 8: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.8

S. A. S. A. inin 5 512+12+ bytes bytes

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

Loop a timesRead a from stdinExchange k[a] with k[b]

Page 9: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.9

S. A. S. A. inin 5 512+12+ bytes bytes

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

x,y position of each node

Page 10: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.10

S. A. S. A. inin 5 512+12+ bytes bytes

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

source and target of each arc

Page 11: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.11

Input graph reading: number of cells and wires, number of rowsand list of wires (node node)

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 12: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.12

Input graph reading: number of cells and wires, number of rowsand list of wires (node node) initial placement

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 13: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.13

Cost function: adds the length of all arcs in the graph

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 14: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.14

Temperature scheduling#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 15: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.15

Perturbation: exchange a random selected pair of cells

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 16: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.16

Accepting criteria (inverted)Reject if the cost is higherand the probability is notsatisfied

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 17: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.17

Probabilistic: inverselyproportional to the temperature

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 512+12+ bytes bytes

Page 18: Simulated Annealing in 512 bytes

EMICRO 2004 - Marcelo Johann – SA512.18

Take off cost reports to get your 512-byte SA placer!

#include<stdio.h>#include<math.h>#define z 9999#define F(a)for(i=0;i<a;++i)#define R(a)scanf("%d",&a);#define T(k)d=k[a];k[a]=k[b];k[b]=d;long a,b,c=0,i,v,e,d,l,X[z],Y[z],E[9*z],G[9*z];double t;w(){int i;d=0;F(e)d+=abs(X[E[i]]-X[G[i]])+abs(Y[E[i]]-Y[G[i]]);return d;}main(){R(v)R(e)R(a)F(v){X[i]=i/a;Y[i]=i%a;}F(e){R(E[i])R(G[i])}for(t=z*a;c++<z*9;t*=.9){F(1){a=rand()%v;b=rand()%v;l=w();T(X)T(Y);if(d=(w()-l)>0)if(rand()%z>z*exp(-d/t)){T(X)T(Y)}}}F(v)printf("%d %d %d %d\n",i,X[i],Y[i],w());}

S. A. S. A. inin 5 51212 bytes bytes

Page 19: Simulated Annealing in 512 bytes

Marcelo JohannMarcelo Johann

[email protected]

www.inf.ufrgs.br/~johann

That’s it!EMICRO2004Microelectronics School

Simulated Annealing in 512 bytesSimulated Annealing in 512 bytes