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.
KAIST, School of Electrical Engineering
Vertically Integrated Architecture Research Group
Office: N1 818 @ KAIST
Please feel free to reach out to us if you have any questions or require further assistance.
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:
All source code and version history can be accessed in our GitHub repository.
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.
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.
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.
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% |
uPIMulator currently supports 599 out of the 970 instructions defined in the UPMEM-PIM ISA. Due to limitations in the publicly available ISA documentation, support for the remaining 371 instructions is pending. However, the currently supported instructions have been sufficient to enable functionally correct simulations of the PrIM benchmark suite, producing results consistent with those obtained on real UPMEM-PIM hardware.
For a detailed list of the currently supported instructions, please refer to this Google spreadsheet.
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.
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.
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.