What makes high-performance computing (HPC) actually high-performing? Besides the (probably most frequently mentioned) large-scale computational problems and the resulting need for large-scale computing infrastructure, it is, or should be, definitely the permanent striving for efficiency at all levels, in order to obtain the high performance desired. Here, both performance and efficiency can have completely different meanings: the classical complexity-driven one (O(NlogN) being worse than O(N)); the node-level one (80% of the peak performance being considered as fabulous); the parallel / scalability one (going for a good exploitation of massively parallel systems); the energy-driven one (looking for “cool” algorithms to prevent the need for power stations); the communication-avoiding one (taking into account the relatively increasing communication cost – some say “Flops are free”); or an emphasis on time-to-solution (focusing on “when do I have the result?” – typically the crucial issue for those you want to get their problems solved, i.e. computed). Although all this is of general and fundamental informatics relevance, the discussion is most vivid in the HPC community and less developed in a data context.
As often, finding the proper balance is the key: Neither a perfect implementation of a lousy algorithm nor a lousy implementation of a perfect algorithm exploit the potential. Nevertheless, this is what we frequently see. Algorithm and performance engineering have emerged as sub-fields (partially) dealing with performance and efficiency issues and addressing these questions – crucial for HPC and crucial for a more HPC-using data science.
The talk will discuss these topics, depicting problems and success stories.