NVIDIA vs. ATI и политика в проектах распределенных вычислений

28 октябрь, 2009 - 12:42Евгений Пугач

У гиков-любителей хардвера зачастую и развлечения гиковские. Я, например, довольно давно интересуюсь разнообразными проектами распределенных вычислений, начиная от "for fun"-инициатив вроде distributed.net, взламывающих подбором алгоритмы шифрования, до поиска внеземных цивилизаций в SETI@Home и молекулярной биологии (Folding@Home и аналоги), и даже предварительным этапом Storage@Home - проекта распределенного файлового хранилища для научных данных. Начиналось это увлечение примерно в то же время, когда появился более-менее стабильный и регулярный доступ к Интернет для получения и отдачи заданий, то есть во времена Athlon на ядре Thunderbird. Тогда, помнится, я прикладывал недюжинные усилия, разгоняя процессор ради пары-тройки миллионов ключей в секунду, вычисленных в distributed.net, а уж массовое появление двуядерных CPU стало манной небесной.

NVIDIA vs. ATI и политика в проектах распределенных вычислений

Скриншот просмотрщика GPU-клиента Folding@Home, подойдет и в роли скринсейвера :)

Через несколько лет я полностью переключился на Folding@Home, тем более что в этом проекте активно развивается поддержка GPGPU, позволяющая считать силами видеокарты. В частности, лето позапрошлого года было переломным: вышел клиент для NVIDIA CUDA, разом обошедший по производительности существовавший уже вариант для ATI Stream вдвое, о CPU и SMP-клиентах и говорить не приходится. Естественно, такой разрыв в производительности при том, что "голое" быстродействие GPU канадского разработчика превышает показатели NVIDIA, вызывает недоумение. Разработчики Folding@Home объясняют это явление тем, что CAL (Compute Abstraction Level) - дополнительная промежуточная стадия в AMD Stream, обеспечивающая низкоуровневый доступ к GPU, вносит значительные задержки. Кстати, забавный факт: Stream базируется на Brook+ - оптимизированной AMD версии языка программирования Brook, разработанного в Стенфордском университете, специалисты которого разработали и сам Folding@Home.

С другой стороны, очевидна заинтересованность и поддержка NVIDIA в проекте: если со стороны AMD наиболее заметная активность - это включение дистрибутива F@H в пакет драйверов Catalyst, то калифорнийцы выделили несколько специалистов для непосредственной работы над GPU-клиентом F@H. Например, на форуме техподдержки и обсуждения F@H у них можно получить ответы на вопросы, консультации и т.п.

В любом случае, соотношение сил в этом отдельно взятом проекте сейчас далеко не в пользу AMD: Radeon HD 4890 нарабатывает в сутки 3500-3700 ppd (points per day, условных очков, которыми оцениваются посчитанные задания), а GeForce GTX 285 - более 7500 ppd. Такая ситуация сохраняется уже больше двух лет, и я уже практически поставил крест на использовании Radeon для распределенных вычислений.

NVIDIA vs. ATI и политика в проектах распределенных вычислений

Логотип Distributed.net (клиент зрелищностью не блещет)

Каково же было удивление, когда на днях из интереса я заглянул на сайт с бета-версиями клиентов distributed.net и, увидев там варианты для Stream и CUDA, попробовал оба. Результаты, прямо скажем, ошеломили: в этом проекте все с точностью до наоборот. GeForce GTX 275 у меня демонстрирует около 300 млн. ключей в секунду, "двуглавый" GTX 295 - примерно 530 млн., а Radeon HD 4890 - обеспечивает те же 500 млн. с одного ядра! Конечно, это не в 2.5 раза быстрее, как в предыдущем проекте, но все равно впечатляет. А сейчас установленный в стенд Radeon HD 5870 "молотит" больше миллиарда ключей в секунду, благодаря чему я за сутки в 8 раз обошел показатели товарища, нагрузившего SMP-клиентами один "скромный" вычислительный центр (в свободное время, естественно). И это на неоптимизированном ядре, которое R800 вовсе не знает.

В связи с этим возникает логичный вопрос: как так получается? Folding@Home разрабатывается при активном участии NVIDIA, потому успехи этой архитектуры логичны. С другой стороны, distributed.net пишут энтузиасты без какой-либо поддержки (разве что консультации) со стороны обоих вендоров, и обе ветки (CUDA и Stream) развиваются практически параллельно. Как же так? Distributed.net проще? В таком случае CAL еще сильнее бы замедлял работу, не успевая "кормить" GPU задачами. Может, CUDA уделяют мало внимания? Нет, различных вычислительных ядер под CUDA насчитывается 9, а под Stream - всего 2. 

Создается впечатление, что налицо лобби, хотя со стороны специалистов Стенфорда это было бы нелогичным, как-никак они в первую очередь заинтересованы в общем быстродействии распределенной сети, в том числе и на базе чипов ATI. Пахнет политикой :) Наверное, AMD больше внимания уделяет серьезным коммерческим проектам вроде продуктов Cyberlink, Adobe и т.п.?