In compute intensive applications, maximizing the performance of limited
hardware resources will always be a fundamental challenge. Be it numerical
solution of partial differential equations or Monte Carlo integration to
compute the multidimensional definite integral of some interesting function.
Since the beginning of the computer era, technologists, programmers and
scientists have composed careful instructions to the CPU, aiming to solve ever
more challenging problems while spending less time and energy during program
execution. High Performance Computing (HPC) is the craft of spreading compute
load across several kernels, cores, and computers, and at the same time
ensuring that the hardware is operating close to peak capacity.
We have expertise in building distributed Beowulf-style clusters, and writing
numerical software that utilizes the combined compute power of supercomputers
for non-trivial parallel computing tasks, such as solving large and sparse
linear systems of equations across machines. Typically, MPI (Message Passing
Interface) is used to divide computations across machines, whereas OpenMP or
multithreading is used to facilitate shared memory computations across cores.
Since the main objective of HPC programming is to speed up computations, low
level languages like C/C++ and Fortran are generally needed. Our consultants
have years of hands-on experience in using these languages both from industry
and former academic careers. Over the years, we have developed HPC software in
order to study processes that span from water discharge in nature to the
formation of the universe.