Concurrency Will Kill You!
I had several interesting conversations with editors recently on concurrency in hardware and software development. One of the discussion was with Brian Bailey as part of his article “How To Handle Concurrency”. Brian also talked to the Synopsys ARC team, Netspeed Systems, Kurt Shuler at Arteris, Drew Wingard at Sonics, my former boss Simon Davidmann at Imperas and OneSpin solutions. Ann Mutchler wrote an equally great piece “Dealing With Deadlocks”, and besides Netspeed Systems and me, she also talked to Harry Foster at Mentor and Zibi Zalewski at Aldec.
Both articles are very interesting reads!
To summarize my view - naturally focused on the verification side - I think three levels of tooling are needed:
First, solid execution tools in simulation, emulation, FPGA based prototyping and formal are needed, combined with solid debug of that hardware and software together. That’s where Cadence’s Verification Suite plays – we can cycle accurately co-debug the state of software on the processors with the hardware it’s interacting with.
Second, proper tests to tickle out the concurrency are needed. That’s where the Accelera Portable Stimulus and Cadence’s Perspec play for automation of the creation of the tests.
Third, especially for software, you want to avoid the potential concurrency issues completely by shielding the programming from the hardware so that by design nothing can go wrong. That leads back into the area of programming models – OpenMP, OpenCL but also environments like CUDA etc. play here.
So Concurrency can kill you, bit our tools help you to avoid that :)
What do yo think?
Disclaimer: The concurrency-illustration above is taking while the car is standing. My daughter had a hard time keeping the camera still as she was cracking up J