Synthesizing parallel designs from sequential C++ - part 1
Blog Post
Posted Jul 14, 2009
by Thomas Bollaert
Follow on Twitter
Go URL
What is a Go URL?It is a fact of life; preconceived ideas tend to live long. But in a rational and scientific domain such as electronic design, it really feels wrong when false statements are repeatedly asserted by engineers themselves.
In EDA, and more specifically in the field of C synthesis, a commonly spread idea is that it is impossible to synthesize parallel hardware designs from sequential C++. The corollary of this thought is that explicit description of concurrency is required in the synthesized source code.
“C++ is inherently sequential. You do A, then B, then C. You can’t get parallel hardware from this”.
At first sight, the strong semantic opposition between “sequential” and “parallel” makes this a tempting proposition to fall for. Luckily this idea doesn’t resist closer examination and proves to be another myth that needs to be busted ! In follow-on posts, I will explain how spatial and temporal parallelism can be extracted from pure C++ to build efficient concurrent hardware.
Preparing RecommendationsBut before diving into the technical details, I would just like to point out that for the past 5 years, hundreds of users worldwide have been using Catapult C to synthesize production quality RTL from pure C++. Needless to say that the resulting RTL featured all the needed parallelism.
In a recent ESNUG post (ESNUG 481 Item 7), Slumdog Millionaire explained how he was able to implement a 3GPP-like turbo decoder with Catapult C, starting from pure C++. Turbo decoding requires extensive concurrency to meet high performance requirements. Not only was Slumdog Millionaire able to get the required parallelism from sequential C++, but he was also able to get to verified RTL 60% faster than with manual methods.
So yes, and once and for all, it is possible to synthesize parallel designs from sequential C++.
And if you haven’t fully checked it out yet, be sure to browse our new Catapult C web site at http://www.mentor.com/products/esl/catapult-c. The three online demos might provide additional inspiration on what high-level synthesis from C++ can do for you.
More Blog Posts
Preparing RecommendationsRecent Posts
- Mentor ESL in TSMC Reference Flow 12
- 48th DAC - Gary’s Magic Formula
- DAC: 9th ESL Symposium
- HLS Fundamentals / Part 2
- HLS Fundamentals: Loop Unrolling and Loop Pipelining
- HLS Contest: And the winner is...
- A Designer’s Perspective on ESL Methodologies for an OFDM Modem Design
- Catapult C and the 7 Samuraïs
- The Why, What and How of HLS @ DATE 2011
- DVCon: Wally Rhine's Keynote
Comments (↓ Add Your Own)
4 Comments on this Post
Commented on 9:47 PM, Jul 15, 2009
By “This one is right on target” « Thomas Bollaert’s Blog
Commented on 3:21 AM, Jul 16, 2009
By Krishna
Commented on 7:14 PM, Jul 16, 2009
By Thomas Bollaert
Commented on 6:50 AM, Aug 10, 2009
By Synthesizing parallel designs from sequential C++ - part 3 « Thomas Bollaert’s Blog
Add Your Comment
Please complete the following information to comment or sign in.