Skip to content

sharda/manifold

 
 

Repository files navigation

Lib requirements
----------------
The code uses the gsl scientific library and I am yet to fix the configure script to check for if it is available. So make sure you have gsl installed. 

Installing it on ubuntu by 
        sudo apt-get install libgsl0 libgsl0-dev

How to compile and run the simulator
------------------------------------
1. Follow the given steps to compile Iris
    ./configure
    make

2. Run the simulator
There are three different binaries 
    - manifold_simMC: 
        this runs a standalone version of the memory controller simulator and takes as many traces as the number of the threads.
        ./manifold_simMC <trace1> <trace2>
        ./manifold_simMC traces/perl_3254.tr traces/perl_3254.tr

   - manifold_simIris: 
        this runs an integrated network and memory model with currently the mesh topology. This is a simple sample test case of pkt generators with sink nodes.
        ./manifold_simIris config/ex_mesh_phy_sink.cfg

   - manifold_fullSim: 
        this runs the full system with zesto->network->MC. Currently only supports meshes of small sizes.
        - TODO: DHRUV FILL IN SAMPLE

The following switches are supported at the command line in the current version
    --thread_id_bits, --mc_bits --early_credit

Environment details
-------------------
    The current version has been tested with
1. gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
    Linux 2.6.28-18-generic #60-Ubuntu SMP i686 GNU/Linux
2. gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
    Linux 2.6.24-23-generic #1 SMP i686 GNU/Linux

To add parameters to the config file
------------------------------------
1. Add the new parameter to the manifold/source/util/config_params.h file. 
Example: 	uint no_of_cores = 0;
		uint concentration = 0;

2. To use the new parameter in a source file, use "extern" keyword.
Example:	To use these variables in mesh.h file, we include the following lines:
		extern uint no_of_cores;
		extern uint concentration;

To add additional fields to high level and low level packets
------------------------------------------------------------
1. Add the new field to the file manifold/source/simIris/data_types/highLevelPacket.h ( for a high level packet ) and manifold/source/simIris/data_types/lowLevelPacket.h (for a low level packet)
Example: unsigned int transaction_idt;

2. Add the new field to the corresponding part in the head/body/tail of the flit packet as defined in manifold/source/simIris/data_types/flit.h
Example: unsigned int transaction_id; // added to class HeadFlit 

3. In manifold/source/simIris/data_types/lowLevelPacket.cc file, add the new field to the corresponding part of LowLevelPacket::add(Flit* ptr) function.
Example: this->transaction_id = hf->transaction_id;

4. In manifold/source/simIris/data_types/highLevelPacket.cc file, make entries for the new field in the 2 functions for converting from high level to low level packets and vice-versa.
Example: In HighLevelPacket::to_low_level_packet(LowLevelPacket* pkt) 
		hf->transaction_id = transaction_id; 
	and in HighLevelPacket::from_low_level_packet (LowLevelPacket* llp)
		transaction_id = llp->transaction_id; 

5. To use this field, include code as shown in sample below from manifold/simIris/source/components/impl/genericTPGVcs.cc file which uses hop_count in the function
GenericTPGVcs::handle_out_pull_event ( IrisEvent* e )
Example: 	hlp->transaction_id = 1000;



Releases

No releases published

Packages

No packages published

Languages

  • C++ 53.8%
  • Java 34.3%
  • C 11.5%
  • Other 0.4%