Professionals striving to work on both software and hardware will appreciate this book. C/C++ developers involved in programming for heterogeneous embedded systems will also benefit from the book’s broad overview, ranging from design problems to a fully automated approach. The book presents a hardware/software (HW/SW) abstraction in the form of the hArtes toolchain, supporting application-level mapping and profiling to provide an interesting advantage for dealing with heterogeneous platforms.
The goal of the hArtes toolchain project is to provide an end-to-end design approach for heterogeneous HW/SW platforms. The term “hArtes” stands for holistic approach to reconfigurable real-time embedded systems, and the tool is designed to aid the development of next-generation technologies. The book covers two case studies at the end of chapter 2--JPEG encoder and DRM decoder--and a few application examples in chapters 4 and 5--audio array processing for telepresence and in-car audio. There are other examples of hArtes toolchain usage throughout the book, however the book lacks a final index and a detailed initial table of contents to make them accessible.
After a brief introduction in chapter 1, the hArtes toolchain is thoroughly explained in chapter 2. The chapter is dense, with many new concepts, and readers are advised to approach it in parts. One interesting concept is code annotation in the hArtes context, which naturally extends other C annotations, such as C pragma compiler instructions and OpenMP parallel annotations. Readers used to developing using annotations should have a shorter learning curve with hArtes.
Another interesting concept is the use of an Extensible Markup Language (XML) description file to specify the target architecture heterogeneity. This description file, combined with code annotation functionalities, provides the hArtes user with a simple model for automatic parallelism in a complex environment. The abstraction of execution paths in hArtes and the use of graph analysis also provide the reader with a different perspective on parallelism in multi-core heterogeneous platforms. The book states that “compilation time is usually a little fraction of the total time spent in performing the parallelization.” This is a central statement in multi-core and heterogeneous computing, captured with magnificence throughout the book.
Chapter 3 focuses on the architecture side of the project, describing an example hardware platform. This chapter helps the reader understand the co-design process of a HW/SW embedded system. The final two chapters (6 and 7) outline extensions of the hArtes toolchain and present conclusions of the project, pointing to interesting research directions.
The shortcomings of the book are twofold. First, it is based on many research papers, making it difficult to understand as one piece. The reader sometimes loses the goal when moving through the text of different papers. Second, the book lacks a glossary section that could help decode the many acronyms used for tools, languages, and architectures. This can be an additional source of confusion for readers not familiar with all of the concepts behind the project. Shortcomings aside, this is a great book.