simulated annealing in 512 bytes
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 PresentationTRANSCRIPT
![Page 1: Simulated Annealing in 512 bytes](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/1.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062519/56815010550346895dbdf3dc/html5/thumbnails/19.jpg)
Marcelo JohannMarcelo Johann
www.inf.ufrgs.br/~johann
That’s it!EMICRO2004Microelectronics School
Simulated Annealing in 512 bytesSimulated Annealing in 512 bytes