PHOTODATE
Найти фото - найти человека!
Найти человека по фото на www.photodate.ru ruGPU + Web: первые впечатления
Модель Таня Дзягилева*Модель Таня Дзягилева* - похожие анкеты
Copyright © 2007-2014 IMAGIUM
Главная
Найти
Фотогалерея
Клуб
IMAGIUM
О проекте

Задайте файл картинки для поиска по образцу
Фото:    
Найти:  фото девушек фото мужчин авторские работы портфолио

GPU + Web: первые впечатления


19.08.2008 
GPU + Web: первые впечатления

В последние дни ради эксперимента часть программ сайта были заменены на любопытные аналоги. Теперь некоторые программы обработки изображений и расчетов в ходе поиска выполняются не центральными процессорами компьютеров (CPU), а видеопроцессорами GPU, имеющимися в составе обычных графических карт NVIDIA 8-й, 9-й и 200-й серий.

Теоретически, графические процессоры обладают существенно большей мощностью при выполнении программ, допускающих параллельную работу многих процессоров. С появлением технологии CUDA уже не нужно быть специалистом в области графического "железа", чтобы проверить это предположение в реальной вычислительной задаче. Все что нужно, чтобы "оседлать", к примеру, 240 ядер NVIDIA GTX 280 - это уметь программировать на С и иметь элементарные представления о том, как информация размещается в памяти компьютера в виде байтов :)

Сразу скажу, что в плане экономии времени "на круг" результат пока не слишком заметен - вклад модернизированных программ не превышает 10% от общего времени обработки. Гораздо интереснее другое - как "приживаются" программные и аппаратные технологии, изначально предназначенные для настольного применения, в такой новой для себя области, как web.

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

И здесь очень важными становятся, например, такие вопросы:

1. насколько драйвер учитывает возможности конкретной графической платы по переключению контекста параллельных задач, в частности, минимальные задержки при переключении;

2. насколько параллельное выполнение и переключение заданий в графическом процессоре (например, streams в CUDA-устройстве) согласовано с параллельным выполнением потоков (threads) на многоядерном CPU;

3. насколько эффективно драйверу видеокарты удается бороться с фрагментацией видеопамяти, динамически используемой в вычислениях.

Я экспериментировал на компьютерах разной конфигурации: с одной видеокартой и с двумя, с двухьядерным CPU и с четырехьядерным, с Windows XP и с Windows Vista. Везде запускалось одно и то же тестовое приложение: внешний цикл от 1 до 100 потоков центрального процессора (host threads) асинхронно помещают на GPU данные и запускают там (каждый) от 1000 до 30000 потоков GPU, после чего результат возвращается в обычную память.

Вот, например, что наблюдалось:

1. Несмотря на то, что отдельное задание (kernel) выполняется существенно быстрее 5 сек., в таком многопотоковом режиме и в XP и в Vista периодически срабатывает watchdog, контролирующий зависание драйвера графической карты. Это приводит к потере контекста заданий на GPU и к некорректным результатам вычислений.

2. При запуске примера на десктопе с картой 8600GT обнаружено ограничение - максимум 15 host threads могут одновременно работать с видеокартой. При этом на ноутбуке с мобильной версией этой же карты (8600GT M) - никаких ограничений, 30 и более потоков CPU успешно взаимодействуют с графической картой.

3. В целом, ни одна из конфигураций не показала себя абсолютно надежной при таком специфичном использовании - рано или поздно происходит либо потеря контекста и отказ драйвера инициализировать CUDA-устройство в каком-либо из потоков, либо сбой и принудительное восстановление видеодрайвера (Vista), либо неожиданный отказ драйвера запустить ядро (launch error). При этом, в среднем, под Vista работоспособность примера сохраняется дольше.

4. Для преодоления watchdog'а использовалась рекомендованная в документации конфигурация из двух видеокарт. Первая - для отображения на экран, вторая - как CUDA-устройство, для вычислений. При этом наблюдался любопытный эффект: если, как это рекомендуется в документации, для второй видеокарты отключить установку "Расширить рабочий стол на этот монитор", то загрузка CPU (четырехьядерный Intel Q6600) возрастает до 100%, а время выполнения задания увеличивается в несколько раз. Очень похоже, что в этом режиме при инициализации CUDA-устройства центральный процессор какое-то время находится в цикле ожидания с нулевой задержкой на переключения. В этом режиме, однако, продемонстрирована максимальная стабильность тестового примера. Если же для CUDA-устройства установить галочку "Расширить рабочий стол на этот монитор", то скорость вычислений резко возрастает, но падает стабильность. Хотя и остается выше, чем для случая с единственной видеокартой.

5. Вторая графическая плата PCI-E тут же отъедает у Windows XP гигабайт(!) доступной оперативной памяти, за счет чего падает общая производительность системы :)

И при всем при этом было решено перенести часть задач на GPU. Почему? Да потому, что это, действительно быстро! Модернизированные программы уже сейчас работают минимум в 5 раз быстрее (некоторые, в 20).

А нестабильность (надеемся, временная) - так кто предупрежден, тот вооружен. Всегда есть старый добрый CPU, на котором можно и пересчитать, в случае чего. Ведь обработка исключений - это, как известно, самое интересное в программировании...

(c) Алексей Лагутин
логотип CUDA Zone (c) NVIDIA Corporation
Другие новости »

 Photodate.ru   О проекте   Контакты   Карта сайта   Поиск по сайту