Optimizing software for speed and size
Shipping a bug-free application is just half of the story. The other half is getting the software running fast and memory resources efficient, especially when the deployment target is mobile platforms. Modern hardware is multi-core and memory abundant. But a lot of software doesn’t take advantage of concurrent programming models. The memory consumption is also still a bottleneck, even though today’s average mobile device comes with at least 2GB RAM, because less and less software is developed with efficiency in mind, especially when the memory management is abstracted from the developer by a virtual machine. Multi-core programming is hard and time-consuming. Many startup projects avoid it in order to meet tough deadlines. It is common to see companies getting worried about performance shortly after the initial release as no proper attention was dedicated to this topic during the development phase. We provide performance optimization services which include:
- parallelization of serially-executed code on CPU
- runtime memory usage optimization
- performance-critical sections optimization using vector processing (SIMD).
Optimizing OpenGL code.
Today it is not uncommon to see OpenGL applications still being written with old OpenGL API (also called fixed pipeline). Fixed pipeline can still be acceptable in terms of performance if the application draws a small amount of geometry issuing just a few draw calls. Yet, when it comes to huge loads of graphics with hundreds or thousands of drawing commands issued in every frame, the old OpenGL API falls short of supplying the required performance. Moreover, many of the modern rendering techniques rely solely on programmable hardware using shader programs. Many of the breathtaking visual effects require a whole lot of processing power, as well as the implementation of custom rendering algorithms to run on GPU, and therefore are impossible to achieve using highly inflexible pipeline (hence why it is called ‘fixed’ pipeline!).
We have years of industrial experience in design and development of modern OpenGL-based rendering systems, as well as porting the old OpenGL programs to use the latest graphics APIs. In most cases the result is a boost of performance by several hundred per cent.