From dc21e1191b2d9e2316bf0107bb975a115c94a644 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Thu, 26 May 2022 16:10:32 +0200 Subject: [PATCH] DRAMSys --- doc.bib | 48 +++++++++++++++++++++++++++++++++++++++ img/dramsys.pdf | Bin 0 -> 20214 bytes img/traceanalyzer.pdf | Bin 0 -> 18942 bytes inc/3.systemc.tex | 4 ++-- inc/5.dramsys.tex | 39 +++++++++++++++++++++++++++++++ inc/6.implementation.tex | 4 ++-- 6 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 img/dramsys.pdf create mode 100644 img/traceanalyzer.pdf diff --git a/doc.bib b/doc.bib index 86a1dae..4b48468 100644 --- a/doc.bib +++ b/doc.bib @@ -72,4 +72,52 @@ doi = {10.1109/SAMOS.2017.8344612}, } +@InProceedings{Steiner2020, + author = {Steiner, Lukas and Jung, Matthias and Prado, Felipe S. and Bykov, Kirill and Wehn, Norbert}, + booktitle = {Embedded Computer Systems: Architectures, Modeling, and Simulation}, + title = {DRAMSys4.0: A Fast and Cycle-Accurate SystemC/TLM-Based DRAM Simulator}, + year = {2020}, + address = {Cham}, + editor = {Orailoglu, Alex and Jung, Matthias and Reichenbach, Marc}, + pages = {110--126}, + publisher = {Springer International Publishing}, + abstract = {The simulation of DRAMs (Dynamic Random Access Memories) on system level requires highly accurate models due to their complex timing and power behavior. However, conventional cycle-accurate DRAM models often become the bottleneck for the overall simulation speed. A promising alternative are DRAM simulation models based on Transaction Level Modeling, which can be fast and accurate at the same time. In this paper we present DRAMSys4.0, which is, to the best of our knowledge, the fastest cycle-accurate open-source DRAM simulator and has a large range of functionalities. DRAMSys4.0 includes a novel simulator architecture that enables a fast adaptation to new DRAM standards using a Domain Specific Language. We present optimization techniques to achieve a high simulation speed while maintaining full temporal accuracy. Finally, we provide a detailed survey and comparison of the most prominent cycle-accurate open-source DRAM simulators with regard to their supported features, analysis capabilities and simulation speed.}, + isbn = {978-3-030-60939-9}, +} + +@Book{Jung2017, + author = {Jung, M.}, + publisher = {Technische Universit{\"a}t Kaiserslautern}, + title = {System-level Modeling, Analysis and Optimization of DRAM Memories and Controller Architectures}, + year = {2017}, + isbn = {9783959740517}, + series = {Forschungsberichte Mikroelektronik}, +} + +@Article{Binkert2011, + author = {Binkert, Nathan and Beckmann, Bradford and Black, Gabriel and Reinhardt, Steven K. and Saidi, Ali and Basu, Arkaprava and Hestness, Joel and Hower, Derek R. and Krishna, Tushar and Sardashti, Somayeh and Sen, Rathijit and Sewell, Korey and Shoaib, Muhammad and Vaish, Nilay and Hill, Mark D. and Wood, David A.}, + journal = {SIGARCH Comput. Archit. News}, + title = {The Gem5 Simulator}, + year = {2011}, + issn = {0163-5964}, + month = {aug}, + number = {2}, + volume = {39}, + abstract = {The gem5 simulation infrastructure is the merger of the best aspects of the M5 [4] and GEMS [9] simulators. M5 provides a highly configurable simulation framework, multiple ISAs, and diverse CPU models. GEMS complements these features with a detailed and exible memory system, including support for multiple cache coherence protocols and interconnect models. Currently, gem5 supports most commercial ISAs (ARM, ALPHA, MIPS, Power, SPARC, and x86), including booting Linux on three of them (ARM, ALPHA, and x86).The project is the result of the combined efforts of many academic and industrial institutions, including AMD, ARM, HP, MIPS, Princeton, MIT, and the Universities of Michigan, Texas, and Wisconsin. Over the past ten years, M5 and GEMS have been used in hundreds of publications and have been downloaded tens of thousands of times. The high level of collaboration on the gem5 project, combined with the previous success of the component parts and a liberal BSD-like license, make gem5 a valuable full-system simulation tool.}, + address = {New York, NY, USA}, + doi = {10.1145/2024716.2024718}, + issue_date = {May 2011}, + numpages = {7}, + publisher = {Association for Computing Machinery}, + url = {https://doi.org/10.1145/2024716.2024718}, +} + +@InProceedings{Jung2017a, + author = {Jung, Matthias and Kraft, Kira and Wehn, Norbert}, + booktitle = {2017 International Conference on Embedded Computer Systems: Architectures, Modeling, and Simulation (SAMOS)}, + title = {A new state model for DRAMs using Petri Nets}, + year = {2017}, + doi = {10.1109/SAMOS.2017.8344631}, +} + @Comment{jabref-meta: databaseType:bibtex;} diff --git a/img/dramsys.pdf b/img/dramsys.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f079cc065bccd7134c75746bba67b1b038f8200c GIT binary patch literal 20214 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 L*VD6e+PnV$-`lXh literal 0 HcmV?d00001 diff --git a/img/traceanalyzer.pdf b/img/traceanalyzer.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f18f16f5be21b1900317915eeff97ef82aacaffc GIT binary patch literal 18942 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