There is good news and bad news.

The bad news is that the party committee of my department has decided that in the 2009/2010 academic year, third-year students will be left without a course on optimization. This is not because the course is difficult or useless to anyone. This year I became convinced that if you sit down and read the handouts, the average student can figure it out. Most likely, this has to do with the distribution of teaching loads. Now this course will be available only in evening classes at our department.

The good news is that the work on developing the disciplines of optimization and parallel programming will not stop there. Last year I taught this course for SCS students for the first time and managed to put together some slides. This year the slides were joined by lecture notes, though incomplete ones, as well as a lab manual. I’d like to go further and write a large set of lecture notes (a book?) that would combine the disciplines “Multicore Programming” and “Introduction to Software Performance Optimization.”

I imagine this book should consist of several parts. The first is introductory and motivational, so that after reading it there are no doubts left about the importance of the subject. This part will also need to explain various concepts of parallel programming. The second is architectural, explaining what makes programs on a dual-core processor run twice as fast, and why sequential-code optimizations work. In the third part, cover various libraries for parallel programming: WinAPI/POSIX, OpenMP, Intel TBB. The last part will discuss sequential optimizations, when all the parallel libraries have already been enabled and the program still isn’t fast enough.

I have a draft of such notes. You can easily download it: optimization.pdf. Please keep in mind that this is a draft — some chapters are unfinished, some chapters are missing, the figures are drawn crookedly, and formatting is missing in places. A sort of alpha version. But even now you can learn from it:

  1. The differences between various performance analysis tools.

  2. A bit about Intel TBB.

  3. The main problems of working with memory.

  4. A bit about branch optimization.

  5. Loop transformations.

  6. Automatic optimizations in compilers.

  7. Introduction to OpenMP.

Thus, you can already start using it.

I would be very grateful if you wrote your view of what should be in such a set of notes. Also, if you point out errors or unclear passages in the current version of the text. Perhaps you have some questions that have no answers. This blog is convenient in that some of the questions can be considered already, without waiting for the final version of the notes.

I’ll gladly accept any comments here or by email at: volodymyr.obrizan@gmail.com.