Performance can always be improved
Computing time and memory use are almost always a limiting factor in computational software. This makes maximum optimization of the software important. Our developers are skilled in the following aspects of optimization.
- Analyzing software
In our analysis, we determine where most of the computing time is spent or where memory use becomes the bottleneck. We sometimes use special tools and methods that we have developed over the years, as standard performance analysis tools do not always provide the information that we need. Apart from our tools, we also benefit from the fact that we’ve seen quite some software already, which helps us to quickly assess the cause of a problem.
- Speeding up the software
In many cases we can reduce the computing time significantly by reconsidering the computational methods. A smarter algorithm or a different mathematical approach can make a huge difference. In addition, the efficiency of the software can often be improved. For example by taking into account the specific hardware or by using generic libraries that have already been highly optimized.
- Reducing memory use
We can often significantly reduce memory use by carefully considering which data really needs to be in memory at any one moment and designing efficient data structures. Apart from that, a different computational approach may also reduce memory requirements or improve cache-use. Again: we’ve seen so much computationally demanding software over the years that we almost never lack inspiration for improvements.
These days, processors do not employ higher clock speeds anymore but they are still becoming more powerful in terms of vector operations and multi-core computing. Smart use of modern hardware can therefore lead to a significant performance improvement, but it often requires modification of the code. By splitting a computational problem into parts, all the available cores can be put to use effectively, which will greatly reduce throughput time. If more speed is required, GPU’s, computational clusters or cloud environments may be employed. These can sometimes leverage thousands of processors or computing cores. Programming such systems is not trivial. VORtech has this capability and can therefore also advise you on the best option.
When speeding up software it is important to be 100% sure that the functionality will not change. To safeguard the correctness of the computations, an extensive test suite is essential. Developing a good test bench for a computational code often requires a profound understanding of the underlying algorithms.
By documenting the functionality, we make sure that your own developers can still maintain and develop the improved code.
Software that performs brilliantly but cannot be maintained will quickly become a liability. We make sure that the legibility and maintainability of your software will not be compromised.