Как вы знаете, для успеха многопоточной версии программы необходимо наличие нескольких моментов. К примеру, если на каждый пиксель видео кадра накладывается сложный спецэффект, то мы получает сложные вычисления, на которые и рассчитана технология HT. То есть наше приложение соответствует критерию сложных вычислений. В зависимости от размера кадра, обработка каждого кадра может быть разделена на несколько частей, и каждая часть будет конкурентно просчитываться в своем потоке. Мы переходим к тому, что Intel называет "проблемой разбиения данных", которая связана с выделением времени для каждого потока. В любом многопоточном дизайне, первые целевые области содержат в себе наиболее зависящие от процессора участки кода. В гипотетическом примере по редактированию видео, наиболее "тяжелой" задачей в области потребления ресурсов процессора является наложение спецэффектов, затем следуют операции ввода/вывода по чтению и записи кадра. Основной поток работает в роли потока-мастера и разделяет текущий кадр видео на четыре части в фазе подготовки, как показано на иллюстрации (a). Как только данные будут подготовлены, поток-мастер пробуждает три остальные потока и все четыре потока (включая мастер) работают над своей секцией видео кадра. Как только поток закончит обработку своей части данных, он будут ждать момента, когда все потоки закончат обработку своей части кадра. Затем мастер приостановит все рабочие потоки и запишет обработанный кадр на диск перед чтением следующего кадра из потока (b) и (c).


Описание иллюстрации находится выше.

Измеряя прирост производительности

Подобное применение HT в области создания спецэффектов опирается на балансировку нагрузки - главный алгоритм не будет работать в полную силу, чтобы неиспользованные области конвейера смогли обрабатывать другой поток. В приложениях по редактированию видео наложение спецэффектов, к примеру, может занимать 80% времени процессора, а операции ввода/вывода - оставшиеся 20% времени, в первую половину кадр будет считываться, во вторую - записываться. Как утверждает Intel, даже при идеальных условиях разложения задачи по потокам, выигрыш в производительности подобных приложений будет выше не более чем в пять раз. С использованием четырех потоков, максимальный прирост производительности составляет 2,5 раза, поскольку последовательная часть кода составляет 20% и параллельная часть - 80%. Это максимальный порог увеличения производительности при использовании четырех потоков. В реальности же, в связи с сопутствующими многопоточному приложению накладными расходами, прирост производительности будет меньше 2,5 раз.

Многопоточные компиляторы

Как утверждает Intel, новые HT компиляторы Intel и утилиты охватывают широкий спектр приложений. По информации Intel, версии 7.0 Intel C++ и Intel Fortran компиляторов под Windows и Linux могут улучшить производительность приложений для систем на базе процессоров Intel Itanium 2, Intel Xeon и Intel Pentium 4 до 40% по сравнению с компиляторами других поставщиков. Что касается HT, новые версии 7.0 компиляторов Intel содержат опцию авто-параллельности, которая автоматически проверяет приложение на возможность создания нескольких исполнительных потоков. Также в них улучшена поддержка OpenMP, открытого стандарта, позволяющего использовать высокоуровневые команды для упрощения создания и отладки многопоточных приложений.

 

Copyright @ by Lehach, 2009