определить глобальную память, доступную на GPU с JOCL? - PullRequest
1 голос
/ 06 мая 2011

Я пишу JOCl.org (который отличается от jogamps jocl), работающий на GPU.Мы работали с достаточным количеством данных, и мне нужно быть осторожным, чтобы не превысить глобальный предел памяти GPU.Для этого мне нужен способ программно определить, сколько памяти имеет графический процессор.Я предполагаю, что для этого должен быть простой метод / переменная JOCL, но по какой-то причине я не могу понять, что это такое.Я посмотрел на CL.CL_MEM_SIZE и CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, но оба возвращают что-то около 4100;Я знаю, что в настоящее время я работаю с видеокартой, которая должна содержать 512 МБ.

Кроме того, я не могу использовать почти столько же памяти, сколько нужно.В моем худшем случае мне нужно запустить ядро, которое обрабатывает кадры с 2 ^ 22 числами с плавающей запятой и внутренне потребует вдвое больше данных, чем размер кадра.Если я попытаюсь кэшировать два кадра (то есть 2 кадра * 2 ^ 22 * ​​2 ^ 2 байта / число с плавающей запятой * 2 для служебных данных = 2 ^ 26), я могу без затруднений кэшировать, но когда я увеличиваю свое кэширование, я обрабатываю три кадра свремя (или 2 ^ 25 * 3) у меня заканчивается память.Тем не менее, я считаю, что я должен использовать только ~ 100 из моих 512 МБ глобальной памяти.Я считаю, что я правильно освобождаю память, когда она не используется, но, видимо, я либо делаю что-то не так, либо неправильно истолковываю объявленные 512 МБ графического процессора.Может ли кто-нибудь помочь мне объяснить эту путаницу?

Есть ли способ, которым я могу профилировать графический процессор, чтобы получить представление о фактическом использовании памяти?

Ответы [ 2 ]

0 голосов
/ 09 мая 2011

CL.CL_MEM_SIZE и CL_DEVICE_GLOBAL_MEM_CACHE_SIZE являются постоянными значениями, которые используются как параметры для clGetDeviceInfo для запроса устройства.

http://www.jocl.org/doc/org/jocl/CL.html#clGetDeviceInfo(org.jocl.cl_device_id, int, long, org.jocl.Pointer, long [])

Метод clGetDeviceInfo - это метод, который вы используете для запроса информации об устройстве.Возвращает значение параметра, который вы запросили в param_name.Ссылка содержит список всех доступных имен параметров с кратким объяснением.(CL_DEVICE_GLOBAL_MEM_SIZE должен быть тем, кого вы ищете).

0 голосов
/ 07 мая 2011

взгляните на приложение CLInfo веб-запуска: http://jogamp.org/deployment/webstart-next/jocl-demos/clinfo.jnlp (проект: http://jogamp.org/jocl-demos/www/) или запустите версию командной строки:

java -jar jocl.jar:gluegen-rt.jar -Djava.library.path="path/to/jocl/libs:path/to/gluegen-rt/libs" com.jogamp.opencl.util.CLInfo

отобразит полное считывание всех свойств устройства. Свойства CL_DEVICE_GLOBAL_MEM_SIZE и CL_DEVICE_MAX_MEM_ALLOC_SIZE, вероятно, являются реквизитом, который вы ищете.

[править] свойства задокументированы здесь: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html

...