We humans can survive in almost every environment on our planet and are beginning to step off it. We command fire hotter than the core of a star and freeze atoms at temperatures cooler than the depths of interstellar space. Not bad for squishy sacks of mostly water...
We can do all this because we love tools - we make them, we use them; they complete us.At Arm we spend all day, every day, crafting ever-better tools - in particular tools for working in the virtual environment inside computers. Our favourite ones are Arm DDT, for finding and fixing problems on everything from a mobile ARM processor up to a 225,000 core supercomputer, and Allinea MAP, for effortlessly measuring and improving performance.
This week, we released Arm DDT 3.1, the culmination of ten years of learning about and creating tools for parallel debugging.
Those ten years have taught us that not all tools are equal; the hallmark of a good tool is how it feels in your hands. Reliable. Solid. Well-balanced. Intuitive. The right tool for the job doesn’t try to engage you in a conversation, it fits into your grasp and extends your capabilities effortlessly.
We’re not all the way there yet, but each release takes us another few steps towards this holy grail. To see what we mean, take three of the changes we’ve brought in with Arm DDT 3.1 to make it a better, more intuitive tool:
The best interface is one you never have have to use - instead of this:
$ mpiexec -np 1024 my-program arg1 arg2
Just write this:
$ ddt -offline output.html -np 1024 my-program arg1 arg2
Starting in Arm DDT 3.1, we’ve added an offline mode that bypasses our interactive, graphical interface entirely. Any errors will be automatically collected, aggregated and presented in a beautiful html report when the job is done. All of Arm DDT’s features are present - memory debugging, parallel crash stack traces, parallel variable comaprisons - without ever needing to use them directly.
We didn’t stop there; we also took on the task of parallelizing and scaling print statements - instead of editing your source code to print the values of, say, i and xarr(4,0) and recompiling, just run your program like this:
$ ddt -offline log.html -trace-at 'hello.f90:49,tag,someints(tag)' -np 10 ./hello
Arm DDT adds a virtual print statement at line 49 of hello.f90 and gathers the values of tag and someints(tag) every time it is hit. Better than that, it does this across all the processes in the program and compares their values for you:
For many classes of bug, this is exactly what you need - especially if the alternative is waiting a week for a full-cluster interactive debugging slot!
Those little comparison charts - sparklines - are now automatically calculated for every variable you see in Arm DDT’s graphical interface, too:
Of course, you can still click on any variable to pull up a list of by-value groupings and drill down to individual processes and threads.
This idea that a tool should constantly provide subtle, unobtrusive feedback was also the driver behind adding static code analysis to Arm DDT:
Any code you look at in Arm DDT is automatically checked with an appropriate static analysis tool and the warnings or errors seamlessly integrated into your view of the source code. There’s nothing to configure or learn, it just works - always and everywhere.
The best tools can be used in almost any environment, and we’ve been busy building out Arm DDT’s support for more and more programming paradigms including UPC and co-array Fortran.
We’ll unpack these and many more features over the coming weeks, including the new GPU activity displays and more details on getting the most out of Arm DDT’s new offline mode. Stay tuned and tool up!
Download Arm DDTGet a free trial of Arm DDT