Software Engineering for Multicore and HPC
Enabling application innovation, supporting users
HPC software engineering is the practice of enhancing software to enable it to perform better on modern multicore processors, GPUs, HPC clusters and supercomputers. This includes optimizing the use of algorithms and parallel software techniques to make the code more scalable; making the software implementation more robust (correctness) and portable in the face of the diversity of HPC technologies available; and tuning to get the fastest performance from a given system.
Results come from your software applications ...
Multicore technology is becoming the default for scientific and numerical computing. Your software won't achieve the performance potential of the multiple cores unless it is optimized for such architectures. In fact, applications that are not optimized for multicore hardware may even run slower on multicore systems than on older technology, as the serial performance of individual cores may be less and there is increased contention for system resources such as memory bandwidth. As the computer industry looks to deliver more cores, more parallelism and more diverse processing capabilities, rather than higher clock rates, investing in the wider aspects of productivity - people and software - can now be the critical differentiator for a user of technical computing, rather than the traditional budget focus on hardware.
"... it is not only the raw compute performance at your disposal that counts but, more importantly, how well you are able to make use of that performance for your business objectives. In other words: how productive is it? "
Is supercomputing just about performance?, ZDNet UK, Oct 2008
Applications tend to live much longer than any hardware, so the return on investment from a major software development continues to deliver over many years, not just the typical shorter lifetime of a hardware deployment. NAG HPC Consulting is available to help, with our experience of the parallel programming technologies and methods of high performance computing.
NAG can help ...
NAG can help you to port your software to multicore processors and related technologies (e.g. GPUs and clusters). NAG parallel programming experts work with you to refactor your software to achieve increased performance on modern multicore processors. NAG can introduce parallel processing into your applications using appropriate standards and languages, including OpenMP, CUDA,MPI and others. If your software is already parallelized, NAG can optimize the algorithms and implementations to get the best utilization of resources, whether extra processor cores, memory bandwidth or inter-processor communications. NAG experts can optimize your software to scale from a few cores to thousands of cores on the latest clusters and supercomputers. NAG also supports a holistic approach to high performance software, ensuring that algorithms used are appropriate and implementations are robust, establishing confidence in the results of the applications. By enhancing your software to take advantage of the latest parallel computing technology - from multicore processors to supercomputers - you ensure that your domain expertize is supported by the most capable technical computing to deliver the best results.
Contact NAG today to ensure high performance in your computing.
Faster, Better, Cheaper, ...
Reduce your time to solution. Complete more simulations in a given time. Run a larger model or a longer model timespan or a finer resolution. Include more complex (and potentially) accurate representations of the physical phenomena. Explore a wider parameter space and more statistical variations. You can gain these benefits by efficiently scaling and optimizing your application to use more computational resources - more processors, more memory, etc. Enhancing your application to include robustness features and portability can enable you to use a wider range of HPC systems - including potentially more cost effective solutions. HPC software engineering delivers faster, better, cheaper.