If you fail to deliver your software on time due to performance problems, this is the right place to be. We offer consulting services in the domain of C and C++ development. Use the contact form to contact us. We will answer as fast as possible.
Fast help with performance issues
Your software is slow and you need fast help to make it run at an acceptable speed? We offer consulting services, where we inspect the source code you provide to find performance problems and help you fix them, quickly and reliably. This can save you months of engineering time or project cancelation. We have experience in performance optimizations in the domains of High-Performance development, application development, and embedded development in C and C++.
To contact us, use the contact form.
What kind of problems do we solve?
Performance problems can appear on several levels. For example, the performance of the system can suffer because the components of the systems are “chatty”, i.e. they are exchanging too much information which introduces delays. This kind of performance issue is a software architectural issue, and solving it requires several teams to cooperate and modify the API to decrease chatting. We don’t solve performance problems that are due to architectural issues. This kind of problem requires domain knowledge and can take a lot of time to do.
Another type of performance problem can be solved only with domain knowledge. For example, a slow machine learning model can be made faster by simplifying it. This kind of performance optimizations again requires domain knowledge and we don’t give recommendations that are specific to the domain.
The type of problems that we do solve is related to performance issues that arise due to bad usage of hardware resources, wrong or too generic data structures, bad usage of STL library, bad usage of the language and similar. These are typically domain-free, and we have great expertise in solving this type of problems.
How does consulting work?
The consulting services are limited in time to 2-10 workdays and work like this:
- Before starting, you will need to create build instructions, run instructions and a repro that reproduces easily the problem you are facing. You also want to create some way of verifying that the modified code doesn’t introduce bugs or unacceptible imprecisions.
- Ideally, you want to build the problematic code under Linux for X86-64 architecture, since most debugging tools are available for this environment. However, we accomodate other operating systems (notabily Windows and Android) and other architectures (notabily ARM).
- We take your program and analyze it. The analysis typically takes one to two days, where we try to establish what is the problem and what are the possible ways of fixing it. Sometimes, we fix issues during the analysis phase. Other times, in the analysis phase we determine that the problem is already optimized enough and that additional effors would probably not yield improvements.
- After the analysis phase, we move on to debugging phase. The client doesn’t have to contine with the debugging phase if they don’t wish to.
- In the debugging phase we try out several different solutions to the problem. We use tools like debuggers, regular profilers, hardware profilers, data analysis tools, etc. to understand what could be the problem and what is the best solution.
- The debugging phase is also limited in time, typically 3 to 7 working days.
- As the output of the debugging phase, you get a prototype of a program that is faster than the original. The amount of speedup is very dependent on the problem; some problems can be made order of the magniture faster, others 2-3 times faster. Some problems are difficult to optimize and the gains can be low (e.g. 1.2 faster).
In case you have questions related to performance and you wish to talk to an expert, we offer that as well. For example, if you are designing a performance-critical piece of code and you need somebody to do the code review with special emphasis on reviewing performance. We charge by the hour, our prices are available on demand.
For those teams where performance is important we offer training sessions, both on-site and online. The object of the training is to teach developers techniques for writing fast code and debugging performance problems. The courses are tailored to the team’s needs. For example, a team that works in the telecommunication domain will get a training that focuses on vectorization and techniques to extract the maximum performance from the compiler. Another team that does development for financial software will be trained to write efficient C++ code.