The cr.yp.to blog



2015.03.14: The death of optimizing compilers: Abstract of my tutorial at ETAPS 2015. #etaps #compilers #cpuevolution #hotspots #optimization #domainspecific #returnofthejedi

"ETAPS" [home page] [Wikipedia page] is a conference federation, the "European Joint Conferences on Theory and Practice of Software". ETAPS 2015, which combines

will be held next month in London.

I was invited to give one of two 90-minute tutorials at ETAPS 2015. I decided to speak on "The death of optimizing compilers", which perhaps wasn't exactly what the organizers wanted to hear. Coincidentally, the ETAPS 2015 web page ran out of space to hold my abstract and had to compress the abstract to one paragraph, so I'm posting the complete abstract here.

[2022.01.09 update: Updated links above.]

Abstract: In the ancient days, computers were slow, and compilers were stupid, and the software engineer's solemn duty was to manually squeeze every last cycle out of the software. Today the situation is quite different, but not in the direction one might expect.

Have computers become so fast that nobody cares about optimization any more? Certainly not: most users still spend time waiting for computers. As computation has become cheaper, users have correspondingly expanded the volume of data that they are handling, and optimization remains a critical challenge for the occasional "hot spots" in the code.

Most programmers today never touch these hot spots. The reduced cost of computation means that more and more code runs freezingly cold, freeing up more and more programmers to ignore performance. However, the hot spots still exist. This tutorial will focus on how these hot spots are handled in the real world.

Have compilers become so smart that they automatically turn clean high-level code for these hot spots into optimized code, removing the need for humans to be optimization experts? The reality, unfortunately, is very much the opposite: general-purpose "optimizing" compilers are falling farther and farther behind the actual capabilities of modern processors.

This tutorial is an introduction to (1) what current and near-future processors are capable of; (2) how modern high-speed software libraries actually work; and (3) the increasing dominance of domain-specific tools to engineer high-speed software. This tutorial is designed to be fully comprehensible to audience members who are not optimization experts.


Version: This is version 2022.01.09 of the 20150314-optimizing.html web page.