Продолжение воспоминания о Intel Summer School (часть 3)

В 2004 году я проходил военные сборы на резервной авиабазе. Просыпаясь утром, мы с сослуживцами считали, что день уже прошел и вычеркивали его из календаря. А в летней школе я уже с первой недели сожалел, что в сутках только 24 часа.

(Начало воспоминаний о Летней школе Intel 2007 читайте в первой и второй частях).

На третий день знакомства с Дмитрием Мишурой я получил от него свое первое и основное задание. Я работал над сделкой. Суть сделки заключалась в следующем: некая организация объявляет конкурс на покупку могучего кластера для определенных задач. Далее производители кластеров пытаются подобрать оптимальную конфигурацию кластера под конкретные приложения заказчика. В свою очередь, сборщики кластеров обращаются в Интел за помощью. В сделке, над которой работал я, фигурировало четыре приложения. Время их работы надо было проверить на различных кластерах, а сами приложения заточить под конкретные процессоры. Насколько я помню, мне досталось одно приложение из этой сделки. Что конкретно не помню, что-то на C/C++ с MPI.

Но не это главное. Главное то, что сумма сделки исчислялась не в тысячах, не в десятках тысяч, а в сотнях тысяч долларов США. Представляете? И какому-то стажеру доверили такое дело. Сейчас я уже понимаю, что мои основные результаты, скорее всего, были перепроверены несколько раз. Ведь в прошлом году я уже успел побывать наставником одного летнего школьника и знаю, что за стажерами нужен глаз да глаз. Но как без этого? Как переучить приучить студента сразу после университета к серьезной работе? Ведь чаще всего студент привык выполнять только лабораторные работы, т.е. делать что-то, чтобы отстали. И наш брат не задумывается о том, что после придут люди, которые будут использовать его код в своем бизнесе. На практике иногда получается, что весь код, который сделал студент, переделывают с нуля. Ведь разбираться и переделывать подчас дороже, чем сделать все “правильно” заново. Но мы отклонились от темы.

Возвращаюсь к моей задачке. В первую очередь надо было разобраться в сборке сложного химического приложения и его запуске. А также подобрать опции компиляции, при которых производительность была наиболее высокая, но при этом результат оставался в пределах допустимой ошибки. После двух недель работы я получил так называемый Baseline. То есть время исполнения последовательных и распределенных вычислений с наиболее оптимальными ключами компиляции.

Вы подумаете: ”Ха! Две недели, что-то многовато?”. На самом деле ничего удивительного в этом нет: во-первых, приложение работало с одним набором входных параметров несколько часов. Во-вторых, сборка приложения занимала какое-то время. В-третьих, даже в Intel на кластерах постоянная очередь, - они ведь просто так не простаивают, постоянно молотят различные расчеты. Проблем зарезервировать один или два узла для своих расчетов не было, но когда дело доходило до 256 и более ядер, то оставалось надеяться на удачу, ставя задание в очередь вечером и ожидая результата утром.

Так или иначе, я получил Baseline. Далее была оптимизация приложения... В двух словах расскажу о сути. Надо было найти список наиболее часто используемых участков кода (hotspots). А потом посмотреть, как компилятор векторизует циклы в этих участках. И если у компилятора не получилось векторизовать оптимально, помочь ему различными способами. Способы эти достаточно хорошо известны, если появится интерес – укажу на некоторые мануалы по оптимизации в комментариях. К счастью, приложение было написано правильно, да и компилятор много чего оптимизировал автоматически. А я был молод и зелен, поэтому ручной оптимизацией удалось выжать немного. Но главное - полученный результат устроил как моего наставника, так и моего менеджера.

Второе и последнее задание я получил в наследство от инженера, который ушел в отпуск. Мне в наследство досталось его приложение на Фортране. Изначально это приложение было написано под PVM (Parallel Virtual Machine). Суть PVM следующая: всеми заданиями управляет сервер-узел (процесс) и все общение происходит через него. В свое время это была новая и хорошая методология, но есть нюанс: пока сервер-процесс обрабатывает результаты от клиента, клиент простаивает без задачи. Вот по этой причине PVM и ушел в прошлое, а сменил его MPI, где любые процессы независимо общаются между собой. После прихода MPI в «нашем» приложении все функции PVM заменили подобными по функциональности операциями пересылок MPI. Но профиль пересылок остался тем же: основной процесс управлял всеми другими. Скорее всего, этим занималась уже совсем другая команда разработчиков, которой не удалось (или не хватило времени) раскусить суть работы распределенного приложения. Это привело к ужасной масштабируемости приложения. Она (масштабируемость) особо не наблюдалось. Мне хватило времени только на то, чтобы разобраться в коммуникациях (какие данные кем, кому и когда пересылаются) и я передал мои результату другому инженеру – школа уже подходила к концу.

Вряд ли имеет смысл подробно останавливаться на всех тех знаниях, которые я получил во время стажировки. И так понятно, что стажер знакомится с множеством технологий, с логикой работы большой корпорации, с реальными проектами, с общими знаниями вроде подготовки и проведения презентаций, и так далее и тому подобное… Я хочу остановиться на двух моментах, которые мне больше всего запомнились и помогли в будущем.

В первый же день знакомства с нами общались, скажем так, люди, которые стояли у истоков Интел в России. Вот тогда я второй раз услышал: «Чтобы стать экспертом в чем-то, надо не раз обломать зубы о гранит. Только упорством и своим потом можно получить нужный результат». Это стало моим девизом в основных жизненных активностях. Конечно, без фанатизма :).

Вторую историю, которая меня до сих пор поражает, я услышал от Нестеренко Людмилы Всеволодовны. Во время моей стажировки в Нижнем Новгороде проходила технологическая школа для преподавателей. В рамках этого мероприятия инженеры компании Интел проводили мастер-классы для преподавателей из различных городов России. А преподаватели рассказывали о курсах, которые они разработали для студентов. Основной темой этой школы были параллельные и распределенные технологии программирования. Школа проходила в ННГУ им Н.И. Лобачевского, куда меня взяли лаборантом. В счет этого я прослушал все курсы и получил официальный сертификат ;). В это время там постоянно присутствовала Людмила Всеволодовна, и мне частенько удавалось пообщаться с ней один на один. Впрочем, мы до сих пор остаемся с ней в теплых и дружеских отношениях.

Так вот, как-то она ездила в город N с одной из ее школ и предложила все желающим студентам пообщаться с ней на темы дополнительного образования, будущего места работы, и так далее. А у Людмилы Всеволодовны есть что рассказать, вы уж мне поверьте. На встречу записались и пришли только иностранные студенты. И ни одного (!) российского студента (!!!). Я сам сейчас периодически провожу бесплатные мастер-классы для университетов. И что поражает, - посещаемость не радует. Складывается такое ощущение, что наш брат российский студент витает в облаках, совершенно не задумываясь о своем будущем и считая, что все само придет на блюдечке с голубой каемочкой. Конечно, есть исключения, но, к сожалению, они только подтверждает правило.

Не хочу заканчивать на этой грустной ноте…

Летом в Нижнем Новгороде есть чем заняться и помимо работы: вечерние и ночные прогулки по Волжской набережной, катание на велосипедах, относительно недалеко есть таинственное озеро Светлояр и Дивеевский монастырь… Да и сам город красивый! А для особ, которым не хватает адреналина, есть у летних школьников хорошая традиция: прыжок с парашютом. Да, от офиса или гостиницы до Волги пешком 20 минут.

На этом все. Всем дочитавшим – спасибо!

Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.