| DSENT (Design Space Exploration of Networks Tool) | |
| =============================================================================== | |
| Overview | |
| =============================================================================== | |
| DSENT is a modeling tool designed for rapid design space exploration of both | |
| electronical and emerging opto-electrical networks-on-chip (NoC). It provides | |
| analytic and parameterized models for various network components and is | |
| portable across a range of technology assumptions. Given architectural-level | |
| parameters, DSENT builds the specified models hierarchically from electrical | |
| and optical building blocks and outputs detailed power and area estimates. | |
| =============================================================================== | |
| Version | |
| =============================================================================== | |
| Current: 0.91 (26 June 2012) | |
| Latest version or additional information can be found at | |
| https://sites.google.com/site/mitdsent | |
| =============================================================================== | |
| System requirements | |
| =============================================================================== | |
| We have tested DSENT on the following platforms: | |
| Linux GNU g++ 4.1.2 and glibc 2.5 | |
| Linux GNU g++ 4.3.2 and glibc 2.7 | |
| Linux GNU g++ 4.4.5 and glibc 2.11.3 | |
| Cygwin g++ 4.5.3 and cygwin 1.7.14 | |
| =============================================================================== | |
| License | |
| =============================================================================== | |
| Please refer to the LICENSE file for licensing and copyright information. | |
| If you use DSENT in your research, please acknowledge us by referencing our | |
| NOCS 2012 paper: | |
| Chen Sun, Chia-Hsin Owen Chen, George Kurian, Lan Wei, Jason Miller, | |
| Anant Agarwal, Li-Shiuan Peh, Vladimir Stojanovic, "DSENT - A Tool Connecting | |
| Emerging Photonics with Electronics for Opto-Electronic Networks-on-Chip | |
| Modeling." The 6th ACM/IEEE International Symposium on Networks-on-Chip | |
| (NOCS), May 2012, Lyngby, Denmark. | |
| =============================================================================== | |
| Contact information | |
| =============================================================================== | |
| If you have any questions or comments, please contact us through our mailing | |
| list at: mitdsent@mit.edu | |
| We will try to reply as soon as possible. | |
| =============================================================================== | |
| Build (installation) | |
| =============================================================================== | |
| To build DSENT: | |
| % make | |
| By default DSENT is built with logging disabled. Logging keeps track of what | |
| happens while running DSENT. It is an option more for the DSENT framework and | |
| DSNET models developers. If you want to enable this option, simply type the | |
| following: | |
| % make LIBUTIL_IS_LOG=true | |
| To clean the build: | |
| % make clean | |
| =============================================================================== | |
| Usage | |
| =============================================================================== | |
| DSENT builds models and runs based on the specified configuration file. In the | |
| configuration file, you specify a model name and necessary information | |
| (parameters and properties) required to build the model. | |
| To run DSENT: | |
| % ./dsent -cfg <config_filename> | |
| To check what models are available: | |
| % ./dsent -available_models | |
| To overwrite the configuration file from command line: | |
| Use ';' to separate different key/value pairs. | |
| % ./dsent -cfg <config_filename> -overwrite <new query string> | |
| % ./dsent -cfg configs/example.cfg -overwrite "NumberInputs=5; NumberOutputs=6;" | |
| To print out in a more human-friendly fasion: | |
| % ./dsent -cfg <config_filename> -verbose | |
| To check what options are available: | |
| % ./dsent -help | |
| Please see configs/example.cfg for an example of a configuration file. | |
| Please see configs/router.cfg for the router configuration file. | |
| Please see QueryString and EvaluateString specifications below to know more | |
| about the usage. | |
| =============================================================================== | |
| Advanced Usage | |
| =============================================================================== | |
| Since DSENT is a generic modeling framework for electrical and optical | |
| components, you can create your own models. We will release guidelines on how | |
| to create custom models on top of DSENT framework. You can use the provided | |
| models as references. | |
| =============================================================================== | |
| Quick start for Orion users | |
| =============================================================================== | |
| Instead of using the SIM_port.h file, DSENT uses a text-based configuration | |
| file to specify the router/link configurations. You do not need to recompile | |
| if you change parameters. Even though we use different parameter names, the | |
| ones we use should be self-explanatory. In this package, we provide template | |
| configuration files for the router and link: | |
| router - configs/router.cfg | |
| link - configs/electrical-link.cfg | |
| Technology | |
| ---------- | |
| We currently support 45, 32, 22, 11nm. You can specify the desired | |
| frequency but not the nominal voltage level since it is normally | |
| fixed in different processes. | |
| Router specs | |
| ------------ | |
| Currently we only support the model of a widely used 3-pipeline-stage | |
| input-buffered virtual channel router and does not have distinction | |
| from ports for different components (cache, memory controller, I/O). | |
| Input buffer specs | |
| ------------------ | |
| The number of virtual channels used for different message classes | |
| might be different; hence, DSENT uses NumberVirtualNetworks to | |
| specify the number of message classes and use | |
| NumberVirtualChannelsPerVirtualNetwork and | |
| NumberBuffersPerVirtualChannel to define the buffers needed for a | |
| virtual network (message class). | |
| Currently only DFF-based RAM is supports. This is reasonable since | |
| normally the buffer space needed at input port is small enough and | |
| does not need to use SRAMs or RFs (register files). | |
| Crossbar specs | |
| -------------- | |
| Currently DSENT only supports multiplexer-based crossbars | |
| (MULTREE_CROSSBAR). You no longer need to specify the degree of the | |
| multiplexers. | |
| Switch allocator specs | |
| ---------------------- | |
| DSENT models a two-stage switch allocator. The first stage is used to | |
| arbitrate between VCs in the same input port, and the second stage is | |
| used to arbitrate between input ports. If there is only one VC in | |
| the input port, then the energy/power/area cost for the first stage | |
| will be zero. | |
| Currently, DSENT supports MatrixArbiter. | |
| VC allocator specs | |
| ------------------ | |
| We assume that the router uses a VC select scheme where the VC | |
| allocation is done by just popping a FIFO. Currently DSENT ignores | |
| this module since the FIFO that needs to keep the free VC information | |
| should be small enough. | |
| Clock distribution specs | |
| ------------------------ | |
| Currently DSENT provides a broadcast H-Tree model. You can specify | |
| the number of levels of the H-Tree (normally 4 or 5 levels should be | |
| enough). | |
| DSENT replaces the original orion_router_power, orion_router_area and | |
| orion_link with QueryString and EvaluateString (see below for more detailed | |
| information on how to use them). | |
| =============================================================================== | |
| QueryString specifications | |
| =============================================================================== | |
| DSENT is a query-based model evaluator. You use QueryString to specify what | |
| information you want DSENT to output. The syntax of a query string is shown as | |
| follows: | |
| [Query type]>>[Instance name (with hierarchy)]:[Sub query type]@[Detail level] | |
| E.g., Area>>Router->Crossbar:Active@4 | |
| * Query type: Area | |
| * Instance name: Router->Crossbar | |
| * Sub query type: Active | |
| * Detail level: 4 | |
| Query type | |
| ---------- | |
| There are 9 types of queries: Parameter, Property, Energy, NddPower, | |
| Area, InstHier, EventHier, NddPowerHier, AreaHier. | |
| Parameter - Print the model parameters needed to be specified | |
| Property - Print the design constraints or utilization | |
| Use these to check what needs to be specified in the configuration | |
| file for the model. No sub query type is needed for these two | |
| types. | |
| Energy - Print the data-dependent energy cost of an event | |
| NddPower - Print the non-data-denepent power of an instance | |
| Area - Print the area cost of an instance | |
| Use these to obtain the costs of the specified model. | |
| InstHier - Print the instance name hierarchy | |
| Use this to know what sub-instances are built for this model | |
| EventHier - Print the available events for Energy queries | |
| NddPowerHier - Print the available non-data-dependent power types | |
| AreaHier - Print the available area types | |
| Use this to know what to specify in the "sub query type" field. | |
| Instance name (with hierarchy) | |
| ------------------------------ | |
| The (sub)instance that you want to perform query. The name should be | |
| hierarchical starting from the top level model. Hierarchies are | |
| separated by the symbol "->". | |
| Sub query type | |
| -------------- | |
| This field is not required for 'Parameter', 'Property' and 'InstHier'. | |
| For 'Energy', this field stands for the event that cause this energy | |
| cost, such as 'WriteBuffer'. | |
| For 'NddPower' and 'Area', this field stands for the power and area | |
| cost of the model, such as 'Leakage' and 'Active'. | |
| For 'EventHier', if this field is not specified, all events of this | |
| instance will be printed; if this field is specified, then only | |
| the specified event will be printed. 'AreaHier' and 'NddPowerHier' | |
| also have the similar behavior. | |
| Detail level | |
| ------------ | |
| Defines the hierarchy depth to be printed. '0' means current level. | |
| This field is needed for all query types for syntax correctness, | |
| although it is not used for 'Parameter' and 'Property'. | |
| Multi-line queries | |
| ------------------ | |
| Query strings specified across multiple lines in the config file | |
| must have each line be terminated by a '\'. It is whitespace sensitive, | |
| so make sure there are no spaces after '\'. Note that the parser | |
| prunes everything after the comment '#' character, including '\'! | |
| See configs/router.cfg as an example. | |
| Examples of individual QueryString's: | |
| Parameter>>Router@0 | |
| Property>>Router->Crossbar@0 | |
| InstHier>>Router->InputPort@2 | |
| Energy>>Router:WriteBuffer@2 | |
| NddPower>>Router->Crossbar:Leakage@3 | |
| Area>>Router->SwitchAllocator:Active@4 | |
| =============================================================================== | |
| EvaluateString specifications | |
| =============================================================================== | |
| DSENT provides a way to let users do custom calculations by specifying the | |
| EvaluateString in the configuration file. EvaluateString constains a sequence | |
| of statements separated by one ';'. DSENT reads through the sequence and | |
| evaluates the statements one-by-one. | |
| Currently, DSENT supports: | |
| Four arithmetic operations | |
| -------------------------- | |
| 3 + 4 * (5 + 6) / 7; | |
| Define local variables through assignments | |
| ------------------------------------------ | |
| variable 'a' will be mapped to 7 for future referencing | |
| a = 3 + 4; | |
| Global variable referencing | |
| --------------------------- | |
| $(var_name) indicates either a key in the configuration file or a | |
| query string. If var_name exists in the configuration file, then the | |
| corresponding value will be returned; otherwise, DSENT will do a query | |
| using the string var_name@0 and return the query result. | |
| b = $(Energy>>Router:WriteBuffer) * $(Frequency); | |
| Printing outputs | |
| ---------------- | |
| DSENT prints the string following the keyword 'print'. | |
| print <expression> | |
| print "<string_to_print>"; | |
| print "<string_to_print>" <expression>; | |
| print 3 + 4; # Output: 7 | |
| print "Hello World"; # Output: Hello World | |
| print "Hello World " 3 + 4; # Output: Hello World 7 | |
| Multi-line evaluate strings | |
| --------------------------- | |
| Evaluate strings specified across multiple lines in the config file | |
| must have each line be terminated by a '\'. It is whitespace sensitive, | |
| so make sure there are no spaces after '\'. Note that the parser | |
| prunes everything after the comment '#' character, including '\'! | |
| See configs/router.cfg as an example. | |
| =============================================================================== | |
| Units | |
| =============================================================================== | |
| DSENT uses only SI units for all inputs and outputs. For example: | |
| time = s (second) | |
| distance = m (meter) | |
| capacitance = F (Farad) | |
| power = W (Watt) | |
| energy = J (Joule) | |
| resistance = Ohm | |
| loss = dB (Decibels) | |
| =============================================================================== | |
| Known Bugs and Issues | |
| =============================================================================== | |
| 1. If timing is not met, the timing optimizer will put the model in a state | |
| where everything is the maximum size (huge power, area). Thus, model results | |
| can be considered a gross over-estimate when timing isn't met. This is just the | |
| nature of the greedy timing optimizer and it will be addressed in the future. | |
| 2. The VC control and credit buffer component of the router is currently | |
| not modeled, as they have always been assumed to be lumped into the "negligible | |
| control cost" category in previous models and evaluations. Our recent | |
| experiments have shown that this is not true and we will be adding this in the | |
| next iteration. | |
| 3. Some of the connectivity paths have not been checked thoroughly. Thus, | |
| timing optimizer may miss some of the paths. However, we tried to make sure | |
| that the critical paths are modeled properly. | |
| 4. Local interconnect will have an ever-larger impact on power and timing as | |
| technology scales. So far we have not implemented a method for automatically | |
| estimating them but we will eventually address this. Evaluations for 22nm | |
| and below will tend to underestimate as a result. | |
| =============================================================================== | |
| Revision log | |
| =============================================================================== | |
| V0.91: | |
| Bugs fix: | |
| 1. Leakage power calculation printout for router (configs/router.cfg). | |
| New feature: | |
| 1. Area printout for router (configs/router.cfg). | |
| V0.9: | |
| First release. | |