Real World Multicore Embedded Systems
A Practical Approach, Expert Guide
Bryon Moyer
Table of Contents
Cover image
Title page
Copyright
About the Editor
About the Authors
Chapter Introduction and Roadmap
Multicore is here
Scope
Who should read this book?
Organization and roadmap
A roadmap of this book
Chapter The Promise and Challenges of Concurrency
Concurrency fundamentals
Two kinds of concurrency
Dependencies
Loops and dependencies
Shared resources
Summary
Chapter Multicore Architectures
The need for multicore architectures
Multicore architecture drivers
Traditional sequential software paradigms break
Scope of multicore hardware architectures
Basic multicore hardware architecture overview
Specific multicore architecture characteristics
Processing architectures
ALU processing architectures
Lightweight processing architectures
Mediumweight processing architectures
Heavyweight processing architectures
Communication architectures
Memory architectures
Application specificity
Application-specific platform topologies
Integration of multicore systems, MPSoCs and sub-systems
Programming challenges
Application characteristics
MPSoC analysis, debug and verification
Shortcomings and solutions
MPSoC parallel programming
Parallel software and MPSoCs
Summary
References
Chapter Memory Models for Embedded Multicore Architecture
Introduction
Memory types
Memory architecture
Memory structure of multicore architecture
Cache coherency
Transactional memory
Summary
References
Chapter Design Considerations for Multicore SoC Interconnections
Introduction
Communication activity in multicore SoCs
Functional requirements and topologies of SoC traffic
Performance considerations
Interconnection networks: representation and terminology
Bus as an SoC interconnection
Fabric-oriented interconnects for larger SoCs
Building blocks of scalable interconnections
Evaluating and comparing interconnection topologies for future SoCs
A survey of interconnection networks suitable for future SoCs
Some practical considerations in designing interconnections
Summary
References
Further reading
Chapter Operating Systems in Multicore Platforms
Introduction
Symmetric multiprocessing systems and scheduling
Assymetric multiprocessor systems
Virtualization
Controlling OS behavior
Debugging a multicore system
Summary
Reference
Chapter System Virtualization in Multicore Systems
What is virtualization?
A brief retrospective
Applications of system virtualization
Hypervisor architectures
Leveraging hardware assists for virtualization
Hypervisor robustness
I/O Virtualization
Case study: power architecture virtualization and the freescale P4080
Example use cases for system virtualization
Conclusion
References
Chapter Communication and Synchronization Libraries
Introduction
Library overview and basics
Explicit threading libraries
OpenMP
Threading Building Blocks
Boost Threads
MCAPI
Conclusion
References
Chapter Programming Languages
Programming languages for multicore embedded systems
C
Assembly language
C++
Java
Python
Ada
Summary
References
Chapter Tools
Introduction
Real-Time operating systems (RTOS)
Communication tools
Parallelizing serial software tools
Software development and debug tools
Benchmarking tools
Conclusion
Acknowledgments
Chapter Partitioning Programs for Multicore Systems
Introduction
What level of parallelism?
The basic cost of partitioning
A high-level partitioning algorithm
The central role of dependencies
Critical sections
Synchronizing data
Implementing a partitioning strategy
Using tools to simplify partitioning
Summary
References
Chapter Software Synchronization
Introduction
Why is synchronization required?
Problems with not synchronizing (or synchronizing badly)
Testing for proper synchronization
How is synchronization achieved?
Specific conditions requiring synchronization
Language support for implementation
Patterns
Side-effects of synchronization
Hardware and OS effects on synchronization
Problems when trying to implement synchronization
References
Chapter Hardware Accelerators
Introduction
Architectural considerations
The interface: registers, drivers, APIs, and ISRs
Initialization
Operating system considerations
Coherency
Making the architectural decisions
Video example
Summary
Chapter Multicore Synchronization Hardware
Chapter overview
Instruction set support for synchronization
Hardware support for synchronization
Hardware support for lock-free programming
Memory subsystem considerations
Conclusions
References
Chapter Bare-Metal Systems
Introduction
Architectural arrangements
Software architecture
Building the executable image(s)
Example: IPv4 forwarding
Conclusion
Reference
Chapter Multicore Debug
Introduction why debug instrumentation
Background silicon debug and capabilities
Trace methods for multicore debug analysis
Debug flows and subsystems
Commercial approaches
The future of multicore debug
References
Further reading
Index
Copyright
Newnes is an imprint of Elsevier
The Boulevard, Langford Lane, Kidlington, Oxford, OX5 1GB, UK
Wyman Street, Waltham, MA 02451, USA
First published 2013
Copyright 2013 Elsevier Inc. All rights reserved
No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or any information storage and retrieval system, without permission in writing from the publisher. Details on how to seek permission, further information about the Publishers permissions policies and our arrangement with organizations such as the Copyright Clearance Center and the Copyright Licensing Agency, can be found at our website: www.elsevier.com/permissions