| 29.08.2010 10:00 | |
Автор: Ведерников Сергей Александрович, студент 5-го курса факультета Информационных Технологий НИЯУ МИФИ СарФТИ
Менеджер: Александр Батушин
Ментор: Дмитрий Будников
Аннотация
Целью данного проекта было программирование алгоритма HDR пост-обработки входного изображения на языке программирования OpenCL, использующегося для гетерогенных вычислений.
Введение
Зимой 2010-го я заинтересовался HDR-фотографиями. Мое внимание привлекло то, что фотографии были насыщенными, яркими и передавали все детали сцены. Позже я узнал, что это фотографии с расширенным динамическим диапазоном, что следует из названия. На помощь пришли сайты Google, Wikipedia :)
В интернете было множество обоев на рабочий стол и просто фоток. С тех пор меня заинтересовала эта тема.
Пример HDR-фотографии, автор - ~newintenz, взято с сайта deviantart.com
Однажды в апреле на мой email пришло информационное письмо о Летней Школе Интел. Просмотрев список тем, что предлагались, я увидел знакомые три буквы :) И угадайте, что это было? HDR!
И, загоревшись идеей, скачал бланк анкеты и начал заполнять. Ни на что не рассчитывал, в любом случае руководствовался принципом - "лучше что-то сделать, и потом жалеть, чем вообще не делать". Жалеть ни о чем не пришлось! :)
В начале июля мне позвонили из Нижегородского офиса Интел и задавали вопросы, почему я выбрал эту тему, чем занимался до этого.
Буквально через 3 дня я получил письмо, о том, что я принят в Летнюю Школу! Сказать, что у меня был шок - ничего не сказать.
Отдел, в который я попал, занимался графикой. Творческая команда, новейшее оборудование, интересные задачи - все это произвело на меня огромное впечатление!
А вы, когда были студентом, о чем мечтали? ;)
Описание
В мою задачу входило написание кода HDR-преобразования входного изображения, полученного с источников, которые обладают расширенным динамическим диапазоном и оптимизация этого кода.
Само изображение хранилось как набор float-чисел для RGBA-компонент изображения.
Приложение состояло из 2-х частей: Host и OpenCL-приложений. Host-приложение принимало изображение и передавало OpenCL-приложению. После чего выполнялись преобразования согласно алгоритму, и обработанное изображение передавалось обратно на хост.
Сверху вы видите пример HDR-изображений. Слева - до обработки. Справа - после.
После чего приложение было запущено и протестировано на машинах с различными CPU и GPU.
Стоит отметить, что платформа OpenCL поддерживает гетерогенные архитектуры, в том числе состоящие из различного числа CPU и GPU устройств, и приложение, написанное с использованием OpenCL, может быть хорошо портировано на различные платформы.
Инструменты
- Microsoft Visual Studio 2008
- Intel C++ Compiler 11
- Intel OpenCL Compiler
- Мозг :)
Результаты работы
Код был успешно портирован, при переносе использовалась векторизация, а также особенности платформы OpenCL.
По объективным причинам я не могу раскрывать подробности работы алгоритма, а также его оптимизации, как и результаты, которые я получил.
Единственное, что могу сказать - то, что с задачей я успешно справился и получил огромный опыт работы в области программирования post-processing обработки изображений.
В процессе работы над проектом были и трудности. Например, первые три недели было тяжело привыкать к такому большому объему информации! Еще стоит отметить уровень знаний. Я понял, какая большая пропасть стоит между знаниями, которые дают в университете, и здесь, в Intel, в реальных условиях в реальном проекте. Так что мне пришлось подтягивать свой уровень в программировании, что я считаю безусловным плюсом.
За это лето я участвовал в разработке продукта, который пойдет в производство, и очень приятно знать, что то, что я делал - делал не зря.
Заключение и впечатления!
Я привел описание своей задачи, результаты и технические особенности проекта, которым я занимался. Хочу сказать, что лето в Интел - это не только работа. Это множество новых друзей, отличное место для развития в плане специальности, это дружеская, и, как я уже отметил выше, творческая команда :)
У нас было множество семинаров и вебинаров, посещая которые я, как будущий специалист, повысил свой уровень и приобрел полезные навыки. Сейчас, осенью, когда моя стажировка в Intel уже закончилась, многое из того, чему я научился летом, пригодилось мне уже в собственных проектах.
Еще до того, как я попал в Летнюю Школу, меня волновали многие технические вопросы касательно специальности, на которые я не мог найти ответа ни в интернете, ни в институте. После Летней Школы эти вопросы как-то сами отпали :)
Теперь, я уже знаю, в каком направлении специализироваться и дальше развиваться. Для меня это направление - компьютерная графика и спецэффекты.
Неформальная часть Летней Школы была также приятной - я ездил на экскурсию в Городец, был в музее самоваров, музее русского народного искусства, был в различных красивых местах Нижнего Новгорода, познакомился с интересными людьми.
В Нижегородском офисе в конце июля проводились студенческие семинары (летние школьники Питера, Москвы и Сарова тоже приезжали), где мы узнали, чем занимаются студенты и аспиранты в своих ВУЗах. Было очень интересно посмотреть на их разработки и достижения. Все-таки как никак - обмен опытом!
Мне также удалось поучаствовать в олимпиаде по английскому языку среди летних школьников и занять 3-е место. Понял, что английский очень нужен и важен. И что, пожалуй, главное - важен не объем знаний, а то, как мы умеем ими пользоваться.
Еще я начал заниматься тем, чем раньше никогда не занимался. Например - латино-американскими танцами и виндсерфингом! ;)
Спасибо организаторам за проделанную работу! Они сделали все, чтобы нам было комфортно работать. Начиная от выдачи любого нужного оборудования, софта и заканчивая такими мелочами, как влажными салфетками для монитора или батарейками для клавиатуры. Они отвечали нам на все вопросы, и любая проблема решалась моментально.
Летом в Intel я поднял свой уровень программирования на C/C++/OpenCL, научился работать с компилятором Intel и отлаживать приложения, стал лучше понимать, как правильно писать код, поднял свой навык владения английским языком и научился грамотно проектировать приложения, чтобы потом не сидеть в дебаге по уйме часов.
Хочу сказать огромное спасибо своему ментору - Дмитрию Будникову и менеджеру - Александру Батушину. На протяжении всей практики они активно помогали мне с проектом.
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (9) 
| 11.10.2010 00:17
ananas-wd
|
Нам выделили общежитие при университете НГЛУ им. Добролюбова, было очень удобно. До офиса идти всего 15 минут! Я был на Горьковском водохранилище. Там есть серф-лагерь, прокат досок и инструктора. Но в общем, могу сказать, что да - подходящий. Потому что это доска с парусом. А если есть ветер - то вполне можно и покататься :) За замечания по статье - спасибо! Буду улучшать свое умение писать статьи! ;) |
| 17.10.2010 04:39
Vitaly Slobodskoy (Intel)
|
Интересно было прочитать про увлечения автора, но как-то действительно "по делу" маловато... > По объективным причинам я не могу раскрывать подробности работы алгоритма, а также его оптимизации, как и результаты, которые я получил Что за субъективные причины? |
| 17.10.2010 06:30
ananas-wd
|
Причина в том, что мой менеджер, Александр Батушин, объяснил мне, какую информацию о проекте можно публиковать в открытый доступ, а какую - нельзя. Участвовать в конкурсе статей все же хотелось и я решил ее написать. Возникла дилемма. В то же время надо и рассказать, чем занимался в проекте, и не раскрывать особенностей реализации и оптимизации моей задачи - т.к. confidential. Некоторые проекты были research, некоторые шли в production. Как я понял, ресерчерам можно было публиковать в открытом доступе всю информацию об их проектах, в то время тем кто разрабатывал ПО, которое затем шло в производство готового продукта - нет. |
| 19.10.2010 10:48
Eugene Shevchenko
| У меня вот такой вопрос: почему понадобилось задействовать GPU ? алгоритм преобразования настолько "тяжелый" для фотографии? |
| 19.10.2010 11:30
ananas-wd
|
Я работал с буфером изображения. Эффекты HDR используются не только для одиночного преобразования, а например в играх или роликах, где нужно обеспечить высокую производительность, скажем 30 fps. Поэтому и применялась оптимизация. Чтобы рационально использовать все мощности машины, был использован OpenCL. В мою работу также входило исследование производительности на различных CPU и GPU. |
| 20.10.2010 12:55
Eugene Shevchenko
|
А, то есть для обработки видеопотока. Понятно, спасибо. Может тогда стоило бы представить какие-нибудь диаграммы временные для разного количества ядер. |
| 20.10.2010 13:12
ananas-wd
| Да, все верно. И для видеопотока тоже. К сожалению, привести диаграммы не могу. |
| 24.10.2010 06:29
Eugene Shevchenko
| Я не знаю что в этом секретного, алгоритм обработки HDR в открытом доступе лежит в сети. И распараллеливание ,наверняка, идет матричных вычислений. |
Обратная ссылка (2)
- Немного о лете или Как студенты проводят лето с пользой и с Интел – Блоги Intel® Software Network
11.10.2010 01:07 - Про статью на конкурс в Intel « Ananas-WD Blog
17.10.2010 06:31
Оставить комментарий 
ananas-wd
|


Василий
789
А вопрос есть не по статье. Я так понял ты был в Нижнем Новгороде (на удивление, я не нашел этой информации в статье, только небольшие отголоски. Вроде по требованием необходимо указывать в начале статьи, ну да ладно), скажи как вы там проживали? А на фото с виндсерфингом - выглядит холодно, разве это подходящий вид спорта для такого пояса, да и вообще для нашей страны?