Как стать автором
Обновить

Комментарии 66

Подскажите плиз ссылку «CUDA для чайников». Очень хочеться получить базовые представления, основные принципы программирования для распределенных вычислений и примитивные примеры этого языка
Вообще исчерпывающая информация в самом NVIDIA CUDA Programmers Guide есть, но нужен английский.
Спасибо
courses.ece.uiuc.edu/ece498/al1/
Полноценный курс от компании NVIDIA для Иллиноисского университета университета
Презентации
Аудио записи лекций
Документация
Лабораторные
Диплом делал по этой теме :). Собирал под WinXP, SUSE и Ubuntu. Под линукс примерно так, как и описано выше. Всё действительно работает и работает очень хорошо. Особенно приятно, когда программа на видеокарте начинает обходить по производительности аналогичную на процессоре.
есть табличка сравнения, и описание что за задача была. у меня есть стойкое подозрение, что не сильно она будет опережать настоящий процессор
Наверное я и компания NVIDIA( www.nvidia.ru/object/cuda_home_ru.html ) занимаемся обманом честных граждан ;) и запускаем программы на «ненастоящих» процессорах.

По существу:
Тягался я с OpenSource библиотекой обработки изображений DevIL (Development Image Libarary) она же когда-то OpenIL

Железо:
Core2Duo T7100 1.8GHz
Nvidia Quadro NVS 140M

Задача:
Свертка изображения ядром 3х3 и 5х5

Размер изображения Время GPU сек. Время CPU сек. Ускорение
Однократный запуск обработки
1.4Мб                  0.109          0.203          1.86
3 Мб                   0.188          0.422          2.245
8.6Мб                  0.5            1.25           2.5
54Мб                   2.69           7.844          2.642

10-и кратный запуск обработки (минимизируем затраты на чтение-запись, оцениваем работу ядер)
1.4Мб                  0.656          1.906          2.9
3 Мб                   1.360          4.171          3.067
8.6Мб                  3.890         11.485          3.95
54Мб                  10.812         71.297          6.56


если учесть, что количество ядер в более мощьных видео картах более чем на порядок больше, чем в тестируемой
и тот факт, что на момент написания программы опыт оптимизации подобных приложений у меня был незначительный, опыт использования CUDA можно считать успешным.
Судя по данным (см. ссылку) прирост может быть гораздо больше.

Есть задачи, на которых прироста производительности нет. Скажем, контрастирование изображения, в силу того, что это однопроходная задача и всё время съедается на передаче данных с/на карту.
>>Nvidia Quadro NVS 140M
издеваетесь? это же G86, там всего 16 потоковых процессоров, вы лучше возьмите старичка 8800GT с 112 потоковыми процессорами, или более менее новую gtx260 с 216 потоковыми процессорами, тогда уже можно сравнивать с обычными процессором, а Quadro NVS 140M — это очень low-end
А если поставить сервак Tesla с четырмя такими картами то будет еще круче, а если датацентр с такими серваками…

этот low-end показал себя неплохо
когда делал диплом выбирать не приходилось
был ноут с указаной картой и ни каких других альтернатив

education и production две большие разницы ;)

PS: если не хотите, что бы я издевался, говорите предметно, раскажите ваш опыт, ваши успехи
я о «Наверное я и компания NVIDIA( www.nvidia.ru/object/cuda_home_ru.html ) занимаемся обманом честных граждан ;) и запускаем программы на «ненастоящих» процессорах.»

если сравнивать производительность cuda и процессора, то уж с нормальной картой, а не low-end G86
в чем единственный плюс вычислений на cuda — это в количестве потоковых процессоров

у меня есть единственный опыт использования cuda — перебор паролей md5:
на топовых комплектующих, доступных для покупки:
процессорах core2quad 3ггц производительность с 4 ядрами доходит до ~300млн паролей/сек, при использовании 4 видеокарт 9800GX2 с 128*8=1024 потоковыми процессорами производительность доходит до ~3500млн паролей/сек
при использовании нетоповых процессоров и видеокарт:
на core2duo 3ггц производительность ~100 паролей/сек; 8800GT ~500паролей/сек

т.е. основное достоинство технологии cuda вовсе не в доступности low-end видеокарт, а в масштабируемости технологии — можно увеличить количество потоковых процессоров и производительность при намного меньших затратах, сделав доступными по цене большие вычисления для обычных компьютеров, которые может позволить себе каждая уважающая себя компания; я вовсе не говорю о дорогущих «серваках Tesla с четырмя такими картами» и «датацентрах с такими серваками», я об обычных компьютерах
PS: 4*9800GX2 в рознице стоит 4*$300, «сервак Tesla с четырмя такими картами» $10000 — производительность одна и та же ;-)
>если сравнивать производительность cuda и процессора, то уж с нормальной картой,
>а не low-end G86 в чем единственный плюс вычислений на cuda — это в количестве потоковых
>процессоров

