Какие аналоги cuda nvidia есть у видеокарт amd
Я хотел бы расширить свой набор навыков в GPU computing. Я знаком с raytracing и realtime graphics (OpenGL), но следующее поколение графики и высокопроизводительных вычислений, похоже, находится в GPU computing или что-то в этом роде.
в настоящее время я использую графическую карту AMD HD 7870 на своем домашнем компьютере. Могу ли я написать код CUDA для этого? (моя интуиция нет, но поскольку Nvidia выпустила двоичные файлы компилятора, я могу ошибаться).
второй более общий вопрос есть, с чего начать с GPU-вычислений? Я уверен, что это часто задаваемый вопрос, но лучшее, что я видел, было от 08', и я думаю, что поле изменилось довольно много с тех пор.
нет, вы не можете использовать CUDA для этого. CUDA ограничивается оборудованием NVIDIA. OpenCL было бы лучшей альтернативой.
У самого Хроноса есть список ресурсов. Как и StreamComputing.сайт ЕС. Для ваших конкретных ресурсов AMD вы можете посмотреть на страница SDK приложения AMD.
обратите внимание, что в настоящее время существует несколько инициатив по переводу/кросс-компиляции CUDA на разные языки и Апис. Один такой пример бедра. Обратите внимание, однако, что это все еще не означает, что CUDA работает на графических процессорах AMD.
вы не можете использовать CUDA для программирования GPU, поскольку CUDA поддерживается только устройствами NVIDIA. Если вы хотите изучить GPU Computing, я бы предложил вам запустить CUDA и OpenCL одновременно. Это было бы очень полезно для вас.. Говоря о CUDA, вы можете использовать mCUDA. Для этого не требуется графический процессор NVIDIA..
Я думаю, что это будет возможно в ближайшее время в AMD FirePro GPU, см. пресс-релиз здесь но поддержка идет 2016 Q1 для инструментов разработки:
программа раннего доступа для инструментов "инициатива Больцмана" запланирована на 1 квартал 2016 года.
вы можете запустить код NVIDIA® CUDA™ на Mac, а также на графических процессорах OpenCL 1.2 в целом, используя кинза . Раскрытие информации: я автор. Пример использования:
Юп. :) Вы можете использовать Hipify для преобразования кода CUDA очень легко в код HIP, который может быть скомпилирован на оборудовании AMD и nVidia довольно хорошо. Вот некоторые ссылки
Я использовал Nsight для программирования для CUDA, это довольно круто. Также вы можете попробовать профиль, графический плагин говорит вам, сколько ресурсов вы используете.
На новом рабочем месте меня посадили за ПК, оборудованный процессором Ryzen 2600 и видеокартой Radeon RX 580. Попробовав обучать нейронные сети на процессоре, я понял, что это не дело: уж слишком медленным был процесс. После недолгих поисков я узнал, что существует как минимум 2 способа запуска современных библиотек машинного обучения на видеокартах Radeon: PlaidML и ROCm. Я попробовал оба и хочу поделиться результатами.
Небольшое резюме
Параллельные вычисления средствами видеокарты – всего лишь хороший инструмент
в руках трудолюбивого программиста. Вряд ли процессорам во главе с законом Мура
придет конец. Компании NVIDIA предстоит пройти еще длинный путь по
продвижению в массы своего API (то же можно сказать и о детище ATI/AMD).
Какой он будет, покажет будущее. Так что CUDA will be back :).
Этим летом мы запустили серию статей о вычислениях на видеокартах. Подробно разобрали, как с их помощью брутфорсят пароли, майнят альткойны, принимают участие в научных расчетах и получают за это вознаграждение. Эта статья посвящена тонкостям неграфических вычислений и способам повысить их результативность.
Вот уже более пяти лет вместе с друзьями я загружаю простаивающие мощности наших компьютеров заданиями из международных научных проектов. Все они генерируют терабайты экспериментальных данных, которые не могут быть обработаны за приемлемое время на оборудовании самих исследователей. Денег на облачные вычисления у многих нет, как и доступа к суперкомпьютерам, поэтому научное сообщество использует труд добровольцев.
Годами мы считали под общим аккаунтом, постоянно анализировали результаты и делились наблюдениями. Особенно интересно было сравнивать производительность разных видеокарт в реальных расчетах. Как оказалось, с ними связано очень много неявных моментов, а синтетические бенчмарки в основном заточены на игры и слабо отражают ценность видеокарт для неграфических вычислений.
Набор для изучения
Практически все аспекты программирования описаны в документации, идущей
вместе с драйвером и двумя приложениями, а также на сайте разработчиков. Размера
статьи не хватит, чтобы описать их (заинтересованный читатель должен приложить
малую толику стараний и изучить материал самостоятельно).
Специально для новичков разработан CUDA SDK Browser. Любой желающий может
ощутить силу параллельных вычислений на своей шкуре (лучшая проверка на
стабильность – работа примеров без артефактов и вылетов). Приложение имеет
большой ряд показательных мини-программок (61 «тест»). К каждому опыту имеется
подробная документация программного кода плюс PDF-файлы. Сразу видно, что люди,
присутствующие со своими творениями в браузере, занимаются серьезной работой.
Тут же можно сравнить скорости работы процессора и видеокарты при обработке
данных. Например, сканирование многомерных массивов видеокартой GeForce 8800
GT 512 Мб с блоком с 256 потоками производит за 0.17109 миллисекунды.
Технология не распознает SLI-тандемы, так что если у тебя дуэт или трио,
отключай функцию «спаривания» перед работой, иначе CUDA увидит только один
девайс. Двуядерный AMD Athlon 64 X2 (частота ядра 3000 МГц) тот же опыт
проходит за 2.761528 миллисекунды. Получается, что G92 более чем в 16 раз
быстрее «камня» AMD! Как видишь, далеко не экстремальная система в
тандеме с нелюбимой в массах операционной системой показывает неплохие
результаты.
Помимо браузера существует ряд полезных обществу программ. Adobe
адаптировала свои продукты к новой технологии. Теперь Photoshop CS4 в полной
мере использует ресурсы графических адаптеров (необходимо скачать специальный
плагин). Такими программами, как Badaboom media converter и RapiHD можно
произвести декодирование видео в формат MPEG-2. Для обработки звука неплохо
подойдет бесплатная утилита Accelero. Количество софта, заточенного под CUDA API,
несомненно, будет расти.
Программирование
Для «творчества» вместе с CUDA требуется видеокарта GeForce не ниже
восьмой серии. С
официального сайта нужно скачать три программных пакета: драйвер с
поддержкой CUDA (для каждой ОС – свой), непосредственно пакет CUDA SDK (вторая
бета-версия) и дополнительные библиотеки (CUDA toolkit). Технология поддерживает
операционные системы Windows (XP и Vista), Linux и Mac OS X. Для изучения я
выбрал Vista Ultimate Edition x64 (забегая вперед, скажу, что система вела себя
просто превосходно). В момент написания этих строк актуальным для работы был
драйвер ForceWare 177.35. В качестве набора инструментов использовался
программный пакет Borland C++ 6 Builder (хотя подойдет любая среда, работающая с
языком C).
Человеку, знающему язык, будет легко освоиться в новой среде. Требуется лишь
запомнить основные параметры. Ключевое слово _global_ (ставится перед функцией)
показывает, что функция относится к kernel (ядру). Ее будет вызывать центральный
процессор, а вся работа произойдет на GPU. Вызов _global_ требует более
конкретных деталей, а именно размер сетки, размер блока и какое ядро будет
применено. Например, строчка _global_ void saxpy_parallel>>, где X –
размер сетки, а Y – размер блока, задает эти параметры.
Символ _device_ означает, что функцию вызовет графическое ядро, оно же
выполнит все инструкции. Эта функция располагается в памяти мультипроцессора,
следовательно, получить ее адрес невозможно. Префикс _host_ означает, что вызов
и обработка пройдут только при участии CPU. Надо учитывать, что _global_ и
_device_ не могут вызывать друг друга и не могут вызывать самих себя.
Также язык для CUDA имеет ряд функций для работы с видеопамятью: cudafree
(освобождение памяти между GDDR и RAM), cudamemcpy и cudamemcpy2D (копирование
памяти между GDDR и RAM) и cudamalloc (выделение памяти).
Все программные коды проходят компиляцию со стороны CUDA API. Сначала берется
код, предназначенный исключительно для центрального процессора, и подвергается
стандартной компиляции, а другой код, предназначенный для графического адаптера,
переписывается в промежуточный язык PTX (сильно напоминает ассемблер) для
выявления возможных ошибок. После всех этих «плясок» происходит окончательный
перевод (трансляция) команд в понятный для GPU/CPU язык.
А в это время…
А пока ты читаешь сей материал, трудяги из процессорных концернов
разрабатывают свои технологии по внедрению GPU в CPU. Со стороны AMD все
понятно: у них есть большущий опыт, приобретенный вместе с ATI.
Творение «микродевайсеров», Fusion, будет состоять из нескольких ядер под
кодовым названием Bulldozer и видеочипа RV710 (Kong). Их взаимосвязь будет
осуществляться за счет улучшенной шины HyperTransport. В зависимости от
количества ядер и их частотных характеристик AMD планирует создать целую ценовую
иерархию «камней». Также планируется производить процессоры как для ноутбуков (Falcon),
так и для мультимедийных гаджетов (Bobcat). Причем именно применение технологии
в портативных устройствах будет первоначальной задачей для канадцев. С развитием
параллельных вычислений применение таких «камней» должно быть весьма популярно.
Intel немножко отстает по времени со своей Larrabee. Продукты AMD,
если ничего не случится, появятся на прилавках магазинов в конце 2009 – начале
2010 года. А решение противника выйдет на свет божий только почти через два
года.
Larrabee будет насчитывать большое количество (читай – сотни) ядер. Вначале
же выйдут продукты, рассчитанные на 8 – 64 ядера. Они очень сходны с Pentium, но
довольно сильно переработаны. Каждое ядро имеет 256 килобайт кэша второго уровня
(со временем его размер увеличится). Взаимосвязь будет осуществляться за счет
1024-битной двунаправленной кольцевой шины. Интел говорит, что их «дитя» будет
отлично работать с DirectX и Open GL API (для «яблочников»), поэтому никаких
программных вмешательств не потребуется.
А к чему я все это тебе поведал? Очевидно, что Larrabee и Fusion не вытеснят
обычные, стационарные процессоры с рынка, так же, как не вытеснят с рынка
видеокарты. Для геймеров и экстремалов пределом мечтаний по-прежнему останется
многоядерный CPU и тандем из нескольких топовых VGA. Но то, что даже
процессорные компании переходят на параллельные вычисления по принципам,
аналогичным GPGPU, говорит уже о многом. В частности о том, что такая
технология, как CUDA, имеет право на существование и, по всей видимости, будет
весьма популярна.
Любительские кластеры как альтернатива HPC
В целом есть два принципиально разных подхода к обработке научных данных: использовать высоконадежные специализированные HPC-системы с профессиональными ускорителями либо создавать сеть распределенных вычислений из непостоянных узлов с процессорами и видеокартами разной архитектуры. Первый подход обычен в прикладных сферах, тесно связанных с коммерческими разработками и не испытывающих недостатка в финансировании. Второй популярен у тех, кто выполняет некоммерческие и фундаментальные исследования. Их ценность сложно объяснить спонсорам, поэтому остается только привлекать волонтеров. Надежность обработки данных в такой гетерогенной сети обеспечивается за счет избыточности.
За последние десять лет обычные видеокарты научились выполнять микропрограммы общего назначения. Они могут быстро обработать одномерные массивы и выполнить серию расчетов с плавающей запятой, если ЦП сперва сформулирует эту часть задания в понятном для ГП формате.
Начиная с 2006 года вместо отдельных шейдерных процессоров трех разных типов, вычислявших движения частиц и прочие графические эффекты, у видеокарт появились универсальные потоковые процессоры. Это значительно упростило задачу описания ресурсоемких вычислений на понятном для ГП языке. Тогда возникла концепция GPGPU (General-purpose computing for graphics processing units) — использование ГП для ускорения неграфических вычислений.
Если очень упростить сравнение ЦП и ГП, то ключевое отличие можно сформулировать так: центральный процессор обрабатывает числа последовательно, а ГП — параллельно. Когда надо сложить одну сотню чисел с другой, ЦП выполнит сто последовательных операций сложения. ГП запишет их как два одномерных массива (вектора) и сложит все за одну операцию. В современных процессорах уже есть отдельные инструкции для ускорения векторных операций, но по скорости работы они все равно серьезно уступают ГП.
При использовании видеокарты скорость отдельных вычислений возрастает в десятки раз. Просто потому, что у ГП куча исполнительных блоков, способных работать одновременно. Это не четыре ядра у Core i5 и не двенадцать ядер у Xeon. Речь о тысячах универсальных процессоров с частотой 1–2 ГГц и собственной памятью с огромной пропускной способностью. О целом кластере в формате платы расширения.
Терминология CUDA
NVIDIA оперирует весьма своеобразными определениями для CUDA API. Они
отличаются от определений, применяемых для работы с центральным процессором.
Поток (thread) – набор данных, который необходимо обработать (не
требует больших ресурсов при обработке).
Варп (warp) – группа из 32 потоков. Данные обрабатываются только
варпами, следовательно варп – это минимальный объем данных.
Блок (block) – совокупность потоков (от 64 до 512) или совокупность
варпов (от 2 до 16).
Сетка (grid) – это совокупность блоков. Такое разделение данных
применяется исключительно для повышения производительности. Так, если число
мультипроцессоров велико, то блоки будут выполняться параллельно. Если же с
картой не повезло (разработчики рекомендуют для сложных расчетов использовать
адаптер не ниже уровня GeForce 8800 GTS 320 Мб), то блоки данных обработаются
последовательно.
Также NVIDIA вводит такие понятия, как ядро (kernel), хост (host)
и девайс (device).
Почему GPU?
Интересно, почему всю вычислительную мощь решили переложить на графический
адаптер? Как видно, процессоры еще в моде, да и вряд ли уступят свое теплое
местечко. Но у GPU есть пара козырей в рукаве вместе с джокером, да и рукавов
хватает. Современный центральный процессор заточен под получение максимальной
производительности при обработке целочисленных данных и данных с плавающей
запятой, особо не заботясь при этом о параллельной обработке информации. В то же
время архитектура видеокарты позволяет быстро и без проблем «распараллелить»
обработку данных. С одной стороны, идет обсчет полигонов (за счет 3D-конвейера),
с другой – пиксельная обработка текстур. Видно, что происходит «слаженная
разбивка» нагрузки в ядре карты. Кроме того, работа памяти и видеопроцессора
оптимальнее, чем связка «ОЗУ-кэш-процессор». В тот момент, когда единица данных
в видеокарте начинает обрабатываться одним потоковым процессором GPU, другая
единица параллельно загружается в другой, и, в принципе, легко можно достичь
загруженности графического процессора, сравнимой с пропускной способностью шины,
однако для этого загрузка конвейеров должна осуществляться единообразно, без
всяких условных переходов и ветвлений. Центральный же процессор в силу своей
универсальности требует для своих процессорных нужд кэш, заполненный
информацией.
Ученые мужи задумались насчет работы GPU в параллельных вычислениях и
математике и вывели теорию, что многие научные расчеты во многом схожи с
обработкой 3D-графики. Многие эксперты считают, что основополагающим фактором в
развитии GPGPU (General Purpose computation on GPU – универсальные
расчеты средствами видеокарты) стало появление в 2003 году проекта Brook GPU.
Создателям проекта из Стэндфордского университета предстояло решить непростую
проблему: аппаратно и программно заставить графический адаптер производить
разноплановые вычисления. И у них это получилось. Используя универсальный язык C,
американские ученые заставили работать GPU как процессор, с поправкой на
параллельную обработку. После Brook появился целый ряд проектов по VGA-расчетам,
таких как библиотека Accelerator, библиотека Brahma, система
метапрограммирования GPU++ и другие.
Предчувствие перспективности разработки заставило AMD и NVIDIA
вцепиться в Brook GPU, как питбуль. Если опустить маркетинговую политику, то,
реализовав все правильно, можно закрепиться не только в графическом секторе
рынка, но и в вычислительном (посмотри на специальные вычислительные карты и
серверы Tesla с сотнями мультипроцессоров), потеснив привычные всем CPU.
Естественно, «повелители FPS» разошлись у камня преткновения каждый по своей
тропе, но основной принцип остался неизменным – производить вычисления
средствами GPU. И сейчас мы подробнее рассмотрим технологию «зеленых» – CUDA
(Compute Unified Device Architecture).
Работа нашей «героини» заключается в обеспечении API, причем сразу двух.
Первый – высокоуровневый, CUDA Runtime, представляет собой функции, которые
разбиваются на более простые уровни и передаются нижнему API – CUDA Driver. Так
что фраза «высокоуровневый» применима к процессу с натяжкой. Вся соль находится
именно в драйвере, и добыть ее помогут библиотеки, любезно созданные
разработчиками NVIDIA: CUBLAS (средства для математических расчетов) и
FFT (расчет посредством алгоритма Фурье). Ну что ж, перейдем к практической
части материала.
Благодарность
Редакция выражает благодарность компании Inno3D и ее российскому представительству, оперативно предоставившему для тестирования видеокарту Inno3D GeForce GTX 1070 iChill X4.
AMD vs Nvidia + Intel
Использование видеокарт для неграфических вычислений требует определять их в системе как сопроцессоры и использовать через соответствующие API средствами драйвера. Это интерфейсы прикладного программирования OpenCL, CUDA и DirectCompute. По сути — три варианта написания кода для программ с поддержкой GPGPU.
Все эти годы концепция GPGPU активно развивалась в основном за счет открытого API OpenCL и проприетарной технологии Nvidia CUDA. За редким исключением все драйверы для графических решений AMD, Nvidia и Intel поддерживают OpenCL, но часто уровень этой поддержки оставляет желать лучшего. Например, заявление о поддержке OpenCL 2.0 на деле может означать, что в текущем драйвере и конкретном ГП поддерживаются лишь некоторые возможности версии 2.0.
Собственные тесты
Должен пояснить, что я не сторонник ни «красных», ни «зеленых». Просто для каждой задачи стоит подбирать свой инструмент и не пытаться сравнивать кита со слоном.
Команда TSC оформила в виде таблицы результаты разных видеокарт в реальных научных расчетах. Если отсортировать их с учетом энергоэффективности и универсальности применения, то всю верхнюю часть рейтинга будут занимать решения Nvidia с архитектурой Pascal, включая GTX 1070. Новейшие Radeon Vega и мощная R9 Fury встречаются в ней на 182-й строке и позже.
Современные ГП производства AMD подходят только для расчетов с поддержкой OpenCL, в то время как ГП Nvidia можно использовать и для OpenCL, и для CUDA-оптимизированных приложений. В отдельных случаях старые AMD выигрывают на операциях двойной точности ценой больших энергозатрат при решении обычных задач.
По сравнению с GTX 980Ti видеокарта на базе GTX 1070 демонстрирует небольшой прирост скорости вычислений — на 2,4%. Однако этот выигрыш наблюдается при существенном снижении потребляемой мощности — на 25% или на 50 Вт. Апгрейд стоит затевать уже ради этого.
Средняя скорость расчетов заданий GPUGrid Long run для GTX 980Ti
Средняя скорость расчетов заданий GPUGrid Long run для GTX 1070
Наш тестовый стенд остался прежним, но до GTX 1070 мы успели протестировать в научных расчетах множество других видеокарт и процессоров. В этой статье упоминаются только самые показательные результаты.
Наш стенд пережил майнинг, брутфорс паролей и продолжает заниматься научными расчетами
По сравнению с флагманами прошлых лет (GTX 680 и максимально близкой к ней GTX 770) у новой GTX 1070 скорость вычислений выросла более чем в четыре раза. Это видно даже на старых OpenCL-приложениях, не имеющих оптимизации для современных ГП Nvidia. Например, в проекте Einstein@Home на GTX 680 одно задание выполняется в среднем за 50 мин, а на GTX1070 — за 11,5 мин.
Итоговое время для GTX 680
Обработка диапазона данных в поисках двойных радиопульсаров на GTX 1070
Аналогичное задание на GTX 1070 выполняется в 4,3 раза быстрее
Параллельно видеокарта использовалась для тестов при написании статей про майнинг и брутфорс паролей. Тем не менее за два месяца смешанного тестирования GTX 1070 мы выполнили больший объем научных расчетов, чем до этого почти за пять лет на 20+ процессорах и паре эпизодически работающих старых видеокарт. Разница просто колоссальная.
Длительный период (до конца 2014 года) вычисления выполнялись только на процессорах нескольких компьютеров. Скорость прироста была ничтожной. Затем еще два года мы загружали расчетами старые видеокарты. Они всегда сильно грелись и шумели, а изображение лагало. С этим трудно мириться во время работы, поэтому расчеты выполнялись эпизодически.
В конце прошлого года друзья подарили мне GTX 680 специально для ускорения расчетов. К тому моменту эта карта уже плохо подходила для игр, но вполне справлялась с научными вычислениями. Давно хотелось попробовать ускоритель с архитектурой Kepler, да еще и содержащий 1536 CUDA-ядер!
Динамика научных расчетов на процессорах и видеокартах
Из-за мощного трехслотового охлаждения работала GTX 680 довольно тихо, но воздух нагревала прилично — все-таки двести ватт. Зимой это было очень кстати, но вот в жару. Посчитав за три месяца сотни разных заданий с ГП-оптимизацией, я заметил, что в одних проектах загрузка видеокарты заданиями BOINC почти не чувствуется, а в других — делает любую работу крайне некомфортной. Даже при наборе текста иной раз отмечались лаги. Поэтому я собрал комп с Core i7 и подключил монитор к его интегрированному видеоядру, а GTX 680 использовал только для расчетов. В таком варианте ее можно было использовать круглосуточно, и результативность вычислений выросла вдвое.
После GTX 680 настал черед тестировать GTX 980Ti, а затем и GTX 1070. У двух последних видеокарт с подключенным монитором совершенно не было лагов изображения при максимальной загрузке расчетами. Во всяком случае, они не замечались при работе с текстами, веб-серфинге, обработке картинок и просмотре фильмов. Однако для чистоты эксперимента мы все-таки подключали их без монитора. Первый крутой пик на графике соответствует подключению GTX 980Ti, а следующий за ним — заслуга GTX 1070.
Объемы вычислений в BOINC отображаются в очках (cobblestones). Десять очков — это 4,32 триллиона операций с плавающей запятой одинарной точности (FP32). Первый миллион очков мы набирали два года, используя до двадцати четырех процессорных ядер одновременно. Сейчас с одной GTX 1070 мы прибавляем более миллиона очков каждый день. Частота выплат в сети Gridcoin также возросла. Если раньше монетки начислялись один-два раза в месяц, то сейчас — практически ежедневно.
Ежедневное вознаграждение за научные расчеты
Формула тут простая: меньше энергозатрат, больше компенсация и выше результативность.
Однако есть тут и маленькая хитрость: некоторые проекты выплачивают дополнительные очки как вознаграждение за скорость выполнения заданий. К примеру, в GPUGrid есть три степени свежести решений: полученные в течение первых суток, двух и пяти дней с момента отправки заданий. За первые начисляют 50% очков, за вторые 25%, а за выполненные в интервале от 48 до 120 ч ничего не добавляют сверх. Расчеты недельной давности становятся неактуальными и не учитываются вовсе.
GTX 680 требовалось больше суток на одно задание
Большие CUDA-оптимизированные задания GPUGrid обрабатываются на топовых видеокартах за 8–12 ч. GTX 680 на них требовалось около 30 ч. Новая GTX 1070 часто справлялась за шесть часов и успевала обработать за сутки до четырех сложнейших заданий из области расчета третичной структуры белковых молекул и докинга лигандов.
GTX 1070 тратит меньше шести часов на задания, с которыми GTX 680 не справлялась и за сутки
Работаем!
Для полноценной работы с CUDA нужно:
1. Знать строение шейдерных ядер GPU, так как суть программирования
заключается в равномерном распределении нагрузки между ними.
2. Уметь программировать в среде C, с учетом некоторых аспектов.
Разработчики NVIDIA раскрыли «внутренности» видеокарты несколько
иначе, чем мы привыкли видеть. Так что волей-неволей придется изучать все
тонкости архитектуры. Разберем строение «камня» G80 легендарной GeForce 8800
GTX.
Шейдерное ядро состоит из восьми TPC (Texture Processor Cluster) – кластеров
текстурных процессоров (так, у GeForce GTX 280 – 15 ядер, у 8800 GTS
их шесть, у 8600 – четыре и т.д.). Те, в свою очередь, состоят из двух
потоковых мультипроцессоров (streaming multiprocessor – далее SM). SM (их всего
16) состоит из front end (решает задачи чтения и декодирования инструкций) и
back end (конечный вывод инструкций) конвейеров, а также восьми scalar SP (shader
processor) и двумя SFU (суперфункциональные блоки). За каждый такт (единицу
времени) front end выбирает варп и обрабатывает его. Чтобы все потоки варпа
(напомню, их 32 штуки) обработались, требуется 32/8 = 4 такта в конце конвейера.
Каждый мультипроцессор обладает так называемой общей памятью (shared memory).
Ее размер составляет 16 килобайт и предоставляет программисту полную свободу
действий. Распределяй как хочешь :). Shared memory обеспечивает связь потоков в
одном блоке и не предназначена для работы с пиксельными шейдерами.
Также SM могут обращаться к GDDR. Для этого им «пришили» по 8 килобайт
кэш-памяти, хранящих все самое главное для работы (например, вычислительные
константы).
Мультипроцессор имеет 8192 регистра. Число активных блоков не может быть
больше восьми, а число варпов – не больше 768/32 = 24. Из этого видно, что G80
может обработать максимум 32*16*24 = 12288 потоков за единицу времени. Нельзя не
учитывать эти цифры при оптимизации программы в дальнейшем (на одной чашу весов
– размер блока, на другой – количество потоков). Баланс параметров может сыграть
важную роль в дальнейшем, поэтому NVIDIA рекомендует использовать блоки
со 128 или 256 потоками. Блок из 512 потоков неэффективен, так как обладает
повышенными задержками. Учитывая все тонкости строения GPU видеокарты плюс
неплохие навыки в программировании, можно создать весьма производительное
средство для параллельных вычислений. Кстати, о программировании.
PlaidML: кроссплатформенность во главе угла
TensorFlow служит бэкэндом для Keras, интерпретируя его синтаксис и преобразуя его в инструкции, которые могут выполняться на процессоре или GPU. К сожалению, он поддерживает только видеокарты с технологией Nvidia CUDA.
PlaidML - альтернативный бэкэнд для Keras с поддержкой OpenCL. Его можно использовать для обучения моделей Keras на встроенной графике процессора, дискретном или даже внешнем графическом процессоре AMD. Он работает на Windows, Linux и Mac.
UPD: В своём комментарии пользователь MikeLP указал, что:
Keras задумывался как высокоуровневый интерфейс. Соответственно остальные бекенды, как PlaidML могли обеспечить работу с другими видеоускорителями без закрытой технологии CUDA. И так было до тех пор, пока авторы не заявили, что Keras будет развиваться только в рамках Tensorflow. Все — «накрылась медным тазом ваша качалка». И получается что PlaidML может работать только с Keras, a не с tf.Keras — API разбежалось. Cоответственно смысл юзать PlaidML, когда он не совместим с последней версией Keras API в Tensorflow. Пацаны из PlaidML (они часть Intel) были вынуждены поменять roadmap и идти в другом направлении.
По моему мнению, PlaidML ещё актуален, т.к. включение Keras в Tensorflow произошло недавно и API не успел существено поменяться. Однако дальшейшие перспективы Keras+PlaidML выглядят туманно.
Установка PlaidML очень проста. Нужно поставить Python-пакет и выбрать устройство в пошаговом конфигураторе:
В коде нужно прописать использование PlaidML как бэкэнда:
После этого все вычисления будут выполняться на видеокарте. Запустим бенчмарк:
Сравним результаты нашего видеоадаптера с некоторыми другими. RX 580 и Ryzen 2600 я тестировал локально, результаты остальных устройств взяты от других пользователей:
Согласно Дарвинской теории эволюции, первая человекообразная обезьяна (если
быть точным – homo antecessor, человек-предшественник) превратилась впоследствии
в нас. Многотонные вычислительные центры с тысячью и больше радиоламп,
занимающие целые комнаты, сменились полукилограммовыми ноутами, которые, кстати,
не уступят в производительности первым. Допотопные печатные машинки превратились
в печатающие что угодно и на чем угодно (даже на теле человека)
многофункциональные устройства. Процессорные гиганты вдруг вздумали замуровать
графическое ядро в «камень». А видеокарты стали не только показывать картинку с
приемлемым FPS и качеством графики, но и производить всевозможные вычисления. Да
еще как производить! О технологии многопоточных вычислений средствами GPU,
NVIDIA CUDA и пойдет речь.
Видеокарты как ускорители
Почему вообще считают на видеокартах? Любой процессор архитектуры x86-64 создавался как универсальный чип. Он умеет выполнять математические операции разных типов и разрядности, но платой за всеядность становится низкая скорость. В повседневной работе этот эффект не слишком заметен, поскольку в пользовательских приложениях преобладают простейшие арифметические операции. В научных же расчетах львиную долю составляют действия с массивами и приблизительными величинами. Центральный процессор обрабатывает их очень медленно, поэтому в профессиональных рабочих станциях и суперкомпьютерах для них используются специализированные платы — векторные ускорители.
WARNING
Научные расчеты длительно создают высокую нагрузку на процессор и видеокарту. Прежде чем запускать их, позаботься о качественном питании и охлаждении. Задать температурные ограничения тоже будет нелишним.
Ускорители для высокопроизводительных вычислений (HPC) часто построены на тех же чипах, что и топовые видеокарты, но имеют свои архитектурные особенности. Отдельные инженерные решения призваны повысить объем одновременно обрабатываемых данных и надежность круглосуточной работы с максимальной нагрузкой. Сами по себе они незначительно удорожают производство, однако себестоимость ускорителя определяется еще и малым объемом выпуска.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Денис, для этого кодека нельзя. Можно только nvenc в кодеке magix avc, а cuda только для рендера эффектов.
Ускорение, мне не под конкретный кодек, а в целом, можно ли поставить cuda на 2070, для корректного рендера в 3д
Доброго, выручайте советом.
Задача собирать простые видео для ютуба.
Разрешение 1920*1080 * 25
Привычно использовать вегас, версия подойдет любая, так как анимацией не практически не пользуюсь. На данный момент поставил 16.0
Теперь собственно вопрос -
как нагрузить видеокарту, так как гонит через процессор, а после интуитивно верных настроек, вообще зависает на этапе расчета времени рендера.
Железо - intel 4600
Nvidia GTX 560 TI,
Что уже попробовал, в настройках вегаса указал карту, во вкладке общее чекбокс нужный выставил (Allow legacy GPU).
Драйвера
DDU сносил, новые свежие поставил,
Cuda - отдельно скачал, поставил.
В некоторых режимах на вкладке система - проверка графического процессора - доступен CUDA,
В настройки самой Nvidia программе права дал (возможно не верно, так как там мало что понятно).
в окне render As - напротив некоторых форматов написано (intel QSV) - как понял это он через интеловскую будет гнать,
так же есть просто пустые строки, а желаемой NV - нет.
Подскажите с какого края к этому зверю ещё можно подойти? где какой крыжик еще посмотреть нужно?
Андрей, Если у вас есть intel 4600 то вам нужен кодек QSV (квик синк). Он работает более менее адекватно только начиная с 15 версии вегаса. В 12-13-14 с этим кодеком был геморой.
Чтобы задействовать карту 560 Ti нужен кодек Mainconcept AVC и в его настройках выбирать CUDA. Это работает точно в 12-13 вегасе. Насчет 14-го не знаю. Помню, что маджиксы эту функцию убирали в каких-то обновлениях, потом снова добавляли.
Если захотите обновить видеокарту, то начиная с 15 версии работает NVENC кодек на картах GTX 650-— RTX 2080 Ti Называется он Magix AVC NVENC
Ускорение, тогда прошу уточнить вот ещё что, верно ли я размышляю, что за рендер обязана отвечать видеокарта? Или рендерить на процессоре и не переживать?
Как я себе представлял, основной поток должен лечь на видеокарта во время рендера.
Андрей, Смотря какой кодек использовать. К примеру голое видео на 560 Ti в кодеке Mainconcept AVC CUDA будет быстрее 4 ядерного i7 раз в 5.
Читайте также: