Exemple #1
0
void RandomPermutationTrafficPattern::randomize(int seed)
{
  unsigned long prev_seed = RandomIntLong( );
  RandomSeed(seed);

  _dest.assign(_nodes, -1);

  for(int i = 0; i < _nodes; ++i) {
    int ind = RandomInt(_nodes - 1 - i);

    int j = 0;
    int cnt = 0;
    while((cnt < ind) || (_dest[j] != -1)) {
      if(_dest[j] == -1) {
	++cnt;
      }
      ++j;
      assert(j < _nodes);
    }

    _dest[j] = i;
  }

  RandomSeed(prev_seed); 
}
Exemple #2
0
/*legacy, not sure how this fits into the own scheme of things*/
void KNCube::InsertRandomFaults( const Configuration &config )
{
  int num_fails;
  unsigned long prev_seed;

  int node, chan;
  int i, j, t, n, c;
  bool *fail_nodes;
  bool available;

  bool edge;

  num_fails = config.GetInt( "link_failures" );
  
  if ( num_fails ) {
    prev_seed = RandomIntLong( );
    RandomSeed( config.GetInt( "fail_seed" ) );

    fail_nodes = new bool [_size];

    for ( i = 0; i < _size; ++i ) {
      node = i;

      // edge test
      edge = false;
      for ( n = 0; n < _n; ++n ) {
	if ( ( ( node % _k ) == 0 ) ||
	     ( ( node % _k ) == _k - 1 ) ) {
	  edge = true;
	}
	node /= _k;
      }

      if ( edge ) {
	fail_nodes[i] = true;
      } else {
	fail_nodes[i] = false;
      }
    }

    for ( i = 0; i < num_fails; ++i ) {
      j = RandomInt( _size - 1 );
      available = false;

      for ( t = 0; ( t < _size ) && (!available); ++t ) {
	node = ( j + t ) % _size;
       
	if ( !fail_nodes[node] ) {
	  // check neighbors
	  c = RandomInt( 2*_n - 1 );

	  for ( n = 0; ( n < 2*_n ) && (!available); ++n ) {
	    chan = ( n + c ) % 2*_n;

	    if ( chan % 1 ) {
	      available = fail_nodes[_LeftNode( node, chan/2 )];
	    } else {
	      available = fail_nodes[_RightNode( node, chan/2 )];
	    }
	  }
	}
	
	if ( !available ) {
	  cout << "skipping " << node << endl;
	}
      }

      if ( t == _size ) {
	Error( "Could not find another possible fault channel" );
      }

      
      OutChannelFault( node, chan );
      fail_nodes[node] = true;

      for ( n = 0; ( n < _n ) && available ; ++n ) {
	fail_nodes[_LeftNode( node, n )]  = true;
	fail_nodes[_RightNode( node, n )] = true;
      }

      cout << "failure at node " << node << ", channel " 
	   << chan << endl;
    }

    delete [] fail_nodes;

    RandomSeed( prev_seed );
  }
}
Exemple #3
0
void RandomPermutationTrafficPattern::randomize(int seed)
{
  unsigned long prev_seed = RandomIntLong( );
  RandomSeed(seed);

  _dest.assign(_nodes, -1);

  // 8x8 mesh LR
  int d[16] = {0,1,2,3,4,5,6,7,56,57,58,59,60,61,62,63};

  // 8x8 mesh dist
  //int d[16] = {1,3,4,6,15,31,39,55,62,60,59,57,48,32,24,8};

  // 8x8 diamond
  //int d[16] = {3,4,13,22,31,39,46,53,60,59,50,41,32,24,17,10};

  // 4x4 dense
  //int d[16] = {18,19,20,21,26,27,28,29,34,35,36,37,42,43,44,45};

  int dest_taken[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

  cout << "Begin Route Table" << endl;

  for(int i = 0; i < _nodes; ++i) {    
    /*
    if (i == 18 ||
	i == 19 ||
	i == 20 ||
	i == 21 ||
	i == 26 ||
	i == 27 ||
	i == 28 ||
	i == 29 ||
	i == 34 ||
	i == 35 ||
	i == 36 ||
	i == 37 ||
	i == 42 ||
	i == 43 ||
	i == 44 ||
	i == 45) 
    */
    /*
    if (i == 3 ||
        i == 4 ||
	i == 13 ||
	i == 22 ||
	i == 31 ||
	i == 39 ||
	i == 46 ||
	i == 53 ||
	i == 60 ||
	i == 59 ||
	i == 50 ||
	i == 41 ||
	i == 32 ||
	i == 24 ||
	i == 17 ||
	i == 10)
    */
    if (i <= 7 || i>=56)
      /*
    if (i == 1 ||
	i == 3 ||
	i == 4 ||
	i == 6 ||
	i == 15 ||
	i == 31 ||
	i == 39 ||
	i == 55 ||
	i == 62 ||
	i == 60 ||
	i == 59 ||
	i == 57 ||
	i == 48 ||
	i == 32 ||
	i == 24 ||
	i == 8)
      */
      {

	int dt = -1;
	int r;

	while (dt == -1) {
	  r = RandomInt(15);
      
	  if (dest_taken[r] == 0) {
	    dt = d[r];
	    dest_taken[r] = 1;
	  }
	}
    
	_dest[i] = dt;

	cout << i << "\t" << _dest[i] << endl;

      }
    
  }

  cout << "End Route Table" << endl;


  /*
  _dest.assign(_nodes, -1);
    
  for(int i = 0; i < _nodes; ++i) {
    int ind = RandomInt(_nodes - 1 - i);

    int j = 0;
    int cnt = 0;
    while((cnt < ind) || (_dest[j] != -1)) {
      if(_dest[j] == -1) {
	++cnt;
      }
      ++j;
      assert(j < _nodes);
    }
  }
  */

  RandomSeed(prev_seed); 
}