Существует ли способ совместного использования GPU двумя отдельными программами с поддержкой OpenCL или, точнее, двумя отдельными процессами, которым одновременно требуется GPU для выполнения ядер OpenCL? Если да, то как это делается?
Совместное использование графического процессора между программами с поддержкой OpenCL
Ответы (2)
Это зависит от того, что вы называете обменом.
Как правило, вы можете создать 2 процесса, которые оба создают устройство OpenCL, на одном графическом процессоре. Тогда ответственность за то, чтобы все работало, ложится на драйвер/ОС/графический процессор.
Тем не менее, большинство реализаций будут сокращать время выполнения GPU, чтобы это произошло (точно так же, как это происходит с графикой).
Я чувствую, что это не совсем то, что вам нужно. Можете ли вы расширить свой вопрос с помощью варианта использования?
Текущие графические процессоры (кроме Fermi от NVidia) не поддерживают одновременное выполнение более одного ядра. Более того, на сегодняшний день графические процессоры не поддерживают вытесняющую многозадачность; это полностью кооператив! Выполнение ядра не может быть приостановлено и продолжено позже. Таким образом, степень детализации любого совместного использования графического процессора на основе времени зависит от времени выполнения ядер.
Если у вас запущено несколько программ, которым требуется доступ к графическому процессору, вы должны убедиться, что ваши ядра имеют короткое время выполнения (‹ 100 мс — это эмпирическое правило), чтобы время графического процессора можно было распределить по времени между ядрами, которым нужны циклы графического процессора. Это также важно сделать, поскольку в противном случае графика хост-системы перестанет отвечать на запросы, поскольку им также требуется доступ к графическому процессору. Это может дойти до того, что ядро в бесконечном или длинном цикле, по-видимому, приведет к сбою системы.