Developing embedded devices is becoming more and more complex as sensing, compute, memory and communications technologies rapidly evolve. Here, I’ll highlight some of the challenges of software development for devices, as teams cope with shrinking timelines, scarce resources, and rigorous requirements for quality and performance optimization.
In case you feel a bit overwhelmed, rest assured there is a solution with the strength of Intel’s edge-to-cloud ecosystem behind it. More on that, later.
Complexity is a Double-Edged Sword
It seems only yesterday when I was spending hours writing assembly code on Intel 8051 board to make a rudimentary device blink its lights. When I started using compilers, it seemed for a while that all fun was lost. But I could still type long command line statements. Then came Integrated Development Environments (IDEs) and I had to get comfortable with few easy clicks of edit-compile-debug and extremely visual workflows. Reflecting back, it seems I derived pleasure in building my device one brick at a time, being in full control at all times on every line of software. Fast forward, in less than 10 years, I had to give up my urge to understand and hand optimize every aspect of my code.
Today, it has been replaced with – OMG, how am I going to ever understand and optimize a million-plus lines of code, running on multiple cores using multiple threads, across an interconnected mesh of devices. The fact that more than 95 percent of the code was written by hundreds of unknown entities, frankly, scares me. Thankfully, my device is providing far more useful value than just blinking LEDs.
I am sure, your experience as a software developer must be no different. Like death and taxes, fundamentals of software development and your compensation (adjusted for inflation) have practically remained the same. On the commercial front, more intelligent devices with higher software complexity do not necessary command a higher price in market. Consequently software development is under tremendous pressure to deliver value within time, budget and quality constraints.
Three Pressures Squeezing Developers
Three things have to come together for any development effort to succeed: timelines; optimization; and resources. This is true for any modern industrial product. However software development is uniquely different from most manufacturing. It is a perfect blend of art and science in what ultimately gets produced. Unlike a typical manufacturing line stamping out car parts, every software program developed is unique and in many ways, a reflection of you as the developer. While very satisfying, there is always the opportunity to optimize your software—and nearly always, multiple opportunities to find bugs. When dealing with a very large code base and multi-featured hardware, it becomes a challenge to deliver quality software within time constraints, limited resources, and software that is optimized for quality and performance.
Most commercial companies have to constantly catch up with technology and market innovations, maintain price points and deal with intense competition. It is no surprise that most development teams are under constant pressure from squeezed timelines, limited resources and rigorous optimization requirements. Despite all that, developers are still expected to produce bug-free, high-performance code. If the developer team struggles with even one of those pressures, it impacts overall output and puts the product at risk.
Mitigating the Pressures on Development
If this resonates with your situation and project, you can mitigate these pressures by selecting the right set of tools for your project. Tools are your virtual team members, doing all the work that you don’t want to do. To select the most optimum tools, I recommend a three prong strategy
- Prefer adoption over assembling, or even building your own
- Ensure that you have covered every stage of your development
- Choice of tools should be future proof
Every development team has to struggle with “build vs. adopt” decisions for their project. However for development tools, it is generally not a good idea to spend precious time, resources and mindshare in building your own tools. Building your own tools is only half the effort. To maintain them over a long period of time with constantly changing technologies becomes very expensive. A simple rule of thumb is, “If your effort does not add any unique value to your end product that can be monetized, let someone else do it for you.”
When making tool decisions, review each section, and stage of your development. Ensure that you have tools that cover the needs of developers working on every development stage. It takes a team effort to produce a complex software project, and you want to optimize every stage, avoiding weak links in the process.
The one strategy that I would pay most attention to is reviewing that your development tools are future proof. Technology evolution and market demands never cease. For example, new processors come out with new features, and you want to take advantage of them as soon as possible in compilers, debuggers and libraries.
Innovation Today and in the Future
While I miss the happiness I used to get by blinking LEDs by writing to registers, I think it is a golden period for software developers. Software development, especially for embedded devices, is very complex, but tools like Intel® System Studio are specifically designed, and constantly updated, to help address the complexity.
Get started now with a free download of Intel System Studio 2018. You get a 90-day renewable commercial license with community support, and there is no cost, ever. The solutions that can be applied and optimized by this tool suite include digital security and surveillance, 5G, networking, industrial, data storage, healthcare, retail, smart homes/cities/buildings, automotive, and office automation.
In future blogs, I will drill-down into the details of device and IoT solutions developed with Intel System Studio 2018. You will learn how device manufacturers experience shorter development and validation cycles, system integrators optimize software stacks faster, and IoT application developers efficiently deliver new capabilities with access to cloud connectors and sensors for edge-to-cloud solutions.
About the Author
Dinyar Dastoor heads up the Intel System Studio business. Before joining the Intel Software & Services Group in June 2017, he was VP and General Manager at Wind River (an Intel company). With over 25 years of management experience in embedded, control and IoT products, Dinyar has built and led global teams in R&D, systems design & deployment, product management, sales, marketing and customer support.
The Pressures of Timelines, Resources and Optimization
Developers need tools that help them rapidly move from prototype to production while supporting the newest platforms and operating systems. That’s where Intel® System Studio 2018 comes in. It’s a free, compressive tool suite that helps developers build in better performance with expert compiler and library optimizations. It makes it easier to isolate complex defects with debug and trace capabilities, and enhanced analyzers let developers improve performance and power efficiency.
Timelines: faster, higher-quality development
High-performance, production-quality routines can shorten product development time. Intel System Studio 2018 includes Intel® Integrated Performance Primitives, the Intel® Math Kernel Library, and the Intel® Data Analytics Acceleration Library.
With its Intel® System Debugger, Intel System Studio lets developers capture and view logs with time-stamped and correlated trace information for software, firmware, and hardware components. Developers can analyze complex interactions between software and hardware to make products more robust.
Resources: edge-to-cloud connectivity
Developers of smart-connected devices need to reuse code and applications in the face of evolving sensor technologies and cloud services. To ensure edge-to-cloud compatibility and performance, developers using Intel System Studio 2018 can quickly convert ideas into reality with IoT connection tools that abstract the complexities of connecting the sensor to the device and the device to the cloud. Components include standardized, open-sourced abstraction libraries and sensor libraries to innovate IoT applications faster with access to advanced cloud connectors and 400+ sensors.
Optimization: faster operation
To quickly achieve extra performance, developers need to understand hotspots, monitor call counts, annotate source code, and graph activities. Doing so provides performance insights into CPU and GPU performance, threading performance and scalability, bandwidth, caching, and more. And as they support the latest Intel® platforms, developers can boost performance and efficiency by using the Intel System Studio 2018 suite’s Intel® VTune™ Amplifier, together with the suite’s code optimizations for capabilities such as Intel® AVX-512 instructions.
# # #
Intel’s compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
For more information, see our Optimization Notice. software.intel.com/articles/optimization-notice#opt
Copyright © 2018, Intel Corporation. All rights reserved. Intel, the Intel logo, Intel Inside, Intel Atom, Intel Core, Intel Iris, Intel Quark, Intel VTune, and Intel Xeon are trademarks of Intel Corporation in the U.S. and/or other countries.
*Other names and brands may be claimed as the property of others.