Простите, не прояснил:
Работу я начал в ноябре — декабра 2007, когда девятой линейки и CUDA 2.0 еще небыло.

На счет масштабирования абсолютно согласен, в данной технологии на нее сделан основной упор.
~300млн паролей/сек

миллионы?
да, миллионы; это мало для вас или много?
много!
внизу просто уже без миллионов: ~100 паролей/сек;
опечатка?
извиняюсь, опечатка :)
100млн для core2duo и 500 450млн для 8800gt
где-то есть подвох=) почему тогда видеокарта не стоит вместо основного процессора?

или там процессоры в видюхе порезанные, CUDA сильно порезана по функциям по сравнению с C?
видеокарты не рассчитаны вычислять то, что считают процессоры и задуманы под ускорение вычислений, в которых cpu очень слаб, другие вычисления они либо не умеют делать, либо делают жутко медленно;
насколько я знаю основные вычисления для видеокарт — это целочисленные вычисления и вычисления с плавающей запятой, но видеокарта не рассчитана на ветвления, предсказания ветвлений, сдвиг битов и прочие хитрости cpu…
А можно сорцы и картинки в открытый доступ попробовать погонять на своем процессоре?
Нужны ли иксы для работы CUDA?
нет, можно программировать на CUDA под win, nix и mac
Вы не поняли вопроса. Тогда перефразирую под ваше утверждение: нуждны ли иксы, directx или quartz чтобы программировать на CUDA?
Понял вопрос! Нет, программирование на CUDA никоим образом не завязано на графическую подсистему (кроме косвенной связи — часто графическая система работает через видеокарту, на которой исполняется программа для CUDA, что может вызываеть разные эффекты, как например Watchdog timeout под Win).
Вроде все отлично, но хотелось бы сделать пару замечаний по установке драйверов:
1) Вчера вышла стабильная версия 180.22, думаю лучше исправить в инструкции, чем давать указание на первую бету драйверов с поддержкой CUDA
2) На форуме нвидии дается несколько иная инструкция по установке:

sudo aptitude install linux-headers pkg-config xserver-xorg-dev
sudo aptitude purge nvidia-glx linux-restricted-modules linux-restricted-modules-common
sudo rm -f /etc/init.d/nvidia-glx /etc/init.d/nvidia-kernel

а затем выход из иксов и установка.
На сайте NVIDIA в разделе технологии для Ubuntu рекомендуется пока именно 180.06. Я могу ошибаться, но новый паблик-драйвер необязательно должен поддерживать CUDA, может быть, для этого нужен специальный драйвер. Насчет второго пункта — я рассказывал о собственном опыте, и у меня все отлично работает. Да и если при установке не будет хватать какой-то определенной библиотеки — это будет понятно. Так что спасибо за замечание, думаю, народу пригодится, если что.
В релиз нотах к паблик-драйверу явно указано про поддержку CUDA, для нее не будет отдельного драйвера, он будет идти в комплекте с драйвером.
Спасибо, вставил.
Лично у меня 180.22 продемонстрировала массу артефактов при включённом compiz-fusion. Я к нему привык, так что пришлось откатиться на 177.80. Возможно, более новые версии данного по с новыми дровами работают без нареканий, не проверял. Так что может просто не всем подойти.
Кстати, с 188.06 у меня компиз прекрасно работает вместе с CUDA, причем видюха ноутбучная 8400 GS.
Идиотский вопрос — а когда оно считает, видеокартой может пользоваться? Или черный экран?
Для этого можно запустить пример deviceQuery, он проверяет оборудование на предмет поддержки CUDA.
Приоритет отдаётся системе и видеобуферу. Т.е. память под видеобуфер остаётся и если потребуется больше, то даже данные CUDA-приложений могут быть затёрты для нужд видеобуфера.

С вычислениями по-другому. Вычичслительные ресурсы делятся по-равному. Т.е. если загрузить видеокарту на расчёты по полной, то тормоза будут.
НЛО прилетело и опубликовало эту надпись здесь
Они не в сто раз медленнее, просто на них не распараллелишь вычисления на большое число потоков сразу, поэтому обработка идет медленнее. А вообще — чем больше потоков — тем быстрее процесс.
Неверное утверждение.

