Я пишу 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 МБ графического процессора.Может ли кто-нибудь помочь мне объяснить эту путаницу?
Есть ли способ, которым я могу профилировать графический процессор, чтобы получить представление о фактическом использовании памяти?