Computing

System architecture

Kalkulo's developers have long and well-tested experience in creating and maintaining advanced software solutions. This experience is built not only from the projects conducted in Kalkulo, but in most cases also from previous work in other software companies. We strive to develop systems that are robust and easily maintainable, while still being extensible. We build systems based on design choices that favor simplicity and bring value to the customer. When attacking a new problem, we select the best tools for the job, meaning that we are not a priori locked into certain programming languages or programming environments. In addition to actually designing and building your new system, we can act as a third-party advisor and discussion partner.

 

Code optimization

When solving complicated computational problems, it is not sufficient to implement a code that computes the correct answers. The answers often need to be computed as fast as technically possible, given the constraints of your hardware. In order to optimize computing-intensive codes, there are two major dimensions to take into considerations. First, are you using the optimal algorithms for your problem? This assessment requires deep knowledge of numerical methods and understanding of recent advances in the field. Secondly, provided that you have settled for the right solution strategy, is it implemented in such a way that it fully exploits your hardware? Such considerations requires insight in computer architectures, not only concerning the processors but also memory hierarchies, I/O devices, etc. Another delicate aspect is that the introduction of code optimizations must be carefully balanced towards maximising the robustness, accuracy, extensibility, and portability of your software. 

At Kalkulo, we are not only making sure that our software performs well, we can also assist you in assessing and optimizing your own software. Previous cases have shown several ten-folds improvement of computing speed after carefully introducing code optimizations in external code. 

 

GPU programming

Graphical processing units (GPUs) were originally designed for speeding up computer graphics and data visualization. However, GPUs have also turned into being very powerful, vector-oriented processors for more general computations, and are now heavily used in modern supercomputers. While being more tricky to program than the traditional sequential CPUs, the computational speed of your application can increase tremendously, even on your laptop. By their special design, GPUs are particularly well suited for large-scale machine learning jobs.

At Kalkulo, we use GPU computations in several of the software solutions that we develop for our clients. Previous work on external seismic codes that we have migrated from CPUs to GPUs has shown speed-up of more than 100 times. Please contact us to discuss the advantages of moving your software to the GPU.

 

High performance computing - even in the cloud

For maximum performance, really heavy computations are often done on dedicated supercomputers or virtual supercomputers offered as cloud services. Several of our developers have long experience with parallel computing on local clusters and dedicated HPC systems. Moreover, we have for several years assisted Schlumberger in the development of system software for one of their cloud solutions, and we are using commercial cloud solutions like AWS and Azure in projects for our clients.

 

Do you need your code to behave better and run faster? Please feel free to contact us to discuss how to make the right choices for your software. 

> Projects