Є добрі й погані новини.
Погана новина полягає в тому, що партком моєї кафедри вирішив, що в 2009/2010 навчальному році студенти третього курсу залишаться без курсу з оптимізації. Це повʼязано не з тим, що курс складний або нікому не потрібний. Цього року я переконався, що якщо взяти почитати методички, то середньому студентові до снаги розібратися. Найімовірніше, це повʼязано з розподілом навантаження викладачів. Тепер цей курс можна буде почути тільки на вечірніх заняттях на нашій кафедрі.
Добра новина полягає в тому, що роботи з розвитку дисциплін з оптимізації та паралельного програмування на цьому не зупиняться. Минулого року я вперше читав цей курс для студентів СКС і встиг зробити якісь слайди. Цього року до слайдів додався конспект лекцій, хоч і не повний, а також методичка з лабораторних робіт. Мені хотілося б піти далі й написати великий конспект лекцій (книгу?), який би обʼєднав дисципліни «Багатоядерне програмування» і «Вступ до оптимізації продуктивності програмного забезпечення».
Уявляю собі, що ця книга має складатися з кількох частин. Перша — вступно-мотиваційна, щоб після її прочитання не залишилося сумнівів у важливості предмета. Також у цій частині потрібно буде пояснити різні поняття паралельного програмування. Друга — архітектурна, у якій буде пояснено, за рахунок чого програми на двоядерному процесорі працюють удвічі швидше, і чому спрацьовують оптимізації послідовного коду. У третій частині розповісти про різні бібліотеки для паралельного програмування: WinAPI/POSIX, OpenMP, Intel TBB. В останній частині буде розказано про послідовні оптимізації, коли всі паралельні бібліотеки вже підключено, а швидкості роботи не вистачає.
У мене є чернетка такого конспекту. Ви можете легко її завантажити: optimization.pdf. Прошу врахувати, що це чернетка — деякі розділи не дописані, деяких розділів немає, рисунки намальовані криво, місцями немає форматування. Така собі альфа-версія. Але вже зараз із неї можна дізнатися:
-
Відмінність різних інструментів аналізу продуктивності.
-
Трохи про Intel TBB.
-
Основні проблеми роботи з памʼяттю.
-
Трохи про оптимізацію розгалужень.
-
Трансформації циклів.
-
Автоматичні оптимізації в компіляторах.
-
Вступ до OpenMP.
Таким чином, ви вже зараз можете почати ним користуватися.
Я був би дуже вдячний, якщо ви напишете ваше бачення, що має бути в такому конспекті. Також — якщо ви повідомите про помилки або незрозумілі місця в поточній версії тексту. Можливо, у вас є якісь запитання, на які немає відповідей. Цей блог зручний тим, що можна розглядати частину питань уже зараз, не чекаючи фінальної версії конспекту.
З радістю прийму будь-які коментарі тут або за адресою електронної пошти: volodymyr.obrizan@gmail.com.