A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
mapping.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Adding new functionalities.
[mapping.git]
/
src
/
and
/
Mapping
/
Maheve.java
diff --git
a/src/and/Mapping/Maheve.java
b/src/and/Mapping/Maheve.java
index
c466778
..
f38b9fc
100644
(file)
--- a/
src/and/Mapping/Maheve.java
+++ b/
src/and/Mapping/Maheve.java
@@
-8,14
+8,14
@@
public class Maheve extends Algo
{
private static final long serialVersionUID = 1L;
- private static
final int minNode = 5
;
- private static
final int nbSave = 2
;
+ private static
int minNode
;
+ private static
int nbSave
;
private double hd ;
private ArrayList<Cluster> sortedCluster = null ;
private ArrayList<GTask> tasks = null ;
-
+
/**
* Empty default constructor.
*/
@@
-23,6
+23,8
@@
public class Maheve extends Algo
{
super() ;
name = "MAHEVE_2" ;
+ minNode = 5 ;
+ nbSave = 2 ;
sortedCluster = new ArrayList<Cluster>() ;
}
@@
-46,6
+48,57
@@
public class Maheve extends Algo
}
+ /**
+ * Setter for the amount of nodes to preserve on each cluster
+ * for the fault tolerance (should be 0 in an environment without fault).
+ * @param _nbSave The amount of nodes to preserve
+ */
+ public void setNbSave( int _nbSave )
+ {
+ if( _nbSave >= 0 )
+ {
+ nbSave = _nbSave ;
+ }
+ }
+
+
+ /**
+ * Getter to retrieving the amount of nodes preserved for fault tolerance.
+ * @return The amount of preserved nodes
+ */
+ public int getNbSave()
+ {
+ return nbSave ;
+ }
+
+
+ /**
+ * Setter for the minimum amount of nodes which should be present in
+ * a cluster to consider this latter in the mapping process.
+ * @param _minNode The minimum amount of nodes a cluster should have to be
+ * considered
+ */
+ public void setMinNode( int _minNode )
+ {
+ if( _minNode >= 0 )
+ {
+ minNode = _minNode ;
+ }
+ }
+
+
+ /**
+ * Getter to retrieve the minimum amount of nodes a cluster should have
+ * to be considered in the mapping process.
+ * @return The minimum amount of nodes a cluster should have to be
+ * considered
+ */
+ public int getMinNode()
+ {
+ return minNode ;
+ }
+
+
@Override
public void map() {
/** If the mapping is possible ... **/
@@
-102,6
+155,8
@@
public class Maheve extends Algo
{
ArrayList<GTask> l1 = sortTasks() ;
+ ArrayList<Integer> st = new ArrayList<Integer>() ;
+
if( l1 != null && l1.size() > 0 )
{
ArrayList<GTask> l2 = new ArrayList<GTask>() ;
@@
-112,16
+167,18
@@
public class Maheve extends Algo
if( l2.size() == 0 )
{
l2.add( l1.get( 0 ) ) ;
+ st.add( l1.get( 0 ).getNum() ) ;
}
while( l2.size() > 0 )
{
l1.remove( l2.get( 0 ) ) ;
- tmp = addTask( l2.remove( 0 ), l1 ) ;
+ tmp = addTask( l2.remove( 0 ), l1
, st
) ;
for( int i = 0 ; i < tmp.size() ; i++ )
{
l2.add( tmp.get( i ) ) ;
+ st.add( tmp.get( i ).getNum() ) ;
}
}
}
@@
-129,7
+186,8
@@
public class Maheve extends Algo
}
- private ArrayList<GTask> addTask(GTask _gt, ArrayList<GTask> _ar)
+ private ArrayList<GTask> addTask(GTask _gt, ArrayList<GTask> _ar,
+ ArrayList<Integer> _st )
{
ArrayList<GTask> ret = null ;
@@
-148,24
+206,33
@@
public class Maheve extends Algo
ArrayList<Integer> dep = new ArrayList<Integer>() ;
+ // ** Retrieving dependencies and eliminating tasks already treated
+ // ** or in instance to be treated. **//
for( int i = 0 ; i < _gt.getDependencies().size() ; i++ )
{
- dep.add( _gt.getDependencies().get( i ).getNum() ) ;
+ if( ! _st.contains( _gt.getDependencies().get( i ).getNum() ) )
+ {
+ dep.add( _gt.getDependencies().get( i ).getNum() ) ;
+ }
}
+
+ // ** Searching dependencies in sorted tasks list ** //
for( int i = 0 ; i < _ar.size() ; i++ )
{
num = _ar.get( i ).getNum() ;
- for( int j = 0 ; j < dep.size() ; j++ )
+ if( dep.contains( num ) )
{
- if( num == dep.get( j ) )
- {
+// for( int j = 0 ; j < dep.size() ; j++ )
+// {
+// if( num == dep.get( j ) )
+// {
ret.add( _ar.remove( i ) ) ;
cmpt++ ;
-
dep.remove( j ) ;
-
break ;
-
}
+
//
dep.remove( j ) ;
+
//
break ;
+
//
}
}
if( cmpt == nbDep )
@@
-243,31
+310,49
@@
public class Maheve extends Algo
int nbFound = 0 ;
int max = 0 ;
GNode g = null ;
+ boolean changeParameter = false ;
-
for( int i = 0 ; i < sortedCluster.size() ; i++
)
+
while( nbFound < _nbTask
)
{
- /** If there is enough nodes ... **/
- if( sortedCluster.get( i ).getNbFreeNodes() >= minNode )
+ int i = 0 ;
+
+ for( i = 0 ; i < sortedCluster.size() ; i++ )
{
- max = 0 ;
- sortedCluster.get( i ).initMoreGNode() ;
+ /** If there is enough nodes ... **/
+ if( sortedCluster.get( i ).getNbFreeNodes() >= minNode )
+ {
+ max = 0 ;
+ sortedCluster.get( i ).initMoreGNode() ;
- max = sortedCluster.get( i ).getNbFreeNodes() - nbSave ;
+
max = sortedCluster.get( i ).getNbFreeNodes() - nbSave ;
- for( int j = 0 ; j < max ; j++ )
- {
- g = sortedCluster.get( i ).moreGNode() ;
- ret.add( g ) ;
+
for( int j = 0 ; j < max ; j++ )
+
{
+
g = sortedCluster.get( i ).moreGNode() ;
+
ret.add( g ) ;
- nbFound ++ ;
+
nbFound ++ ;
- if( nbFound >= _nbTask )
- break ;
+ if( nbFound >= _nbTask )
+ break ;
+ }
}
+
+ if( nbFound >= _nbTask )
+ break ;
}
- if( nbFound >= _nbTask )
- break ;
+ if( i == sortedCluster.size() && nbFound < _nbTask )
+ {
+ changeParameter = true ;
+ minNode-- ;
+ }
+ }
+
+ if( changeParameter )
+ {
+ System.err.println( "The parameter \"minNode\" has been reduced " +
+ "to allow the mapping process to be done." ) ;
}
}
@@
-289,7
+374,12
@@
public class Maheve extends Algo
ArrayList<Double> calcMark = new ArrayList<Double>() ;
- hd = gl.getHeterogenityDegre() ;
+ double hd_g = gl.getHeterogenityDegre() ;
+
+ /* Correction of hd */
+ hd = calcNewHd( hd_g ) ;
+
+ System.out.println("Corrected hd value: " + hd + " (" + hd_g + ")" ) ;
/** Sorting clusters **/
ArrayList<Cluster> tmp = gl.getClusters() ;
@@
-314,8
+404,8
@@
public class Maheve extends Algo
normP = tmp.get( i ).getAvgAvailablePower() * 100 / Pm ;
/** The magic formula :P **/
- calcLoc = Math.
sqrt( Math.
pow( (normP * hd), 2) +
- Math.pow( (normN *
(1 - hd)), 2 )
) ;
+ calcLoc = Math.pow( (normP * hd), 2) +
+ Math.pow( (normN *
(1 - hd)), 2
) ;
ok = false ;
@@
-347,6
+437,28
@@
public class Maheve extends Algo
}
+ /**
+ * Compute the new value of hd, by taking care of the application
+ * and execution architecture characteristics.
+ * @param hd_g Original heterogeneity degree
+ * @return The new (corrected) heterogeneity degree
+ */
+ private double calcNewHd( double hd_g )
+ {
+ /* Variables */
+ double nhd = 0 ;
+
+ double nbTask = gr.getNbGTask() ;
+ double nbDep = gr.getMaxDep() ;
+ double maxNodes = gl.getMaxClusterNode() ;
+
+ /* Computation */
+ nhd = hd_g / ( 10 * ( (nbDep / nbTask) + (nbDep / maxNodes) ) ) ;
+
+ return nhd ;
+ }
+
+
@Override
public GNode replaceNode( GNode _dead, ArrayList<GNode> _ag )
{
@@
-421,6
+533,12
@@
public class Maheve extends Algo
return ret ;
}
+
+
+ @Override
+ public boolean setParams(Object[] _params) {
+ return true ;
+ }
}