774 Тем для обсуждения
6,825 Открытых обсуждений
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Распараллеливание черного ящика.(ч.1)
Kirill Mavrodiev (Intel) (22 пост(а)) 26.10.2009 15:16
Существует точка зрения, что при распараллеливании неправильно рассматривать последовательно реализованную программу как черный ящик. Другими словами, необходимо знать алгоритмы, которые реализованы в данном пакете. С одной стороны, это правильно, ведь порой эффективнее заменить, существующий алгоритм на другой. На алгоритм, который хорошо ложиться на ту или иную архитектуру.
Я хочу рассказать о результате летнего школьника Интел-ННГУ 2009, т.е. о проекте, которым занимался студент, у которого я был руководителем. Задача стояла следующая: взять уже существующий проект и распараллелить его с помощью Intel(R) Parallel Studio, рассматривая его как черный ящик. А потом сравнить с параллельным вариантом разработчиков сэмпла. Главное условие было взять только последовательный вариант проекта и не смотреть параллельный вариант. Выбор остановился на сэмпле для Intel(R) TBB - Tachyon, у которого существует два параллельных варианта с использованием технологии Intel(R) TBB. (если установлен пакет "Intel(R) Parallel Studio", то солющен(Solution) можно найти тут: C:\Program Files\Intel\Parallel Studio\Composer\tbb\examples\parallel_for\tachyon). Это трассировщик лучей, один из результатов которого фрактал с тремя источниками освещения.
Стоит заметить, что 3 ноября будет проведен Онлайн Семинар "Intel(R) Parallel Studio Workflow" на базе Tachyon. Количество участников ограничено.
Первый Шаг в расспараллеливание - это найти наиболее часто используемый участок программы. Для этого использовался Intel(R) Parallel Amplifier. И для сравнения удобства и простоты работы Intel(R) VTune(TM) Performance Analyzer. Как Amplifier так и VTune указали на функции:
grid_intersect и sphere_intersect.
Анализ данных функций показывает, что они не совсем пригодны к распараллеливанию или тюнингу. Соответственно нужно найти либо родительские либо дочерние функции, которые содержат циклы.
Для VTune пришлось собрать профиль Call Graph, на что ушло порядка 13 минут накладных расходов (время работы последовательного варианта Tachyon 30 сек). И 1 час на анализ профиля. У Ampilfier-а использовался уже созданный профиль, что оказалось очень удобным:
В результате мы остановились на кандидате parallel_thread:
static void parallel_thread (void)
{
unsigned int serial = 1;
unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
memset(local_mbox,0,mboxsize);
for (int y = starty; y < stopy; y++) { {
drawing_area drawing(startx, totaly-y, stopx-startx, 1);
for (int x = startx; x next_frame()) return;
}
}
И пока я дописываю следующий Блог, предлагаю Вам самим попытаться распараллелить.
Категории: Intel Software Network, Академическое сообщество, Графика, Конкурсы и мероприятия, Параллельное программирование, Разработка софта
Метки: Parallel Studio
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (5)
| 26.10.2009 06:45
Kirill Mavrodiev (Intel)
| Возможно Вы правы. Но как я так и студент знали о трассирование лучей ровно столько, сколько написано на вики. |
| 04.11.2009 23:55
Andrey Karpov
| To Kirill: А где можно скачать исходники этого проекта и промежуточные ошибочные варианты с распараллеливанием (которые были показаны на вебинаре)? Я хочу попробовать на них PVS-Studio. |
| 05.11.2009 09:59
Kirill Mavrodiev (Intel)
| 2 Андрей: Я как раз заканчиваю блог, в котором и будет ссылка. Сегодня-завтра опубликую его. |
| 09.11.2009 10:35
eustas
| Кстати, да! По дереву исполнения/потребления видно, что первое "проедание" времени идёт как-раз таки на render_one_pixel->trace ;-) |
Обратная ссылка (6)
- Блоги Intel® Software Network » По теплым следам онлайн семинара “Intel(R) Parallel Studio workflow”
09.11.2009 05:48 - Инструменты анализа кода
08.12.2009 00:18 - Блоги Intel® Software Network » Холодный Tachyon
08.12.2009 05:16 - Блоги Intel® Software Network » WANTED! Пример для Intel(R) Parallel Debugger Extension
09.12.2009 04:53 - Intel Software Network Blogs » Cold Tachyon
25.12.2009 07:02 - Cold Tachyon
25.12.2009 12:22






yuryserdyuk
5,200
сразу поймет что функции grid_intersect и sphere_intersect здесь не причем,
а надо искать место, где происходит цикл по изображению (пикселам).
С другой стороны, параллелизация здесь простейшая,
поскольку отдельные потоки никак не взаимодействуют друг с другом,
поэтому было бы интереснее и полезнее взять пример
со взаимодействием отдельных частей.
Показательный здесь пример - задача "Game Of Life" с Intel Threading Challenge 2007-2008,
где давался последовательный код на С++,
который нужно было распараллелить.