Optimization has many aspects
Our scientific software engineers are skilled in all aspects of optimization. Here is an overview of the various aspects what we address.
In our analysis, we determine where most of the computing time is spent or where memory use becomes the bottleneck. To do this, 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 these special 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.
We can often 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.
There is typically much to win in terms of memory use by carefully considering which data really needs to be in memory at any one moment and designing efficient data structures. Apart from this kind of optimization, 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 become faster through a higher clock speed. 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 the solution. These can sometimes leverage thousands of processors or computing cores. Programming such systems is not trivial. VORtech has extensive knowledge and experience in High Performance Computing (HPC).
When speeding up software it is important to be 100% sure that the functionality will not change. Therefore, an extensive test suite is essential to check the correctness of the code. Developing a good test suite for a computational code often requires a profound understanding of both the underlying algorithms and the application. Building the test suite is therefore usually a joint effort for our developers and the experts at the client.
Fit for mainteance and porting
By documenting the functionality, we make sure that your own developers can still maintain and further 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.