В чем разница между Nvidia Hyper Q и Nvidia Streams?

Я всегда думал, что технология Hyper-Q — это не что иное, как потоки в GPU. Позже я обнаружил, что ошибался (правда?). Итак, я читал о Hyper-Q и еще больше запутался. Я просматривал одну статью, и в ней было два утверждения:

А. Hyper-Q – это гибкое решение, позволяющее разделять подключения из нескольких потоков CUDA, из нескольких процессов интерфейса передачи сообщений (MPI) или даже из нескольких потоков внутри процесса.

Б. Hyper-Q увеличивает общее количество подключений (очередей работ) между хостом и графическим процессором GK110, обеспечивая 32 одновременных аппаратно-управляемых подключения (по сравнению с одним подключением, доступным с Fermi)

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


person sandeep.ganage    schedule 22.05.2019    source источник


Ответы (1)


Думайте о HyperQ как о потоках, реализованных аппаратно на стороне устройства.

До появления HyperQ, например. на Fermi команды (запуски ядра, передача памяти и т. д.) из всех потоков помещались в единую рабочую очередь драйвером на хосте. Это означало, что команды не могли обгонять друг друга, и вы должны были быть тщательно выдавая их в правильном порядке на хосте для достижения наилучшего перекрытия.

На графическом процессоре GK110 и более поздних устройствах с HyperQ на устройстве имеется (как минимум) 32 рабочих очереди. Это означает, что команды из разных очередей можно переупорядочивать друг относительно друга до тех пор, пока они не начнут выполняться. Таким образом, оба порядка в приведенном выше примере приводят к хорошему перекрытию на устройстве GK110.

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

Обратите внимание, что из 32 аппаратных очередей только 8 используются по умолчанию для экономии ресурсов. Установите среду CUDA_​DEVICE_​MAX_​CONNECTIONS переменная на более высокое значение, если вам нужно больше.

person tera    schedule 22.05.2019
comment
(Если MPS не включен), могут ли несколько контекстов CUDA, которые были созданы с помощью нескольких процессов MPI или нескольких потоков, быть запланированы одновременно в нескольких рабочих очередях Hyper-Q одновременно? - person aka.ffff; 17.01.2021