multiperspective_perceptron_tage_8KB.cc revision 14081
13569Sgblack@eecs.umich.edu/* 23569Sgblack@eecs.umich.edu * Copyright 2019 Texas A&M University 33569Sgblack@eecs.umich.edu * 43569Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 53569Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are met: 63569Sgblack@eecs.umich.edu * 73569Sgblack@eecs.umich.edu * 1. Redistributions of source code must retain the above copyright notice, 83569Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer. 93569Sgblack@eecs.umich.edu * 103569Sgblack@eecs.umich.edu * 2. Redistributions in binary form must reproduce the above copyright notice, 113569Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer in the documentation 123569Sgblack@eecs.umich.edu * and/or other materials provided with the distribution. 133569Sgblack@eecs.umich.edu * 143569Sgblack@eecs.umich.edu * 3. Neither the name of the copyright holder nor the names of its 153569Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from this 163569Sgblack@eecs.umich.edu * software without specific prior written permission. 173569Sgblack@eecs.umich.edu * 183569Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 193569Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 203569Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 213569Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 223569Sgblack@eecs.umich.edu * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 233569Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 243569Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 253569Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 263569Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 273569Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 283804Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 293569Sgblack@eecs.umich.edu * 303569Sgblack@eecs.umich.edu * Author: Daniel A. Jiménez 313918Ssaidi@eecs.umich.edu * Adapted to gem5 by: Javier Bueno Hedo 323918Ssaidi@eecs.umich.edu * 333804Ssaidi@eecs.umich.edu */ 343811Ssaidi@eecs.umich.edu 353569Sgblack@eecs.umich.edu/* 363824Ssaidi@eecs.umich.edu * Multiperspective Perceptron Predictor with TAGE (by Daniel A. Jiménez) 373811Ssaidi@eecs.umich.edu * 8 KB version 383811Ssaidi@eecs.umich.edu */ 393823Ssaidi@eecs.umich.edu 403823Ssaidi@eecs.umich.edu#include "cpu/pred/multiperspective_perceptron_tage_8KB.hh" 413823Ssaidi@eecs.umich.edu 424103Ssaidi@eecs.umich.eduMPP_TAGE_8KB* 433569Sgblack@eecs.umich.eduMPP_TAGE_8KBParams::create() 443804Ssaidi@eecs.umich.edu{ 453804Ssaidi@eecs.umich.edu return new MPP_TAGE_8KB(this); 464088Sbinkertn@umich.edu} 473569Sgblack@eecs.umich.edu 485034Smilesck@eecs.umich.eduMPP_LoopPredictor_8KB* 495358Sgblack@eecs.umich.eduMPP_LoopPredictor_8KBParams::create() 503881Ssaidi@eecs.umich.edu{ 513804Ssaidi@eecs.umich.edu return new MPP_LoopPredictor_8KB(this); 523804Ssaidi@eecs.umich.edu} 533804Ssaidi@eecs.umich.edu 543804Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::MPP_StatisticalCorrector_8KB( 553569Sgblack@eecs.umich.edu const MPP_StatisticalCorrector_8KBParams *p) 563804Ssaidi@eecs.umich.edu : MPP_StatisticalCorrector(p) 573918Ssaidi@eecs.umich.edu{ 583881Ssaidi@eecs.umich.edu} 593881Ssaidi@eecs.umich.edu 603881Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::SCThreadHistory* 614990Sgblack@eecs.umich.eduMPP_StatisticalCorrector_8KB::makeThreadHistory() 624990Sgblack@eecs.umich.edu{ 634990Sgblack@eecs.umich.edu MPP_SCThreadHistory *sh = new MPP_SCThreadHistory(); 644990Sgblack@eecs.umich.edu 654990Sgblack@eecs.umich.edu sh->setNumOrdinalHistories(1); 664990Sgblack@eecs.umich.edu sh->initLocalHistory(1, numEntriesFirstLocalHistories, 4); 674990Sgblack@eecs.umich.edu 684990Sgblack@eecs.umich.edu return sh; 694990Sgblack@eecs.umich.edu} 703804Ssaidi@eecs.umich.edu 713569Sgblack@eecs.umich.eduvoid 723804Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::getBiasLSUM(Addr branch_pc, 733804Ssaidi@eecs.umich.edu StatisticalCorrector::BranchInfo* bi, int &lsum) const 743804Ssaidi@eecs.umich.edu{ 753804Ssaidi@eecs.umich.edu int8_t ctr = bias[getIndBias(branch_pc, bi, false /* unused */)]; 763881Ssaidi@eecs.umich.edu lsum += 2 * ctr + 1; 773804Ssaidi@eecs.umich.edu ctr = biasSK[getIndBiasSK(branch_pc, bi)]; 783804Ssaidi@eecs.umich.edu lsum += 2 * ctr + 1; 793804Ssaidi@eecs.umich.edu} 803804Ssaidi@eecs.umich.edu 813804Ssaidi@eecs.umich.eduint 823804Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::gPredictions(ThreadID tid, Addr branch_pc, 833804Ssaidi@eecs.umich.edu StatisticalCorrector::BranchInfo* bi, int & lsum, int64_t phist) 843569Sgblack@eecs.umich.edu{ 853569Sgblack@eecs.umich.edu MPP_SCThreadHistory *sh = static_cast<MPP_SCThreadHistory *>(scHistory); 863804Ssaidi@eecs.umich.edu unsigned int pc = branch_pc; 873804Ssaidi@eecs.umich.edu lsum += gPredict((pc << 1) + bi->predBeforeSC, sh->globalHist << 11, 883826Ssaidi@eecs.umich.edu gm, ggehl, gnb, logGnb, wg); 893804Ssaidi@eecs.umich.edu 903569Sgblack@eecs.umich.edu // Local History #1 913569Sgblack@eecs.umich.edu lsum += 2 * gPredict(branch_pc, sh->getLocalHistory(1, branch_pc), 923804Ssaidi@eecs.umich.edu lm, lgehl, lnb, logLnb, wl); 933826Ssaidi@eecs.umich.edu if (sh->getLocalHistory(1, branch_pc) == 2047) lsum += 4; 943907Ssaidi@eecs.umich.edu if (sh->getLocalHistory(1, branch_pc) == 0) lsum -= 4; 953826Ssaidi@eecs.umich.edu 963811Ssaidi@eecs.umich.edu lsum += gPredict(branch_pc, sh->getHistoryStackEntry(), 973836Ssaidi@eecs.umich.edu pm, pgehl, pnb, logPnb, wp); 983915Ssaidi@eecs.umich.edu 993907Ssaidi@eecs.umich.edu int thres = pUpdateThreshold[getIndUpd(branch_pc)]; 1003881Ssaidi@eecs.umich.edu 1013881Ssaidi@eecs.umich.edu return thres; 1023881Ssaidi@eecs.umich.edu} 1033881Ssaidi@eecs.umich.edu 1043907Ssaidi@eecs.umich.eduvoid 1053881Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::gUpdates(ThreadID tid, Addr pc, bool taken, 1063881Ssaidi@eecs.umich.edu StatisticalCorrector::BranchInfo* bi, int64_t phist) 1073881Ssaidi@eecs.umich.edu{ 1083881Ssaidi@eecs.umich.edu MPP_SCThreadHistory *sh = static_cast<MPP_SCThreadHistory *>(scHistory); 1093881Ssaidi@eecs.umich.edu 1103907Ssaidi@eecs.umich.edu gUpdate((pc << 1) + bi->predBeforeSC, taken, sh->globalHist << 11, 1113907Ssaidi@eecs.umich.edu gm, ggehl, gnb, logGnb, wg, bi); 1123907Ssaidi@eecs.umich.edu 1133907Ssaidi@eecs.umich.edu gUpdate(pc, taken, sh->getLocalHistory(1, pc), 1143907Ssaidi@eecs.umich.edu lm, lgehl, lnb, logLnb, wl, bi); 1153907Ssaidi@eecs.umich.edu 1163907Ssaidi@eecs.umich.edu gUpdate(pc, taken, sh->getHistoryStackEntry(), 1173907Ssaidi@eecs.umich.edu pm, pgehl, pnb, logPnb, wp, bi); 1183907Ssaidi@eecs.umich.edu} 1193907Ssaidi@eecs.umich.edu 1203907Ssaidi@eecs.umich.eduvoid 1213907Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::scHistoryUpdate(Addr branch_pc, 1223907Ssaidi@eecs.umich.edu const StaticInstPtr &inst, bool taken, 1233907Ssaidi@eecs.umich.edu StatisticalCorrector::BranchInfo *bi, Addr corrTarget) 1243907Ssaidi@eecs.umich.edu{ 1253907Ssaidi@eecs.umich.edu int brtype = inst->isDirectCtrl() ? 0 : 2; 1263907Ssaidi@eecs.umich.edu if (! inst->isUncondCtrl()) { 1273907Ssaidi@eecs.umich.edu ++brtype; 1283907Ssaidi@eecs.umich.edu } 1293907Ssaidi@eecs.umich.edu 1303907Ssaidi@eecs.umich.edu MPP_SCThreadHistory *sh = static_cast<MPP_SCThreadHistory *>(scHistory); 1313907Ssaidi@eecs.umich.edu 1323907Ssaidi@eecs.umich.edu if (brtype & 1) { 1333881Ssaidi@eecs.umich.edu sh->globalHist = (sh->globalHist << 1) + taken; 1343881Ssaidi@eecs.umich.edu } 1353881Ssaidi@eecs.umich.edu sh->updateHistoryStack(corrTarget, taken, inst->isCall(), 1363881Ssaidi@eecs.umich.edu inst->isReturn()); 1373881Ssaidi@eecs.umich.edu 1383881Ssaidi@eecs.umich.edu StatisticalCorrector::scHistoryUpdate(branch_pc, inst, taken, bi, 1393881Ssaidi@eecs.umich.edu corrTarget); 1403881Ssaidi@eecs.umich.edu} 1413881Ssaidi@eecs.umich.edu 1423881Ssaidi@eecs.umich.edusize_t 1433881Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB::getSizeInBits() const 1443881Ssaidi@eecs.umich.edu{ 1453907Ssaidi@eecs.umich.edu size_t bits = 16; //global histories 1463811Ssaidi@eecs.umich.edu 1473826Ssaidi@eecs.umich.edu bits += (1 << logSizeUp) * pUpdateThresholdWidth; 1483826Ssaidi@eecs.umich.edu 1493826Ssaidi@eecs.umich.edu bits += scCountersWidth * 2 * (1 << logBias); //2 bias arrays 1503826Ssaidi@eecs.umich.edu 1513881Ssaidi@eecs.umich.edu bits += (gnb - 2) * (1 << logGnb) * (scCountersWidth - 1) + 1523881Ssaidi@eecs.umich.edu (1 << (logGnb - 1)) * (2 * scCountersWidth - 1); 1533881Ssaidi@eecs.umich.edu 1543881Ssaidi@eecs.umich.edu bits += (pnb - 2) * (1 << logPnb) * (scCountersWidth - 1) + 1553881Ssaidi@eecs.umich.edu (1 << (logPnb - 1)) * (2 * scCountersWidth - 1); 1563881Ssaidi@eecs.umich.edu 1573881Ssaidi@eecs.umich.edu bits += (lnb - 2) * (1 << logLnb) * (scCountersWidth - 1) + 1583881Ssaidi@eecs.umich.edu (1 << (logLnb - 1)) * (2 * scCountersWidth - 1); 1593881Ssaidi@eecs.umich.edu 1603881Ssaidi@eecs.umich.edu bits += numEntriesFirstLocalHistories * lm[0]; 1613881Ssaidi@eecs.umich.edu 1623881Ssaidi@eecs.umich.edu bits += 16 * 16; // History stack 1633881Ssaidi@eecs.umich.edu bits += 4; // History stack pointer 1643881Ssaidi@eecs.umich.edu 1653881Ssaidi@eecs.umich.edu bits += 3 * chooserConfWidth; // 3 chooser counters 1663826Ssaidi@eecs.umich.edu 1673826Ssaidi@eecs.umich.edu return bits; 1683826Ssaidi@eecs.umich.edu} 1693826Ssaidi@eecs.umich.edu 1703826Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KB* 1713881Ssaidi@eecs.umich.eduMPP_StatisticalCorrector_8KBParams::create() 1723569Sgblack@eecs.umich.edu{ 1733569Sgblack@eecs.umich.edu return new MPP_StatisticalCorrector_8KB(this); 1743881Ssaidi@eecs.umich.edu} 1753804Ssaidi@eecs.umich.edu 1763881Ssaidi@eecs.umich.eduMultiperspectivePerceptronTAGE8KB::MultiperspectivePerceptronTAGE8KB( 1773826Ssaidi@eecs.umich.edu const MultiperspectivePerceptronTAGE8KBParams *p) 1783881Ssaidi@eecs.umich.edu : MultiperspectivePerceptronTAGE(p) 1793881Ssaidi@eecs.umich.edu{ 1803881Ssaidi@eecs.umich.edu} 1813907Ssaidi@eecs.umich.edu 1823907Ssaidi@eecs.umich.eduvoid 1833929Ssaidi@eecs.umich.eduMultiperspectivePerceptronTAGE8KB::createSpecs() 1843929Ssaidi@eecs.umich.edu{ 1853907Ssaidi@eecs.umich.edu addSpec(new BLURRYPATH(5, 15, -1, 2.25, 0, 6, *this)); 1863907Ssaidi@eecs.umich.edu addSpec(new RECENCYPOS(31, 3.5, 0, 6, *this)); 1873804Ssaidi@eecs.umich.edu addSpec(new GHISTMODPATH(3, 7, 1, 2.24, 0, 6, *this)); 1883804Ssaidi@eecs.umich.edu addSpec(new IMLI(1, 2.23, 0, 6, *this)); 1893881Ssaidi@eecs.umich.edu addSpec(new IMLI(4, 1.98, 0, 6, *this)); 1903804Ssaidi@eecs.umich.edu} 1913804Ssaidi@eecs.umich.edu 1923804Ssaidi@eecs.umich.eduMultiperspectivePerceptronTAGE8KB* 1933804Ssaidi@eecs.umich.eduMultiperspectivePerceptronTAGE8KBParams::create() 1943804Ssaidi@eecs.umich.edu{ 1953804Ssaidi@eecs.umich.edu return new MultiperspectivePerceptronTAGE8KB(this); 1963804Ssaidi@eecs.umich.edu} 1973569Sgblack@eecs.umich.edu