The Simics® team has been busy pushing out Simics 6. Compared to Simics 5, the new version introduces significant changes to the core, as well as new features. Zooming in on the core side, the Simics scheduler more efficiently utilizes multiple host threads to speed up simulation. Doing that required changes to other parts of the simulation kernel, resulting in a Simics product with expanded support for integrating other simulators, from high-level “plant” simulators to low-level cycle-accurate simulators and register-transfer level (RTL) verification environments.
Threading and parallelism
With the new thread scheduler in Simics 6, much more parallelism is achievable in the simulator, being even more parallel than the “more parallel than ever” Simics 5. This makes it possible to run even bigger and more detailed platform models with great performance. Figure 1 below compares the different generations of Simics multithreading, as they have been added over the history of Simics:
Figure 1: Simics multithreading variants from Simics 4.0 and on
Simics 4.0 introduced multimachine accelerator, coarse-grained parallelism where different boards in a network could be run on their own threads. Previously, this required running multiple separate Simics processes. Moving everything into one process made for a much more robust solution and much higher performance.
Simics 5 added multicore accelerator, where multiple processor cores sharing memory could run in parallel. With Simics 6, multicore accelerator is still around, but the implementation has been made a lot more efficient, in particular when the simulated cores are accessing hardware devices.
Simics 6 generalizes how threads are handled, allowing more parts of the simulation to be put on their own threads and run in parallel. This can be used to improve performance by putting heavy subsystem simulators for hardware like accelerators on their own threads. Note that for this to be a benefit, the subsystem really has to spend a lot of time computing for each interaction with the rest of the system – otherwise, more time will be lost from thread management than is gained from parallelism. Even with this caveat, we have seen several cases already where this really helps speed up the simulation of complex target system models.
Simics 6 threads are also useful to program integrations with other simulators and external hardware. Since the external simulator or hardware are by definition asynchronous to the main Simics simulator threads, it is very natural to put the interaction with the outside world on a thread on its own inside of Simics. The interaction between these interface threads and the rest of the Simics simulation has been greatly simplified in Simics 6, making it easier to build efficient and correct real-world interfaces.
In Simics 6, all of these mechanisms can be combined, allowing for very sophisticated and efficient threading of a single virtual platform model running inside a single Simics process. For example, you can use threads to simulate an expensive subsystem in parallel inside a certain board, while still using multimachine simulator to run other boards in parallel.
Other news in Simics 6 includes instrumentation APIs that provide a new and much more efficient way to inspect the execution of target software and hardware. The APIs include functionality like statistics gathering, code coverage, and device register coverage. In addition, the Simics Device Modeling Language (DML) tooling has been updated, making it easier to write large and complex device models with less code and more reuse of common functionality.
I plan to cover new and improved aspects of Simics in future posts.
So what about the photo of people on the top of a mountain with a Simics flag? Not exactly a stock “happy-people” photo, but it certainly does feature happy software developers.
Evgeny Yulyugin and Igor Zdanovich on the top of the east peak of Mt Elbrus. Photo by Alexey Yulyugin.
In early July 2019, Evgeny Yulyugin, one of the Simics developers, climbed to the top Mount Elbrus in southern Russia to celebrate getting his PhD. At the summit, he unfurled a flag he brought along for the occasion showing the new Simics icon introduced with Simics 6.
On the way to Mount Elbrus. Photo by Evgeny Yulyugin.
The summit of Mount Elbrus is at more than 5,600 meters (more than 18,000 feet) altitude, making it the highest mountain peak in Europe. As you can see, the view is amazing in clear weather. To get this weather, the group started the final climb at 11:00 PM the night before from the base camp at 3800m. Mountain weather usually gets worse in the afternoon, and by climbing through the night they got nice morning weather and could get back to the base camp in time for lunch.
A fabulous way to celebrate a PhD, and thanks, Evgeny, for the amazing images!
Simics 6, A Deeper Look at how Software Uses Hardware: The new Simics 6 makes it easy for developers to investigate and quantify how software uses the programming registers of hardware devices.
Using Clear Linux* for Teaching Virtual Platforms: Moving to Clear Linux was really all about how to configure and use a modern Linux.
1000 Machines in a Simulation: How easy is it to run 1000 target machines in a single simulation? Serious hacking in 2004, simple configuration parameter in 2014.
Containerizing Wind River Simics® Virtual Platforms (Part 1): Developers can gain major benefits from using containers with Wind River* Simics* virtual platforms.
Using Wind River* Simics* with Containers (Part 2): Wind River Simics has advantages over using hardware for debugging, fault injection, pre-silicon software readiness, and more.
Dr. Jakob EngblomJ is a product management engineer for the Simics virtual platform tool, and an Intel® Software Evangelist. He got his first computer in 1983 and has been programming ever since. Professionally, his main focus has been simulation and programming tools for the past two decades. He looks at how simulation in all forms can be used to improve software and system development, from the smallest IoT nodes to the biggest servers, across the hardware-software stack from firmware up to application programs, and across the product life cycle from architecture and pre-silicon to the maintenance of shipping legacy systems. His professional interests include simulation technology, debugging, multicore and parallel systems, cybersecurity, domain-specific modeling, programming tools, computer architecture, and software testing. Jakob has more than 100 published articles and papers, and is a regular speaker at industry and academic conferences. He holds a PhD in Computer Systems from Uppsala University, Sweden.