GarnetSyntheticTraffic.hh revision 13892
111661Stushar@ece.gatech.edu/* 211661Stushar@ece.gatech.edu * Copyright (c) 2016 Georgia Institute of Technology 311661Stushar@ece.gatech.edu * All rights reserved. 411661Stushar@ece.gatech.edu * 511661Stushar@ece.gatech.edu * Redistribution and use in source and binary forms, with or without 611661Stushar@ece.gatech.edu * modification, are permitted provided that the following conditions are 711661Stushar@ece.gatech.edu * met: redistributions of source code must retain the above copyright 811661Stushar@ece.gatech.edu * notice, this list of conditions and the following disclaimer; 911661Stushar@ece.gatech.edu * redistributions in binary form must reproduce the above copyright 1011661Stushar@ece.gatech.edu * notice, this list of conditions and the following disclaimer in the 1111661Stushar@ece.gatech.edu * documentation and/or other materials provided with the distribution; 1211661Stushar@ece.gatech.edu * neither the name of the copyright holders nor the names of its 1311661Stushar@ece.gatech.edu * contributors may be used to endorse or promote products derived from 1411661Stushar@ece.gatech.edu * this software without specific prior written permission. 1511661Stushar@ece.gatech.edu * 1611661Stushar@ece.gatech.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711661Stushar@ece.gatech.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811661Stushar@ece.gatech.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911661Stushar@ece.gatech.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011661Stushar@ece.gatech.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111661Stushar@ece.gatech.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211661Stushar@ece.gatech.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311661Stushar@ece.gatech.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411661Stushar@ece.gatech.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511661Stushar@ece.gatech.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611661Stushar@ece.gatech.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711661Stushar@ece.gatech.edu * 2811661Stushar@ece.gatech.edu * Authors: Tushar Krishna 2911661Stushar@ece.gatech.edu */ 3011661Stushar@ece.gatech.edu 3111661Stushar@ece.gatech.edu#ifndef __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 3211661Stushar@ece.gatech.edu#define __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 3311661Stushar@ece.gatech.edu 3411661Stushar@ece.gatech.edu#include <set> 3511661Stushar@ece.gatech.edu 3611661Stushar@ece.gatech.edu#include "base/statistics.hh" 3711661Stushar@ece.gatech.edu#include "mem/port.hh" 3811661Stushar@ece.gatech.edu#include "params/GarnetSyntheticTraffic.hh" 3913892Sgabeblack@google.com#include "sim/clocked_object.hh" 4011661Stushar@ece.gatech.edu#include "sim/eventq.hh" 4111661Stushar@ece.gatech.edu#include "sim/sim_exit.hh" 4211661Stushar@ece.gatech.edu#include "sim/sim_object.hh" 4311661Stushar@ece.gatech.edu#include "sim/stats.hh" 4411661Stushar@ece.gatech.edu 4511661Stushar@ece.gatech.eduenum TrafficType {BIT_COMPLEMENT_ = 0, 4611661Stushar@ece.gatech.edu BIT_REVERSE_ = 1, 4711661Stushar@ece.gatech.edu BIT_ROTATION_ = 2, 4811661Stushar@ece.gatech.edu NEIGHBOR_ = 3, 4911661Stushar@ece.gatech.edu SHUFFLE_ = 4, 5011661Stushar@ece.gatech.edu TORNADO_ = 5, 5111661Stushar@ece.gatech.edu TRANSPOSE_ = 6, 5211661Stushar@ece.gatech.edu UNIFORM_RANDOM_ = 7, 5311661Stushar@ece.gatech.edu NUM_TRAFFIC_PATTERNS_}; 5411661Stushar@ece.gatech.edu 5511661Stushar@ece.gatech.educlass Packet; 5613892Sgabeblack@google.comclass GarnetSyntheticTraffic : public ClockedObject 5711661Stushar@ece.gatech.edu{ 5811661Stushar@ece.gatech.edu public: 5911661Stushar@ece.gatech.edu typedef GarnetSyntheticTrafficParams Params; 6011661Stushar@ece.gatech.edu GarnetSyntheticTraffic(const Params *p); 6111661Stushar@ece.gatech.edu 6213799SAndrea.Mondelli@ucf.edu void init() override; 6311661Stushar@ece.gatech.edu 6411661Stushar@ece.gatech.edu // main simulation loop (one cycle) 6511661Stushar@ece.gatech.edu void tick(); 6611661Stushar@ece.gatech.edu 6713784Sgabeblack@google.com Port &getPort(const std::string &if_name, 6813784Sgabeblack@google.com PortID idx=InvalidPortID) override; 6911661Stushar@ece.gatech.edu 7011661Stushar@ece.gatech.edu /** 7111661Stushar@ece.gatech.edu * Print state of address in memory system via PrintReq (for 7211661Stushar@ece.gatech.edu * debugging). 7311661Stushar@ece.gatech.edu */ 7411661Stushar@ece.gatech.edu void printAddr(Addr a); 7511661Stushar@ece.gatech.edu 7611661Stushar@ece.gatech.edu protected: 7712129Sspwilson2@wisc.edu EventFunctionWrapper tickEvent; 7811661Stushar@ece.gatech.edu 7911661Stushar@ece.gatech.edu class CpuPort : public MasterPort 8011661Stushar@ece.gatech.edu { 8111661Stushar@ece.gatech.edu GarnetSyntheticTraffic *tester; 8211661Stushar@ece.gatech.edu 8311661Stushar@ece.gatech.edu public: 8411661Stushar@ece.gatech.edu 8511661Stushar@ece.gatech.edu CpuPort(const std::string &_name, GarnetSyntheticTraffic *_tester) 8611661Stushar@ece.gatech.edu : MasterPort(_name, _tester), tester(_tester) 8711661Stushar@ece.gatech.edu { } 8811661Stushar@ece.gatech.edu 8911661Stushar@ece.gatech.edu protected: 9011661Stushar@ece.gatech.edu 9111661Stushar@ece.gatech.edu virtual bool recvTimingResp(PacketPtr pkt); 9211661Stushar@ece.gatech.edu 9311661Stushar@ece.gatech.edu virtual void recvReqRetry(); 9411661Stushar@ece.gatech.edu }; 9511661Stushar@ece.gatech.edu 9611661Stushar@ece.gatech.edu CpuPort cachePort; 9711661Stushar@ece.gatech.edu 9811661Stushar@ece.gatech.edu class GarnetSyntheticTrafficSenderState : public Packet::SenderState 9911661Stushar@ece.gatech.edu { 10011661Stushar@ece.gatech.edu public: 10111661Stushar@ece.gatech.edu /** Constructor. */ 10211661Stushar@ece.gatech.edu GarnetSyntheticTrafficSenderState(uint8_t *_data) 10311661Stushar@ece.gatech.edu : data(_data) 10411661Stushar@ece.gatech.edu { } 10511661Stushar@ece.gatech.edu 10611661Stushar@ece.gatech.edu // Hold onto data pointer 10711661Stushar@ece.gatech.edu uint8_t *data; 10811661Stushar@ece.gatech.edu }; 10911661Stushar@ece.gatech.edu 11011661Stushar@ece.gatech.edu PacketPtr retryPkt; 11111661Stushar@ece.gatech.edu unsigned size; 11211661Stushar@ece.gatech.edu int id; 11311661Stushar@ece.gatech.edu 11411661Stushar@ece.gatech.edu std::map<std::string, TrafficType> trafficStringToEnum; 11511661Stushar@ece.gatech.edu 11611661Stushar@ece.gatech.edu unsigned blockSizeBits; 11711661Stushar@ece.gatech.edu 11811661Stushar@ece.gatech.edu Tick noResponseCycles; 11911661Stushar@ece.gatech.edu 12011661Stushar@ece.gatech.edu int numDestinations; 12111661Stushar@ece.gatech.edu Tick simCycles; 12211661Stushar@ece.gatech.edu int numPacketsMax; 12311661Stushar@ece.gatech.edu int numPacketsSent; 12411661Stushar@ece.gatech.edu int singleSender; 12511661Stushar@ece.gatech.edu int singleDest; 12611661Stushar@ece.gatech.edu 12711661Stushar@ece.gatech.edu std::string trafficType; // string 12811661Stushar@ece.gatech.edu TrafficType traffic; // enum from string 12911661Stushar@ece.gatech.edu double injRate; 13011661Stushar@ece.gatech.edu int injVnet; 13111661Stushar@ece.gatech.edu int precision; 13211661Stushar@ece.gatech.edu 13311661Stushar@ece.gatech.edu const Cycles responseLimit; 13411661Stushar@ece.gatech.edu 13511661Stushar@ece.gatech.edu MasterID masterId; 13611661Stushar@ece.gatech.edu 13711661Stushar@ece.gatech.edu void completeRequest(PacketPtr pkt); 13811661Stushar@ece.gatech.edu 13911661Stushar@ece.gatech.edu void generatePkt(); 14011661Stushar@ece.gatech.edu void sendPkt(PacketPtr pkt); 14111661Stushar@ece.gatech.edu void initTrafficType(); 14211661Stushar@ece.gatech.edu 14311661Stushar@ece.gatech.edu void doRetry(); 14411661Stushar@ece.gatech.edu 14511661Stushar@ece.gatech.edu friend class MemCompleteEvent; 14611661Stushar@ece.gatech.edu}; 14711661Stushar@ece.gatech.edu 14811661Stushar@ece.gatech.edu#endif // __CPU_GARNET_SYNTHETIC_TRAFFIC_HH__ 149