diff options
| author | andrewboktor <[email protected]> | 2015-04-15 16:51:33 -0700 |
|---|---|---|
| committer | andrewboktor <[email protected]> | 2015-04-15 16:51:33 -0700 |
| commit | 091cbc85b89043c99041582156215a87afbebaf4 (patch) | |
| tree | 891b09bae4e255e0aa0d99ff9a9062de8abbccb7 /src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base | |
| parent | 4dc9d53085b568aea0cefe75d599f87bb5e0841f (diff) | |
| parent | 0b55a95f4389a45fec6ff94e35ded72b42433a29 (diff) | |
Merge pull request #10 from qqldd/dev
Booksim2 abandoned svn and moved to github (https://github.com/booksim/b...
Diffstat (limited to 'src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base')
| -rw-r--r-- | src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base b/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base deleted file mode 100644 index cae1e45..0000000 --- a/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base +++ /dev/null @@ -1,111 +0,0 @@ -// $Id$ - -/* - Copyright (c) 2007-2012, Trustees of The Leland Stanford Junior University - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*wavefront.cpp - * - *The wave front allocator - * - */ -#include "booksim.hpp" - -#include "wavefront.hpp" - -Wavefront::Wavefront( Module *parent, const string& name, - int inputs, int outputs, bool skip_diags ) : - DenseAllocator( parent, name, inputs, outputs ), - _last_in(-1), _last_out(-1), _skip_diags(skip_diags), - _square(max(inputs, outputs)), _pri(0), _num_requests(0) -{ -} - -void Wavefront::AddRequest( int in, int out, int label, - int in_pri, int out_pri ) -{ - DenseAllocator::AddRequest(in, out, label, in_pri, out_pri); - _num_requests++; - _last_in = in; - _last_out = out; - _priorities.insert(make_pair(out_pri, in_pri)); -} - -void Wavefront::Allocate( ) -{ - - int first_diag = -1; - - if(_num_requests == 0) - - // bypass allocator completely if there were no requests - return; - - if(_num_requests == 1) { - - // if we only had a single request, we can immediately grant it - _inmatch[_last_in] = _last_out; - _outmatch[_last_out] = _last_in; - first_diag = _last_in + _last_out; - - } else { - - // otherwise we have to loop through the diagonals of request matrix - - for(set<pair<int, int> >::const_reverse_iterator iter = - _priorities.rbegin(); - iter != _priorities.rend(); ++iter) { - - for ( int p = 0; p < _square; ++p ) { - for ( int output = 0; output < _square; ++output ) { - int input = ( ( _pri + p ) + ( _square - output ) ) % _square; - if ( ( input < _inputs ) && ( output < _outputs ) && - ( _inmatch[input] == -1 ) && ( _outmatch[output] == -1 ) && - ( _request[input][output].label != -1 ) && - ( _request[input][output].in_pri == iter->second ) && - ( _request[input][output].out_pri == iter->first ) ) { - // Grant! - _inmatch[input] = output; - _outmatch[output] = input; - if(first_diag < 0) { - first_diag = input + output; - } - } - } - } - } - } - - _num_requests = 0; - _last_in = -1; - _last_out = -1; - _priorities.clear(); - - assert(first_diag >= 0); - - // Round-robin the priority diagonal - _pri = ( ( _skip_diags ? first_diag : _pri ) + 1 ) % _square; -} - - |
