1. 程式人生 > >lingo sample code for liveness analysis

lingo sample code for liveness analysis

model:
sets:
	!F;
	V: vSize, vRead, vWrite,vStart, vDcost;
	U: uSize, uRead, uWrite;	
	!F2V(F,V);
	!F2U(F,U): fInU;
	V2U(V,U): x, cost;
	V2V(V, V): iltj;
endsets

data:
	M = 20000;
	DRead = 104.4;
	DWrite = 104.4;
	
	U, uRead, uWrite, uSize = @file('E:/qali/memory.txt');	
	
	V = @file('E:/qali/spm/basicmath.opt1.variable');
	
	
[email protected]
(E:/qali/spm/basicmath.opt1.variable); [email protected](E:/qali/spm/basicmath.opt1.variable); [email protected](E:/qali/spm/basicmath.opt1.variable); [email protected]('E:/qali/spm/basicmath.opt.ig.out'); [email protected](E:/Mibench_spm/basicmath.opt.gIG); @text(E:/qali/lingo.log)='Size of Memory units:\n' uSize; enddata Calc: @for(U(ui): @for(V(vi): cost(vi,ui) = (uRead(ui) * vRead(vi) + uWrite(ui) * vWrite(vi) ) ); ); @for(V(vi): vDcost(vi) = (DRead * vRead(vi) + DWrite * vWrite(vi) ) * vSize(vi) ); nNumber = @size(V); nSize = @sum(V(I): vSize(I) ); @write('Total functions: ', @size(F), @newline(1)); @write('Total variable number: ', nNumber, @newline(1)); @write('Total variable size: ', nSize, @newline(1)); @write('Total interfere: ', @size(V2V), @newline(1)); endcalc min = @sum(V2U: x * cost) + @sum(V(vi): (
[email protected]
(U(ui): x(vi,ui)))*vDcost); !u2f: size of function fi in memory ui; @for(U(ui): @sum(F2U(fi,ui):fInU(fi,ui)) <= uSize(ui) ); [email protected](U2F(ui,fi): @bnd(0, fInU(ui,fi), uSize(ui)) ); [email protected](F2U: @gin(fInU) ); !x(vi,ui): assuming variable vi is allocated into memory ui; @for(V(vi): @sum(V2U(vi,ui): x(vi,ui)) <= 1 ); @for(V2U: @bin(x) ); !start(vi): start point of location of variable;
[email protected]
(F2V(fi,vi): @for(U(ui): vStart(vi) >= @sum(F2U(f1,ui)| fID(f1) #lt# fID(fi): fInU(f1,ui) ) + (x(vi,ui)-1)*M) ); [email protected](F2V(fi,vi): @for(U(ui): vStart(vi) <= @sum(F2U(f1,ui)| fID(f1) #le# fID(fi): fInU(f1,ui) ) - vSize(vi) + (1-x(vi,ui))*M) ); [email protected](V(vi): @gin(vStart) ); [email protected](F2V(fi,vi): @for(U(ui): vStart(vi)+vSize(vi) < fInU(fi,ui) + (1- x(vi,ui)) * M ) ); [email protected](V(vi):@gin(vStart) ); !iltj: assuming i is less than j, for the interference graph; @for(V2V: @bin(iltj) ); @for(V2V(v1,v2): @for(U(ui): vStart(v1) + 1<= vStart(v2) + (1-iltj(v1,v2))*M + (2-x(v1,ui)-x(v2,ui))*M ) ); @for(V2V(v1,v2): @for(U(ui): vStart(v2) + 1<= vStart(v1) + iltj(v1,v2)*M + (2-x(v1,ui)-x(v2,ui))*M) );