OpenGL очистка Памяти GPU, требуемая?

Я должен очистить весь DisplayLists, Структуры, (Геометрия-) Программы построения теней и так далее вручную через glDelete* функции, или мадам GPU становится освобожденной автоволшебно, когда моя Программа выходит/разрушает?

Примечание: Мадам GPU обращается к специализированной памяти на выделенной Видеокарте, не памяти ЦП.

7
задан genpfault 21 June 2013 в 16:42
поделиться

4 ответа

Освободите контекст, все остальное является локальным для контекста (если вы не включили совместное использование списка отображения) и исчезнет вместе с ним.

14
ответ дан 6 December 2019 в 07:50
поделиться

Возможно, вы также захотите рассмотреть модель memento для этого, мы используем ее, и она работает блестяще для отмены.

-121--1858868-

При работе со статическим HTML существует множество вариантов, которые рассматриваются в других ответах. Однако если вам нужна поддержка JavaScript и вы хотите остаться в Python, я рекомендую использовать webkit для визуализации веб-страницы (включая JavaScript), а затем изучить полученный HTML. Например:

import sys
import signal
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

class Render(QWebPage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.html = None
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()

    def _finished_loading(self, result):
        self.html = self.mainFrame().toHtml()
        self.app.quit()


if __name__ == '__main__':
    try:
        url = sys.argv[1]
    except IndexError:
        print 'Usage: %s url' % sys.argv[0]
    else:
        javascript_html = Render(url).html
-121--2634549-

При выходе из программы (или сбое) любая выделенная память должна быть в конечном итоге освобождена таким же образом, как основная память при выходе программы. Может пройти некоторое время, прежде чем графический процессор "поймет", что память снова доступна для использования.

Однако вы не должны полагаться на это поведение, поскольку оно может зависеть от того, как были реализованы драйверы видеокарт. Гораздо лучше делать явные вызовы очистки, когда вы (как программист) знаете, что вам больше не понадобится эта память.

1
ответ дан 6 December 2019 в 07:50
поделиться

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

0
ответ дан 6 December 2019 в 07:50
поделиться

Можно ли вместо исключения использовать include? Например,

include = (('request', ('inputter', ('username', 'therestofthefields'))))

Я не помню, если я написал исключить , чтобы быть столь же универсальным, как включать .

Кроме того, джанго-поршневая группа Google является местом, где мы обсуждаем большинство вещей, вы можете иметь больше успеха, задавая этот вопрос там.

-121--4950577-

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

-121--4407437-

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

BTW, здесь я беру исключение из ответа КрисФ. Водитель не должен решать, что ему нужно делать очистку. Модели драйверов ОС будут иметь четкий интерфейс между драйверами OpenGL пользовательского режима (это не должно приводить к фактическому распределению ресурсов gfx, поскольку они совместно используются в машине), ОС (которая обеспечивает эквивалент системных вызовов для распределения ресурсов) и драйвер режима ядра (то есть просто для выполнения заказов ОС способом, совместимым с gpu). Это, по крайней мере, относится к моделям WIN2K и WDDM.

Так что... в случае сбоя или другого завершения процесса в этих моделях вызов драйвера режима ядра для освобождения всех ресурсов, связанных с процессом, является обязанностью ОС.

Теперь, следует ли или нет, это действительно то, что немного похоже на запрос вкладок или пробелов в исходном коде. У разных людей здесь разные убеждения. "ОС сделает это в любом случае, немедленный выход - это лучший опыт конечного пользователя" против ". Я хочу знать, утекаю ли я память, потому что, если моя программа работает долго, я действительно не хочу, чтобы она приводила к ошибкам OOM. Лучший способ сделать это - быть свободным от утечек на протяжении "- это 2 основных направления мысли, о которых я знаю.

9
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: