Совместное использование графического процессора между программами с поддержкой OpenCL

Существует ли способ совместного использования GPU двумя отдельными программами с поддержкой OpenCL или, точнее, двумя отдельными процессами, которым одновременно требуется GPU для выполнения ядер OpenCL? Если да, то как это делается?


person Chris    schedule 29.07.2010    source источник


Ответы (2)


Это зависит от того, что вы называете обменом.

Как правило, вы можете создать 2 процесса, которые оба создают устройство OpenCL, на одном графическом процессоре. Тогда ответственность за то, чтобы все работало, ложится на драйвер/ОС/графический процессор.

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

Я чувствую, что это не совсем то, что вам нужно. Можете ли вы расширить свой вопрос с помощью варианта использования?

person Bahbar    schedule 05.08.2010
comment
Вариант использования — это один процесс, использующий OpenCL для использования графического процессора в течение длительного периода времени. Если запущен другой процесс OpenCL, для которого также требуется GPU, как это обрабатывается? Ваш ответ предполагает, что драйвер будет делить время, то есть выделять весь GPU одному процессу в любой момент времени. Конечно, это неэффективно, учитывая, что данные, связанные с каждым процессом, должны копироваться вперед и назад между устройством и хостом? - person Chris; 17.08.2010
comment
@Chris: короткий ответ заключается в том, что не все данные нужно копировать. выполнение выполняется с разделением по времени, но память может оставаться общей, если обе помещаются на карту (память виртуализирована. См. URL-адрес ниже). Если он не подходит, то он точно скопирует данные. Детализация разделения времени также грубая. Предполагая, что мы говорим об окнах, в WDDM 1.1 работа ядра CL никогда не прерывается и многое другое. См. en.wikipedia.org/wiki/Windows_Display_Driver_Model для получения дополнительной информации. - person Bahbar; 17.08.2010
comment
В частности: download.microsoft .com/download/5/b/9/ - person Bahbar; 17.08.2010
comment
PPT был действительно интересным. Как будет реализовано более точное разделение времени в Linux? - person Chris; 17.08.2010
comment
@ Крис: Без понятия. Что точно, так это то, что аппаратное обеспечение графического процессора, по крайней мере, до текущего поколения, еще не поддерживает произвольное разделение времени (Fermi может быть исключением, не уверен). Таким образом, ОС не может предоставить то, что не поддерживает аппаратное обеспечение. - person Bahbar; 18.08.2010
comment
Хорошо, спасибо за обсуждение. Кажется, Fermi поддерживает лучшее переключение контекста и параллельное выполнение ядра: содержание/PDF/fermi_white_papers/ - person Chris; 18.08.2010

Текущие графические процессоры (кроме Fermi от NVidia) не поддерживают одновременное выполнение более одного ядра. Более того, на сегодняшний день графические процессоры не поддерживают вытесняющую многозадачность; это полностью кооператив! Выполнение ядра не может быть приостановлено и продолжено позже. Таким образом, степень детализации любого совместного использования графического процессора на основе времени зависит от времени выполнения ядер.

Если у вас запущено несколько программ, которым требуется доступ к графическому процессору, вы должны убедиться, что ваши ядра имеют короткое время выполнения (‹ 100 мс — это эмпирическое правило), чтобы время графического процессора можно было распределить по времени между ядрами, которым нужны циклы графического процессора. Это также важно сделать, поскольку в противном случае графика хост-системы перестанет отвечать на запросы, поскольку им также требуется доступ к графическому процессору. Это может дойти до того, что ядро ​​в бесконечном или длинном цикле, по-видимому, приведет к сбою системы.

person dietr    schedule 28.08.2010