Во-первых, всё зависит от задачи. Почему это я под x86 не могу распараллелить тот же перебор паролей? Да хоть 1000 потоков и будут они у меня работать параллельно. Только какой смысл? Если в лучшем случае ядер у меня 4 + программная диспетчеризация сжирает уйму времени(в CUDA она аппаратная).
Дело не в распараллеливании на потоки, а именно на ядра. То есть если каждое ядро будет работать над своей задачей — естественно задача решится быстрее. Плюс — переход от ядра к ядру в x86 составляет добрую сотню тактов, когда как в чипе NVIDIA это один такт. Вот вам и прирост производительности…
Вы сейчас просто взяли и перефразировали мой пост, повторив все мои утверждения. :)
Ну не совсем :) Просто объяснил более понятным языком, мне так кажется. В любом случае — спасибо за поддержку :)
В силу особенностей архитектуры, главная из которых заключается в прицнипе SIMD(single-instruction-multiple-data, одна-инструкция-разные-данные), другими словами, скажем, если в GeForce 280GTX присутствуют 240 ядер, то за один такт, в идеале, видеокарта выполняет 240 одинаковых инструкций, каждая из которых оперирует разными данными.
Попробуйте запустить приложение на видео чипе — будет обратная ситуация. Nvidia сравнивается с устаревшим процессором на числодробительных задачах — прямой поток без ветвления.
Спасибо, вы спасли меня от трахатья с гуглом. Я в конфигурации linux'а не настолько силён, чтобы запросто так взять и поставить все необходимые компоненты. А посмотреть CUDA хочется. (GeForce 9800)
а есть что-то подобное для ATI?
В скором времени ожидается выход OpenCL 1.0 — стандарта для параллельного программирования под платформы ATI и NVIDIA.

Насколько я понимаю, стандарт как стандарт не привязан к платформе. Он был изначально предложен Apple, а поддерживать его будут естественно все кто подсуетятся.
почему для смены версии gcc не использовать export CC=gcc-4.1?
может случиться так, что установленный стандартно компилятор будет отличаться от системного (как бредово не звучит — но у меня такое было). А вообще — способов полно, что для кого проще.
забыл про g++. export CXX=g++-4.1
А OpenCL не рассматривался в качестве альтернативы? Он вроде похож принципиально, но позволяет писать под большее количество железяк. А в разработке этого стандарта участвовали и нвидия, и интел и ати, есть надежда, что просто так не бросят.
Можно поинтересоваться, что именно вы собрались кодить?
Кроме gamedev'а или подбора паролей :), для чего еще можно использовать?
Например у меня в вычислительном комплексе есть отдельное расширение для работы с матрицами на GPU. Т.е. когда размер матриц начинает превышать определённый объём, то часть вычислений переносится на GPU.

Этот «определённый объём» расчитывается эмперически. Т.е. когда время затраченное на двусторонний обмен данными между видеокартой и оперативной памятью на фоне сложной вычислительной операции(на которую тратится значительно больше времени на обычном процессоре) становится достаточно мал, имеет смысл использовать GPU.

Имеет смысл переносить операции начиная с умножения и заканчивая каким-нибудь сингулярным разложением матриц.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Это мне для научной работы. Например, моделирование поведения различных сложных материалов и химических систем.
Любое статистическое моделирование — как раз подходящая задача, как я понимаю.
Работа с изображениями — классический пример. Фильтры, декодирование raw и т.п.

Видео-обработка тоже должна хорошо лечь на GPU, особенно в HD-варианте.

CUDA-архиваторы не за горами.

Это я всё про ширпотреб. А что уж говорить про узкоспециализированные числодробильные приложения, в которых перемножение матриц из миллионов элементов — обычное дело!
Пожалуйста как чего-нибудь напишешь, выложил табличку с результатами. а было бы еще и сравнение выполнение тойже задачи но на обычном процессоре.

У меня есть стойкое подозрение что на обычном процессоре это будет быстрее. Так как основное проседание у видео карты будет именно в синхронизации всех этих 180 ядер =)
Надо почитать документацию и все подозрения пропадут. Там нет необходимости синхронизировать все 180 ядер по отдельности. Аппаратно ядра объединяются в warp'ы по 32 ядра. Программно реализация по потокам делится на блоки, блоки объединяются в grid'ы. Обработка идёт пакетно.

А табличка есть:
www.nvidia.com/object/cuda_home.html#

НЛО прилетело и опубликовало эту надпись здесь
спасибо =) Конечно, я писал прошивку для чемоданчика с красной кнопкой, и у меня есть к нему доступ по ssh.
И у вас тоже?! :)
Это не распределенные вычисления. Параллельные, да.
топикстартер! а зачем вручную ставить драйвер? из репозитория не подойдет?
на время написания топика дрова из репозитория не поддерживали CUDA :) Сейчас, как-никак, уже больше года прошло.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории