Giter Club home page Giter Club logo

cmu-safari / pythia Goto Github PK

View Code? Open in Web Editor NEW
104.0 9.0 34.0 3.58 MB

A customizable hardware prefetching framework using online reinforcement learning as described in the MICRO 2021 paper by Bera et al. (https://arxiv.org/pdf/2109.12021.pdf).

Home Page: https://arxiv.org/pdf/2109.12021.pdf

License: MIT License

Makefile 0.17% C++ 56.28% Shell 0.76% C 2.49% Perl 31.42% XS 7.82% Roff 1.07%
prefetcher cache-replacement branch-predictor champsim-simulator champsim-tracer reinforcement-learning machine-learning computer-architecture microarchitecture

pythia's Introduction

Logo

A Customizable Hardware Prefetching Framework Using Online Reinforcement Learning

GitHub GitHub release DOI

Table of Contents
  1. What is Pythia?
  2. About the Framework
  3. Prerequisites
  4. Installation
  5. Preparing Traces
  6. Experimental Workflow
  7. HDL Implementation
  8. Code Walkthrough
  9. Citation
  10. License
  11. Contact
  12. Acknowledgements

What is Pythia?

Pythia is a hardware-realizable, light-weight data prefetcher that uses reinforcement learning to generate accurate, timely, and system-aware prefetch requests.

Pythia formulates hardware prefetching as a reinforcement learning task. For every demand request, Pythia observes multiple different types of program context information to take a prefetch decision. For every prefetch decision, Pythia receives a numerical reward that evaluates prefetch quality under the current memory bandwidth utilization. Pythia uses this reward to reinforce the correlation between program context information and prefetch decision to generate highly accurate, timely, and system-aware prefetch requests in the future.

Pythia is presetend at MICRO 2021.

Rahul Bera, Konstantinos Kanellopoulos, Anant V. Nori, Taha Shahroodi, Sreenivas Subramoney, Onur Mutlu, "Pythia: A Customizable Hardware Prefetching Framework Using Online Reinforcement Learning", In Proceedings of the 54th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO), 2021

About The Framework

