Научно-образовательный IT-форум при КНИТУ-КАИ

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Учебные материалы » Программирования графических процессоров NVIDIA


Программирования графических процессоров NVIDIA

Сообщений 11 страница 16 из 16

1

Предлагаем Вам пройти видеокурсы по программированию массивно-параллельных процессоров. Пройдя предлагаемые курсы, Вы получите широкий спектр практических навыков, которые позволят Вам к концу занятий овладеть основами программирования современных графических процессоров (GPU) NVIDIA.

Видеокурс №1
(А. Шевченко, А. Ивахненко, 2013 г.)

http://forumfiles.ru/files/000c/4b/84/94641.png

Видеокурс №2
(Е. Перепёлкин, 2014 г.)

http://forumfiles.ru/files/000c/4b/84/94641.png

Материалы к видеокурсам

http://forumfiles.ru/files/000c/4b/84/76762.gif

Онлайн-тестирование
по видеокурсу №1

http://forumfiles.ru/files/000c/4b/84/22783.png

Заметка:
Для лучшего усвоения видеоматериалов по программированию графических процессоров NVIDIA следует знать основы программирования на С/C++. Для тех, кто не обладает знаниями в данных языках программирования и не имеет достаточно времени для покрытия данного пробела, рекомендую пройти обучение по С++ посредством ресурса sololearn. Приложение по обучению можно установить на смартфон или планшет, что позволяет иметь обучающий ресурс всегда под рукой.

C++ Tutorial

http://forumfiles.ru/files/000c/4b/84/91778.png

11

Вадим Коробейников написал(а):

1. Латентность - количество тактов между появлением инструкции и завершением ее исполнения.
     Судя по количеству тактов, которое равно 11, можно сделать вывод что речь идет латентности арифметических операций. (Т.к. латентность инструкций обращения в память в разы выше, например для доступа к глобальной памяти это 400-800 тактов).
     Полная загруженность вычислительных ресурсов достигается когда все планировщики варпов в каждом такте имеют варп, готовый на исполнение. Таким образом, латентности каждой инструкции скрывается путем передачи инструкций на исполнение другим варпам.

2. Существует теорема Литтла (Little's Law), которая может быть применена и для GPU:

Необходимое_число_варпов = Латентность * Число_исполняемых_варпов_за_такт

     В нашем случае латентность равна 11, чтобы иметь 4 варпа (при этом достигается полная загруженность при 4х планировщиках варпов) запущенными в одном и том же цикле, нам нужно 11*4 = 44 варпа.

Professional CUDA  Programming (page 90)

Отредактировано Вадим Коробейников (Вчера 23:27:50)


Пожалуй, наиболее полный и правильный ответ. Мне думается, что в лекции следовало бы отметить, что требуется загрузить 11 срезов инструкций 4-х варпов для передачи инструкций ядрам (core) без задержек. Порой возникает недоумение, когда говорят, что нужно 44 варпа для покрытия латентности в 11 тактов, ведь варп это группа из 32 нитей, где каждая нить итак содержит множество инструкций. Но это только мое понимание. Готов подискутировать. :)

Ниже прилагаю описание работы Dual Warp Scheduler архитектуры Fermi (GT200).

The SM schedules threads in groups of 32 parallel threads called warps. Each SM features two
warp schedulers and two instruction dispatch units, allowing two warps to be issued and
executed concurrently. Fermi’s dual warp scheduler selects two warps, and issues one
instruction from each warp to a group of sixteen cores, sixteen load/store units, or four SFUs.
Because warps execute independently, Fermi’s scheduler does not need to check for
dependencies from within the instruction stream. Using this elegant model of dual-issue, Fermi
achieves near peak hardware performance.

https://bitbucket.org/landwatersun/forum/downloads/201711241120.jpg

Most instructions can be dual issued; two integer instructions, two floating instructions, or a
mix of integer, floating point, load, store, and SFU instructions can be issued concurrently.
Double precision instructions do not support dual dispatch with any other operation.


Полный материал доступен по ссылке.

Сравнение с теоремой Литтла просто шикарное! Для тех, кто не в курсе:

Первое доказательство теоремы было представлено сравнительно недавно - в 1961г. Оно было сделано Джоном Литтлом (John Dutton Conant Little), который последние 47 лет работает профессором Массачусетского Технологического Института. Кроме теоремы, Литтл известен своими работами по маркетингу и считается родоначальником научного подхода в этой области (marketing science).

Классическая, более известная формулировка теоремы гласит, что среднее количество клиентов (N) в стабильно-функционирующей системе, равно произведению усредненной скорости прибытия клиентов (lambda) на среднее время, которое они проводят в системе(T):

https://bitbucket.org/landwatersun/forum/downloads/201711241128.jpg

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

12

Здравствуйте, у меня есть такой общий вопрос, связанный с программированием на GPU:
Сейчас я работаю на позиции Embedded разработчика на C/C++ под Linux, но хочу сменить направление своей профессиональной деятельности в сторону разработки под GPU (не обязательно Nvidia CUDA).
Мой вопрос в следующем - у меня присутствует некоторое непонимание того, какие направления связанные с GPU сейчас есть на мировом рынке вакансий.
Не могли бы вы сделать некоторый экскурс по наиболее популярным и перспективным вакансиям в этой сфере?
Это могут быть вычисления на GPU или направления связанные с рендером, ещё было бы круто послушать про вакансии в сфере gamedev)

13

Добрый день, Алексей,

В настоящее время GPU, как вы знаете, используются во многих областях. Самые перспективные направления: машинное обучение (искусственные нейронные сети), биг дата, блокчейн, видеоигры. Также GPU могут использоваться в СУБД, криптографии. Все эти сферы объединяет параллелизм.
На практике, для того, чтобы задействовать CUDA ядра графической карты не обязательно создавать низкоуровневые программы на языке С/С++. Существует большое количество фреймворков и библиотек.

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

Алексей, рекомендую просто ознакомится со списком вакансий в вашем городе, например, на сайте hh.ru

14

Спасибо за наводку!
Некоторые уточнения - мне как раз больше интересны вакансии на которых используются низкоуровневые программы, на какие сферы/компании тогда обращать внимание?

15

Я не эксперт в области подбора работы) Выводы могу делать опираясь на вакансии.

Если вам интересно низкоуровневое программирование (С++) то можно также посмотреть вакансии связанные с анализом данных и компьютерным зрением. Хоть и этих вакансий будет меньше.
Предлагаю посмотреть самому: hh.ru/search/vacancy?text=CUDA&only_with_salary=false&area=113&enable_snippets=true&clusters=true&salary=

Если вы рассматриваете вакансии, не связанные с GPU, для вас так же открыта сфера программирования современных микроконтроллеров и микропроцессоров (например Эльбрус).

16

Владимир написал(а):

Я не эксперт в области подбора работы) Выводы могу делать опираясь на вакансии.

Если вам интересно низкоуровневое программирование (С++) то можно также посмотреть вакансии связанные с анализом данных и компьютерным зрением. Хоть и этих вакансий будет меньше.
Предлагаю посмотреть самому: hh.ru/search/vacancy?text=CUDA&only_with_salary=false&area=113&enable_snippets=true&clusters=true&salary=

Если вы рассматриваете вакансии, не связанные с GPU, для вас так же открыта сфера программирования современных микроконтроллеров и микропроцессоров (например Эльбрус).


Спасибо за ссоветы, впринципе, вы ответили на мой вопрос)


Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Учебные материалы » Программирования графических процессоров NVIDIA