2016-06-02 3 views
0

Я использую два GPU одинаковой конфигурации для расчета HPG GPGPU с использованием OpenCL. Одна из карт подключена для отображения, а около 200-300 МБ памяти всегда используются двумя программами, называемыми compiz и x server.

Мой вопрос в том, что при использовании этих графических процессоров для вычисления я могу использовать только частичный объем общей памяти в графическом процессоре, который используется для показа, тогда как второй GPU я могу использовать всю глобальную память.

В моем случае я использую два Nvidia Quadro 410, который имеет 192 ядра cuda, 512 МБ в качестве памяти, но 503 МБ. В случае показа графического процессора я могу использовать только 128 Мбайт для вычисления, и я могу использовать полные 503 МБ для расчета.
Использование памяти в двух графических процессорах (Multi GPU)

Согласно The OpenCL Specification Page 32

Максимальный размер памяти OBJ ЭСТ распределения в байтах. Минимальное значение составляет не более (1/4 й из CL_DEVICE_GLOBAL_MEM_SIZE , 128 * 1024 * 1024)

Также не должны это держать хорошо для всех присутствующих на GPU в системе?

ответ

2

Просто продолжайте читать с этого момента, вы увидите

Max size of memory object allocation 
in bytes. The minimum value is max 
(1/4th of 
CL_DEVICE_GLOBAL_MEM_SIZE , 
128*1024*1024) 

так в зависимости от того, что больше, 128 Мб или 1/4 от общего числа; будет предел.

+0

Хорошо, это решает использование памяти моего основного графического процессора. Что касается моего дополнительного GPU (который не подключен к моему дисплею), который я хочу использовать для вычислительной цели, как я могу использовать весь объем глобальной памяти? – pradyot

+0

Вы уверены, что нет общей памяти из системной памяти в настройках BIOS? –

+0

Да, я уверен. Я запустил программу умножения матриц на моем втором графическом процессоре, и перекрестно проверил ее с сервером nvidia-smi и nvidia x. Оба показали использование памяти.И когда я дал значения больше, чем его глобальная память, как и ожидалось, я получил CL_OUT_OF_RESOURCES – pradyot

1

OpenCL автоматически заменит данные или графический процессор, поэтому на самом деле вы не ограничены глобальной памятью GPU, вы можете использовать больше памяти, если вы не используете ее одновременно. Вы можете «obviusly» не создавать такие большие объекты, которые не подходят для памяти GPU. То есть, где этот предел умирает.

Ограничение тока макс для каждого объекта является как указывает @huseyin

CL_DEVICE_MAX_MEM_ALLOC_SIZE (cl_ulong) Максимальный размер размещения объекта памяти в байтах. Минимальное значение составляет не более (1/4 го CL_DEVICE_GLOBAL_MEM_SIZE, 128 * 1024 * 1024)

minimun_max_global_size = max(1/4*global, 128MB) 

Если вы читали Точным, это минимальное значение для максимального размера выделения. (Хитрая формулировка!) , Вероятно, nVIDIA устанавливает его на 1/4 на графическом дисплее и на весь размер памяти на графическом дисплее без дисплея. Но nVIDIA следит за спецификацией, делая это в обоих случаях.

Это то, что вы должны запросить и работать в пределах отчетов API. Вы не можете изменить его, и вы не должны догадываться об этом.

+0

Как вы можете подтвердить/подтвердить, когда говорите «все размеры памяти на графике без отображения»?
Я уже давно работаю над OpenCL. Я не смог найти какой-либо документ, который объясняет, почему я могу использовать полную глобальную память из моего второго GPU. – pradyot

+0

Это зависит от реализации драйвера, другие производители могут делать по-другому и даже другую версию драйвера nVIDIA. Spec только определяет минимальное значение, которое должно иметь максимальное значение, а определение - для каждого устройства. Таким образом, водитель может иметь разные значения на разных устройствах в соответствии с его критериями, это не ошибка, и это не то, что можно исправить или изменить или даже догадаться заранее. Моя личная догадка заключается в том, что, поскольку второй GPU является «вспомогательным» графическим процессором, вся его память выделяется для OpenCL/CUDA, но я просто думаю, почему драйвер ведет себя так ... – DarkZeros

+0

Да, это минимально, почти 1500 МБ принимается (не более) для карты 2 ГБ. Просто попробовал. –

Смежные вопросы