Pythia is implemented in ChampSim simulator. We have significantly modified the prefetcher integration pipeline in ChampSim to add support to a wide range of prior prefetching proposals mentioned below:

  • Stride [Fu+, MICRO'92]
  • Streamer [Chen and Baer, IEEE TC'95]
  • SMS [Somogyi+, ISCA'06]
  • AMPM [Ishii+, ICS'09]
  • Sandbox [Pugsley+, HPCA'14]
  • BOP [Michaud, HPCA'16]
  • SPP [Kim+, MICRO'16]
  • Bingo [Bakshalipour+, HPCA'19]
  • SPP+PPF [Bhatia+, ISCA'19]
  • DSPatch [Bera+, MICRO'19]
  • MLOP [Shakerinava+, DPC-3'19]
  • IPCP [Pakalapati+, ISCA'20]

Most of the prefetchers (e.g., SPP [1], Bingo [2], IPCP [3]) reuse codes from 2nd and 3rd data prefetching championships (DPC). Others (e.g., AMPM [4], SMS [5]) are implemented from scratch and shows similar relative performance reported by previous works.

Prerequisites

The infrastructure has been tested with the following system configuration:

  • G++ v6.3.0 20170516
  • CMake v3.20.2
  • md5sum v8.26
  • Perl v5.24.1
  • Megatools 1.11.0 (Note that v1.9.98 does NOT work)

Installation

  1. Install necessary prequisites

    sudo apt install perl
  2. Clone the GitHub repo

    git clone https://github.com/CMU-SAFARI/Pythia.git
  3. Clone the bloomfilter library inside Pythia home directory

    cd Pythia
    git clone https://github.com/mavam/libbf.git libbf
  4. Build bloomfilter library. This should create the static libbf.a library inside build directory

    cd libbf
    mkdir build && cd build
    cmake ../
    make clean && make
  5. Build Pythia for single/multi core using build script. This should create the executable inside bin directory.

    cd $PYTHIA_HOME
    # ./build_champsim.sh <l1_pref> <l2_pref> <llc_pref> <ncores>
    ./build_champsim.sh multi multi no 1

    Please use build_champsim_highcore.sh to build ChampSim for more than four cores.

  6. Set appropriate environment variables as follows:

    source setvars.sh

Preparing Traces

  1. Install the megatools executable

    cd $PYTHIA_HOME/scripts
    wget https://megatools.megous.com/builds/builds/megatools-1.11.1.20230212-linux-x86_64.tar.gz
    tar -xvf megatools-1.11.1.20230212-linux-x86_64.tar.gz 

Note: The megatools link might change in the future depending on latest release. Please recheck the link if the download fails.

  1. Use the download_traces.pl perl script to download necessary ChampSim traces used in our paper.

    mkdir $PYTHIA_HOME/traces/
    cd $PYTHIA_HOME/scripts/
    perl download_traces.pl --csv artifact_traces.csv --dir ../traces/

Note: The script should download 233 traces. Please check the final log for any incomplete downloads. The total size of all traces would be ~52 GB.

  1. Once the trace download completes, please verify the checksum as follows. Please make sure all traces pass the checksum test.

    cd $PYTHIA_HOME/traces
    md5sum -c ../scripts/artifact_traces.md5
  2. If the traces are downloaded in some other path, please change the full path in experiments/MICRO21_1C.tlist and experiments/MICRO21_4C.tlist accordingly.

More Traces

  1. We are also releasing a new set of ChampSim traces from PARSEC 2.1 and Ligra. The trace drop-points are measured using Intel Pinplay and the traces are captured by the ChampSim PIN tool. The traces can be found in the following links. To download these traces in bulk, please use the "Download as ZIP" option from mega.io web-interface.

  2. Our simulation infrastructure is completely compatible with all prior ChampSim traces used in CRC-2 and DPC-3. One can also convert the CVP-2 traces (courtesy of Qualcomm Datacenter Technologies) to ChampSim format using the following converter. The traces can be found in the follwing websites:

Experimental Workflow

Our experimental workflow consists of two stages: (1) launching experiments, and (2) rolling up statistics from experiment outputs.

Launching Experiments

  1. To create necessary experiment commands in bulk, we will use scripts/create_jobfile.pl

  2. create_jobfile.pl requires three necessary arguments:

    • exe: the full path of the executable to run
    • tlist: contains trace definitions
    • exp: contains knobs of the experiements to run
  3. Create experiments as follows. Please make sure the paths used in tlist and exp files are appropriate.

    cd $PYTHIA_HOME/experiments/
    perl ../scripts/create_jobfile.pl --exe $PYTHIA_HOME/bin/perceptron-multi-multi-no-ship-1core --tlist MICRO21_1C.tlist --exp MICRO21_1C.exp --local 1 > jobfile.sh
  4. Go to a run directory (or create one) inside experiements to launch runs in the following way:

    cd experiments_1C
    source ../jobfile.sh
  5. If you have slurm support to launch multiple jobs in a compute cluster, please provide --local 0 to create_jobfile.pl

Rolling-up Statistics

  1. To rollup stats in bulk, we will use scripts/rollup.pl

  2. rollup.pl requires three necessary arguments:

    • tlist
    • exp
    • mfile: specifies stat names and reduction method to rollup
  3. Rollup statistics as follows. Please make sure the paths used in tlist and exp files are appropriate.

    cd experiements_1C/
    perl ../../scripts/rollup.pl --tlist ../MICRO21_1C.tlist --exp ../MICRO21_1C.exp --mfile ../rollup_1C_base_config.mfile > rollup.csv
  4. Export the rollup.csv file in you favourite data processor (Python Pandas, Excel, Numbers, etc.) to gain insights.

HDL Implementation

We also implement Pythia in Chisel HDL to faithfully measure the area and power cost. The implementation, along with the reports from umcL65 library, can be found the following GitHub repo. Please note that the area and power projections in the sample report is different than what is reported in the paper due to different technology.

Pythia-HDL Build

Code Walkthrough

Pythia was code-named Scooby (the mistery-solving dog) during the developement. So any mention of Scooby anywhere in the code inadvertently means Pythia.

  • The top-level files for Pythia are prefetchers/scooby.cc and inc/scooby.h. These two files declare and define the high-level functions for Pythia (e.g., invoke_prefetcher, register_fill, etc.).
  • The released version of Pythia has two types of RL engine defined: basic and featurewise. They differ only in terms of the QVStore organization (please refer to our paper to know more about QVStore). The QVStore for basic version is simply defined as a two-dimensional table, whereas the featurewise version defines it as a hierarchichal organization of multiple small tables. The implementation of respective engines can be found in src/ and inc/ directories.
  • inc/feature_knowledge.h and src/feature_knowldege.cc define how to compute each program feature from the raw attributes of a deamand request. If you want to define your own feature, extend the enum FeatureType in inc/feature_knowledge.h and define its corresponding process function.
  • inc/util.h and src/util.cc contain all hashing functions used in our evaluation. Play around with them, as a better hash function can also provide performance benefits.

Citation

If you use this framework, please cite the following paper:

@inproceedings{bera2021,
  author = {Bera, Rahul and Kanellopoulos, Konstantinos and Nori, Anant V. and Shahroodi, Taha and Subramoney, Sreenivas and Mutlu, Onur},
  title = {{Pythia: A Customizable Hardware Prefetching Framework Using Online Reinforcement Learning}},
  booktitle = {Proceedings of the 54th Annual IEEE/ACM International Symposium on Microarchitecture},
  year = {2021}
}

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Rahul Bera - [email protected]

Acknowledgements

We acklowledge support from SAFARI Research Group's industrial partners.

pythia's People

Contributors

rahulbera avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pythia's Issues

How to calculate cache miss percentage?

Hi,

I tried the Cassandra trace on 1 core and rolled up the statistics:

Screenshot 2023-06-12 at 8 23 12 AM
  1. May I ask how to calculate the LLC_total_miss percentage?
  2. Why does "nopref", which I assume is "no prefetcher", has the lowest miss rate?
  3. In the first five lines, why pythisa has the highest IPC (instructions per cycle), even though it has more cache misses than "nopref"?

Thanks in advance!

Can't locate Trace.pm in @INC

Hi,

When running create_jobfile.pl, I encountered a module not found error:

cc@pythsia-1:~/Pythia/experiments$ perl ../scripts/create_jobfile.pl --exe $PYTHIA_HOME/bin/perceptron-multi-multi-no-ship-1core --tlist MICRO21_1C.tlist --exp MICRO21_1C.exp --local 1 > jobfile.sh
Can't locate Trace.pm in @INC (you may need to install the Trace module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at ../scripts/create_jobfile.pl line 5.
BEGIN failed--compilation aborted at ../scripts/create_jobfile.pl line 5.

I tried looking it up online but still didn't know how how to install the Trace module. Is Trace.pm a file somewhere in the repo, or should I install it in some way?

Thanks in advance!

Cannot download cse.tamu't traces

Hi,

When executing the download_traces.pl, I met a problem of being unable to resolve hpca23.cse.tamu:

cc@pythsia-1:~/Pythia/scripts$ perl download_traces.pl --csv artifact_traces.csv --dir ../traces/

Downloading 403.gcc-16B.champsimtrace.xz...
--2023-06-09 03:36:49--  http://hpca23.cse.tamu.edu/champsim-traces/speccpu/403.gcc-16B.champsimtrace.xz
Resolving hpca23.cse.tamu.edu (hpca23.cse.tamu.edu)... failed: Name or service not known.
wget: unable to resolve host address ‘hpca23.cse.tamu.edu’

Downloading 410.bwaves-1963B.champsimtrace.xz...
--2023-06-09 03:36:49--  http://hpca23.cse.tamu.edu/champsim-traces/speccpu/410.bwaves-1963B.champsimtrace.xz
Resolving hpca23.cse.tamu.edu (hpca23.cse.tamu.edu)... failed: Name or service not known.
wget: unable to resolve host address ‘hpca23.cse.tamu.edu’

Downloading 410.bwaves-2097B.champsimtrace.xz...
--2023-06-09 03:36:49--  http://hpca23.cse.tamu.edu/champsim-traces/speccpu/410.bwaves-2097B.champsimtrace.xz
Resolving hpca23.cse.tamu.edu (hpca23.cse.tamu.edu)... failed: Name or service not known.
wget: unable to resolve host address ‘hpca23.cse.tamu.edu’

The issue persisted for almost all the tamu traces.

After 6.8 hours, the download-script completed with 85 failed downloads:

403.gcc-16B.champsimtrace.xz: FAILED
410.bwaves-1963B.champsimtrace.xz: FAILED
410.bwaves-2097B.champsimtrace.xz: FAILED
429.mcf-184B.champsimtrace.xz: FAILED
429.mcf-192B.champsimtrace.xz: FAILED
429.mcf-22B.champsimtrace.xz: FAILED
429.mcf-51B.champsimtrace.xz: FAILED
433.milc-127B.champsimtrace.xz: FAILED
433.milc-337B.champsimtrace.xz: FAILED
436.cactusADM-1804B.champsimtrace.xz: FAILED
437.leslie3d-134B.champsimtrace.xz: FAILED
437.leslie3d-149B.champsimtrace.xz: FAILED
437.leslie3d-232B.champsimtrace.xz: FAILED
437.leslie3d-265B.champsimtrace.xz: FAILED
437.leslie3d-271B.champsimtrace.xz: FAILED
437.leslie3d-273B.champsimtrace.xz: FAILED
445.gobmk-30B.champsimtrace.xz: FAILED
445.gobmk-36B.champsimtrace.xz: FAILED
450.soplex-247B.champsimtrace.xz: FAILED
450.soplex-92B.champsimtrace.xz: FAILED
456.hmmer-327B.champsimtrace.xz: FAILED
459.GemsFDTD-1169B.champsimtrace.xz: FAILED
459.GemsFDTD-1211B.champsimtrace.xz: FAILED
459.GemsFDTD-1418B.champsimtrace.xz: FAILED
459.GemsFDTD-1491B.champsimtrace.xz: FAILED
459.GemsFDTD-765B.champsimtrace.xz: FAILED
462.libquantum-1343B.champsimtrace.xz: FAILED
462.libquantum-714B.champsimtrace.xz: FAILED
470.lbm-1274B.champsimtrace.xz: FAILED
471.omnetpp-188B.champsimtrace.xz: FAILED
473.astar-359B.champsimtrace.xz: FAILED
481.wrf-1254B.champsimtrace.xz: FAILED
481.wrf-1281B.champsimtrace.xz: FAILED
481.wrf-196B.champsimtrace.xz: FAILED
481.wrf-455B.champsimtrace.xz: FAILED
481.wrf-816B.champsimtrace.xz: FAILED
482.sphinx3-1100B.champsimtrace.xz: FAILED
482.sphinx3-1297B.champsimtrace.xz: FAILED
482.sphinx3-1395B.champsimtrace.xz: FAILED
482.sphinx3-1522B.champsimtrace.xz: FAILED
482.sphinx3-234B.champsimtrace.xz: FAILED
482.sphinx3-417B.champsimtrace.xz: FAILED
483.xalancbmk-127B.champsimtrace.xz: FAILED
602.gcc_s-1850B.champsimtrace.xz: FAILED
602.gcc_s-2226B.champsimtrace.xz: FAILED
602.gcc_s-734B.champsimtrace.xz: FAILED
603.bwaves_s-1740B.champsimtrace.xz: FAILED
603.bwaves_s-2609B.champsimtrace.xz: FAILED
603.bwaves_s-2931B.champsimtrace.xz: FAILED
605.mcf_s-1536B.champsimtrace.xz: FAILED
605.mcf_s-1554B.champsimtrace.xz: FAILED
605.mcf_s-1644B.champsimtrace.xz: FAILED
605.mcf_s-472B.champsimtrace.xz: FAILED
605.mcf_s-484B.champsimtrace.xz: FAILED
605.mcf_s-665B.champsimtrace.xz: FAILED
605.mcf_s-782B.champsimtrace.xz: FAILED
605.mcf_s-994B.champsimtrace.xz: FAILED
607.cactuBSSN_s-2421B.champsimtrace.xz: FAILED
607.cactuBSSN_s-3477B.champsimtrace.xz: FAILED
607.cactuBSSN_s-4004B.champsimtrace.xz: FAILED
619.lbm_s-2676B.champsimtrace.xz: FAILED
619.lbm_s-2677B.champsimtrace.xz: FAILED
619.lbm_s-3766B.champsimtrace.xz: FAILED
619.lbm_s-4268B.champsimtrace.xz: FAILED
620.omnetpp_s-141B.champsimtrace.xz: FAILED
620.omnetpp_s-874B.champsimtrace.xz: FAILED
621.wrf_s-6673B.champsimtrace.xz: FAILED
621.wrf_s-8065B.champsimtrace.xz: FAILED
623.xalancbmk_s-10B.champsimtrace.xz: FAILED
623.xalancbmk_s-202B.champsimtrace.xz: FAILED
623.xalancbmk_s-592B.champsimtrace.xz: FAILED
627.cam4_s-490B.champsimtrace.xz: FAILED
627.cam4_s-573B.champsimtrace.xz: FAILED
628.pop2_s-17B.champsimtrace.xz: FAILED
649.fotonik3d_s-10881B.champsimtrace.xz: FAILED
649.fotonik3d_s-1176B.champsimtrace.xz: FAILED
649.fotonik3d_s-7084B.champsimtrace.xz: FAILED
649.fotonik3d_s-8225B.champsimtrace.xz: FAILED
654.roms_s-1007B.champsimtrace.xz: FAILED
654.roms_s-1070B.champsimtrace.xz: FAILED
654.roms_s-1390B.champsimtrace.xz: FAILED
654.roms_s-1613B.champsimtrace.xz: FAILED
654.roms_s-293B.champsimtrace.xz: FAILED
654.roms_s-294B.champsimtrace.xz: FAILED
654.roms_s-523B.champsimtrace.xz: FAILED
cassandra_phase0_core0.trace.xz: OK
cassandra_phase0_core1.trace.xz: OK
cassandra_phase0_core2.trace.xz: OK
cassandra_phase0_core3.trace.xz: OK
cassandra_phase1_core0.trace.xz: OK
cassandra_phase1_core1.trace.xz: OK
cassandra_phase1_core2.trace.xz: OK
cassandra_phase1_core3.trace.xz: OK
cassandra_phase2_core1.trace.xz: OK
cassandra_phase2_core2.trace.xz: OK
cassandra_phase2_core3.trace.xz: OK
cassandra_phase3_core1.trace.xz: OK
cassandra_phase3_core3.trace.xz: OK
cassandra_phase4_core0.trace.xz: OK
cassandra_phase4_core2.trace.xz: OK
cassandra_phase4_core3.trace.xz: OK
cassandra_phase5_core0.trace.xz: OK
cassandra_phase5_core1.trace.xz: OK
cassandra_phase5_core2.trace.xz: OK
cassandra_phase5_core3.trace.xz: OK
cloud9_phase5_core2.trace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_15500M.length_250M.champsimtrace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_15750M.length_250M.champsimtrace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_26750M.length_250M.champsimtrace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_BC.com-lj.ungraph.gcc_6.3.0_O3.drop_500M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_1750M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_24750M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_33750M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_4000M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_5500M.length_250M.champsimtrace.xz: OK
ligra_BellmanFord.com-lj.ungraph.gcc_6.3.0_O3.drop_7500M.length_250M.champsimtrace.xz: OK
ligra_BFS-Bitvector.com-lj.ungraph.gcc_6.3.0_O3.drop_18000M.length_250M.champsimtrace.xz: OK
ligra_BFS-Bitvector.com-lj.ungraph.gcc_6.3.0_O3.drop_23000M.length_250M.champsimtrace.xz: OK
ligra_BFS-Bitvector.com-lj.ungraph.gcc_6.3.0_O3.drop_2500M.length_250M.champsimtrace.xz: OK
ligra_BFS-Bitvector.com-lj.ungraph.gcc_6.3.0_O3.drop_500M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_15500M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_18750M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_22000M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_BFSCC.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_15750M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_20250M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_21500M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_BFS.com-lj.ungraph.gcc_6.3.0_O3.drop_500M.length_250M.champsimtrace.xz: OK
ligra_CF.com-lj.ungraph.gcc_6.3.0_O3.drop_154750M.length_250M.champsimtrace.xz: OK
ligra_CF.com-lj.ungraph.gcc_6.3.0_O3.drop_184750M.length_250M.champsimtrace.xz: OK
ligra_CF.com-lj.ungraph.gcc_6.3.0_O3.drop_2500M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_15750M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_18000M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_22750M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_23750M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_Components.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_21000M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_22000M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_Components-Shortcut.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_15750M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_21250M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_MIS.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_18500M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_21750M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_500M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_51000M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_60750M.length_250M.champsimtrace.xz: OK
ligra_PageRank.com-lj.ungraph.gcc_6.3.0_O3.drop_79500M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_1250M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_24000M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_24500M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_35250M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_52000M.length_250M.champsimtrace.xz: OK
ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_6000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_18000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_24500M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_25000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_32000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_36000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_5000M.length_250M.champsimtrace.xz: OK
ligra_Radii.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_18000M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_24000M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_25000M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_3500M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_6000M.length_250M.champsimtrace.xz: OK
ligra_Triangle.com-lj.ungraph.gcc_6.3.0_O3.drop_750M.length_250M.champsimtrace.xz: OK
nutch_phase0_core0.trace.xz: OK
nutch_phase0_core1.trace.xz: OK
nutch_phase0_core2.trace.xz: OK
nutch_phase0_core3.trace.xz: OK
nutch_phase1_core0.trace.xz: OK
nutch_phase1_core1.trace.xz: OK
nutch_phase1_core2.trace.xz: OK
nutch_phase1_core3.trace.xz: OK
nutch_phase3_core0.trace.xz: OK
nutch_phase3_core1.trace.xz: OK
nutch_phase3_core2.trace.xz: OK
nutch_phase3_core3.trace.xz: OK
nutch_phase4_core0.trace.xz: OK
nutch_phase4_core1.trace.xz: OK
nutch_phase4_core2.trace.xz: OK
nutch_phase4_core3.trace.xz: OK
parsec_2.1.canneal.simlarge.prebuilt.drop_1250M.length_250M.champsimtrace.xz: OK
parsec_2.1.canneal.simlarge.prebuilt.drop_3000M.length_250M.champsimtrace.xz: OK
parsec_2.1.canneal.simlarge.prebuilt.drop_4500M.length_250M.champsimtrace.xz: OK
parsec_2.1.canneal.simlarge.prebuilt.drop_4750M.length_250M.champsimtrace.xz: OK
parsec_2.1.canneal.simlarge.prebuilt.drop_500M.length_250M.champsimtrace.xz: OK
parsec_2.1.facesim.simlarge.prebuilt.drop_1500M.length_250M.champsimtrace.xz: OK
parsec_2.1.facesim.simlarge.prebuilt.drop_21500M.length_250M.champsimtrace.xz: OK
parsec_2.1.fluidanimate.simlarge.prebuilt.drop_9500M.length_250M.champsimtrace.xz: OK
parsec_2.1.raytrace.simlarge.prebuilt.drop_23500M.length_250M.champsimtrace.xz: OK
parsec_2.1.raytrace.simlarge.prebuilt.drop_23750M.length_250M.champsimtrace.xz: OK
parsec_2.1.streamcluster.simlarge.prebuilt.drop_0M.length_250M.champsimtrace.xz: OK
parsec_2.1.streamcluster.simlarge.prebuilt.drop_14750M.length_250M.champsimtrace.xz: OK
parsec_2.1.streamcluster.simlarge.prebuilt.drop_250M.length_250M.champsimtrace.xz: OK
parsec_2.1.streamcluster.simlarge.prebuilt.drop_4750M.length_250M.champsimtrace.xz: OK
streaming_phase0_core1.trace.xz: OK
streaming_phase1_core0.trace.xz: OK
streaming_phase1_core1.trace.xz: OK
streaming_phase1_core3.trace.xz: OK
streaming_phase2_core0.trace.xz: OK
streaming_phase2_core1.trace.xz: OK
streaming_phase2_core2.trace.xz: OK
streaming_phase2_core3.trace.xz: OK
streaming_phase3_core0.trace.xz: OK
streaming_phase3_core1.trace.xz: OK
streaming_phase3_core3.trace.xz: OK
streaming_phase4_core0.trace.xz: OK
streaming_phase4_core1.trace.xz: OK
streaming_phase4_core3.trace.xz: OK
streaming_phase5_core0.trace.xz: OK
streaming_phase5_core1.trace.xz: OK

I tried deleting the traces folders and downloading again but got the same result.

Appreciate any help!

Cannot get the same results in each run

Thank you for providing the useful framework.
I am doing some follow-up research based on your code. However, an annoying thing is that when I run the same simulation command twice, I will get slightly different IPC numbers. This can be observed in each line of IPC log.

I guess there may be some issues about the random seed usage, however I have not found any clues (I have checked that the champsim_seeds are the same in two runs). Do you have any suggestions?

Thank you!

Error downloading traces

I got this error while downloading traces. How can I fix it?
Downloading ligra_PageRankDelta.com-lj.ungraph.gcc_6.3.0_O3.drop_17000M.length_250M.champsimtrace.xz...
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 2 seconds00% - 0 bytes of 135.5 MiB
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 4 seconds00% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 8 seconds00% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 16 seconds0% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 32 seconds0% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 64 seconds0% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 128 seconds% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 256 seconds% - 0 bytes of 135.5 MiB (0 bytes/s)
WARNING: chunk download failed (Server returned 509 (over quota)), re-trying after 256 seconds% - 0 bytes of 135.5 MiB (0 bytes/s)

Cannot build libbf

Hello

I tried to install Pythia following the installation instructions in the ReadMe but could not succeed.

My setup is:

  • WSL Ubuntu 22.04.3
  • clang 12.0.0
  • gcc 11.4.0
  • g++ 11.4.0
  • cmake 3.22.1
  • md5sum 8.32
  • perl 5.34
  • Pythia b6313d1ce7f69e44976f331386ded6229a45aafa

The error occurred when building libbf:

cd libbf
mkdir build && cd build
cmake ../
make clean && make

The make failed: (where XXXX is my private path)

[  4%] Building CXX object CMakeFiles/libbf_static.dir/src/bitvector.cpp.o
In file included from /home/XXXX/Pythia/libbf/src/bitvector.cpp:1:
/home/XXXX/Pythia/libbf/bf/bitvector.hpp:4:10: fatal error: 'iterator' file not found
#include <iterator>
         ^~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/libbf_static.dir/build.make:76: CMakeFiles/libbf_static.dir/src/bitvector.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:902: CMakeFiles/libbf_static.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

The libbf repo is at 4c9efc1a4db7ed1ccf54cf0bd3a3641ce579206c.

Regards

Are other cache levels registered like L2 cache levels?

Many thanks for the open source code.

  1. But I see that multi.l2c_pref defines many prefetchers, such as Bingo, BOP, SPP, MLOP. But multi.l1d_pref only defines IPCP, next_line, stride. Although the papers corresponding to other prefetchers indicate that they are used in L2 or LLC, is it possible to directly move the prefetcher defined by multi.l2c_pref to multi.l1d_pref to use these prefetchers at the L1 level? Or I want to use these prefetchers at LLC level, do I just need to write a multi.llc_pref like multi.l2c_pref?

  2. I see that Bingo prefetcher is only defined in multi.l2c_pref. DPC3's open-sourced Bingo runs on the L1D cache, although it uses a large storage overhead. The bingo_l1d_thresh variable is defined in Bingo, which determines whether to prefetch to the L1 level, so does the prefetcher at the L2 level support this function?
    Can Bingo at L2 level prefetch data to L1 cache?

Really Thanks!!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.