VIA-Research / uPIMulator

MIT License
96 stars 14 forks source link

πŸ“– Introduction

Welcome to the uPIMulator Framework Documentation!

This documentation serves as your comprehensive guide to the uPIMulator framework, catering to both novice and experienced researchers. Here, you'll find the resources necessary to leverage uPIMulator effectively for your research projects.

We provide in-depth coverage of uPIMulator's features, from foundational concepts to advanced functionalities. Explore this documentation to unlock the full potential of uPIMulator and elevate your research endeavors.

πŸ€™Β Contact Information

πŸ“ Address

KAIST, School of Electrical Engineering

Vertically Integrated Architecture Research Group

Office: N1 818 @ KAIST

πŸ“§ Email

Please feel free to reach out to us if you have any questions or require further assistance.

πŸ§‘β€πŸ’» Released Versions

uPIMulator: A Flexible and Scalable Simulation Framework for General-Purpose Processing-In-Memory (PIM) Architectures

uPIMulator is a cycle-level performance simulator tailored for general-purpose Processing-In-Memory (PIM) systems adhering to the UPMEM Instruction Set Architecture (ISA). This tool provides a detailed simulation environment, empowering computer architecture researchers and PIM program developers to investigate and harness the capabilities of PIM technology.

For comprehensive insights into uPIMulator and its applications, we invite you to refer to our HPCA-2024 publication:

"Pathfinding Future PIM Architectures by Demystifying a Commercial PIM Technology", HPCA, 2024

Currently Available Versions are:

  1. Python & C++ version
  2. Go version
  3. Go & virtual machine version

All source code and version history can be accessed in our GitHub repository.

The Python & C++ Version

This was our initial implementation of uPIMulator, used in our HPCA-2024 publication. You'll find it in the python_cpp directory. Refer to the included README for usage instructions.

The Go Version

Our second implementation, optimized for speed and memory efficiency. Located in the golang directory, it offers an 8.5x speed increase and 7.5x memory reduction due to multi-threading. We generally recommend this version for most use cases. See the README for details.

The Go & Virtual Machine Version

This latest version extends the Go version with virtual machine capabilities, eliminating the need for manual data preparation code in many scenarios. It's particularly suitable for complex or dynamic benchmarks where manual data preparation is challenging, though it may not offer the fastest simuation speed. Refer to the README for further guidance.

πŸ” Validation Against the Real UPMEM-PIM Hardware

Single DPU

Multiple DPUs

Scenario Total Data Points Correlation (RΒ²) MAE
Single DPU (no inter-DPU communication) 710 98.4% 12.0%
Multi-DPU (with inter-DPU communication) 387 83.6% 26.9%

List of Supported Instructions

πŸͺ¨ Materials

🎁 Contributions

We welcome and encourage contributions to uPIMulator! If you are interested in contributing or have questions, please feel free to open an issue or submit a pull request.

List of Maintainers

List of Contributors

πŸͺ¨ Materials

πŸ™ Acknowledgement

We would like to thank the developers of the PrIM benchmark suite, which was instrumental in developing this project.

This research is funded by the generous support from the following organizations:

We appreciate their commitment to advancing research in this field.

πŸ“” Citation

Bongjoon Hyun, Taehun Kim, Dongjae Lee, and Minsoo Rhu, "Pathfinding Future PIM Architectures by Demystifying a Commercial PIM Technology", IEEE International Symposium on High-Performance Computer Architecture (HPCA), March 2024.