Множественная буферизация
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В информатике » увидит полную (хотя , множественная буферизация — это использование более чем одного буфера для хранения блока данных , так что « читатель возможно, старую) версию данных вместо частично обновленной версии данных. созданный « писателем ». Он очень часто используется для изображений, отображаемых на компьютере. Он также используется, чтобы избежать необходимости использования двухпортовой оперативной памяти (DPRAM), когда устройствами чтения и записи являются разные устройства.
Описание
[ редактировать ]Сеть Петри с двойной буферизацией
[ редактировать ]Сеть Петри на иллюстрации демонстрирует двойную буферизацию. Переходы W1 и W2 представляют запись в буфер 1 и 2 соответственно, а R1 и R2 представляют чтение из буфера 1 и 2 соответственно. Вначале включен только переход W1. После срабатывания W1 R1 и W2 включаются и могут работать параллельно. Когда они завершатся, R2 и W1 продолжат работу параллельно и так далее.
После начального переходного процесса, когда W1 срабатывает один, эта система становится периодической, и переходы активируются – всегда парами (R1 с W2 и R2 с W1 соответственно).
Двойная буферизация в компьютерной графике
[ редактировать ]В компьютерной графике двойная буферизация — это метод рисования графики, который показывает меньше заиканий, разрывов и других артефактов.
Программе сложно отрисовать дисплей так, чтобы пиксели не менялись более одного раза. Например, при обновлении страницы текста гораздо проще очистить всю страницу и затем нарисовать буквы, чем каким-то образом стереть только те пиксели, которые используются в старых буквах, но не в новых. Однако это промежуточное изображение воспринимается пользователем как мерцающее . Кроме того, компьютерные мониторы постоянно перерисовывают видимую видеостраницу (традиционно примерно 60 раз в секунду), поэтому даже идеальное обновление может быть видно на мгновение как горизонтальный разделитель между «новым» изображением и неперерисованным «старым» изображением. известный как разрыв .
Программная двойная буферизация
[ редактировать ]Программная реализация двойной буферизации позволяет всем операциям рисования сохранять свои результаты в некоторой области системной оперативной памяти ; любую такую область часто называют «задним буфером». Когда все операции рисования считаются завершенными, весь регион (или только измененная часть) копируется в видеоОЗУ ( «передний буфер»); лучом монитора это копирование обычно синхронизируется с растровым , чтобы избежать разрывов. Программные реализации двойной буферизации обязательно требуют больше памяти и времени ЦП, чем одинарная буферизация, из-за системной памяти, выделенной для заднего буфера, времени операции копирования и времени ожидания синхронизации.
Компоновочные оконные менеджеры часто сочетают операцию «копирования» с « композицией », используемой для позиционирования окон, их преобразования с помощью эффектов масштабирования или деформации и создания прозрачных частей. Таким образом, «передний буфер» может содержать только составное изображение, видимое на экране, в то время как для каждого окна, содержащего некомпозитное изображение всего содержимого окна, существует другой «задний буфер».
Перелистывание страниц
[ редактировать ]В методе переворота страницы вместо копирования данных можно отображать оба буфера. В любой момент времени один буфер активно отображается на мониторе, а другой, фоновый буфер, отрисовывается. Когда фоновый буфер заполнен, их роли меняются. Переворот страницы обычно выполняется путем изменения аппаратного регистра в контроллере видеодисплея — значения указателя на начало данных отображения в видеопамяти.
Переворот страниц происходит намного быстрее, чем копирование данных, и может гарантировать, что разрыв не будет виден, пока страницы переключаются во время интервала вертикального гашения монитора — периода пустого изображения, когда видеоданные не прорисовываются. Активный и видимый в данный момент буфер называется передним буфером , а фоновая страница называется задним буфером .
Тройная буферизация
[ редактировать ]В компьютерной графике тройная буферизация аналогична двойной буферизации, но может обеспечить повышенную производительность. При двойной буферизации программа должна дождаться, пока готовый рисунок будет скопирован или заменен, прежде чем начинать следующий рисунок. Этот период ожидания может составлять несколько миллисекунд , в течение которых ни один из буферов не может быть затронут.
При тройной буферизации программа имеет два задних буфера и может сразу начать рисовать в том, который не участвует в таком копировании. Третий буфер, передний буфер, считывается видеокартой для вывода изображения на монитор. После отправки изображения на монитор передний буфер переворачивается (или копируется) с задним буфером, содержащим самое последнее полное изображение. Поскольку один из задних буферов всегда заполнен, видеокарте никогда не приходится ждать завершения работы программного обеспечения. Следовательно, программное обеспечение и видеокарта полностью независимы и могут работать в своем собственном темпе. Наконец, отображаемое изображение было запущено без ожидания синхронизации и, следовательно, с минимальной задержкой. [1]
Поскольку программный алгоритм не опрашивает графическое оборудование на предмет событий обновления монитора, алгоритм может непрерывно отрисовывать дополнительные кадры с такой скоростью, с которой оборудование может их визуализировать. Для кадров, которые завершаются намного быстрее, чем интервал между обновлениями, можно несколько раз заменить кадры заднего буфера более новыми итерациями перед копированием. Это означает, что в задний буфер могут быть записаны кадры, которые вообще никогда не используются, прежде чем они будут перезаписаны последующими кадрами. Nvidia реализовала этот метод под названием «Быстрая синхронизация». [2]
Альтернативный метод, иногда называемый тройной буферизацией, представляет собой цепочку обмена длиной в три буфера. После того, как программа нарисовала оба обратных буфера, она ждет, пока первый из них не появится на экране, прежде чем нарисовать еще один задний буфер (т. е. это очередь длиной в 3 человека : первый вошел, первый ушел ). Большинство игр для Windows, похоже, используют этот метод при включении тройной буферизации. [ нужна ссылка ]
Четверная буферизация
[ редактировать ]Термин «четверная буферизация» означает использование двойной буферизации для каждого изображения левого и правого глаза в стереоскопических реализациях, то есть всего четыре буфера (если бы использовалась тройная буферизация, тогда было бы шесть буферов). Команда замены или копирования буфера обычно применяется к обеим парам одновременно, поэтому ни один глаз не видит более старое изображение, чем другой глаз.
Четверная буферизация требует специальной поддержки в драйверах видеокарты, которая отключена для большинства потребительских карт. Его поддерживают серии AMD Radeon HD 6000 и новее. [3]
3D standards like OpenGL [4] и Direct3D поддерживает четырехкратную буферизацию.
Двойная буферизация для DMA
[ редактировать ]Термин «двойная буферизация» используется для копирования данных между двумя буферами для передачи с прямым доступом к памяти (DMA) не для повышения производительности, а для удовлетворения конкретных требований к адресации устройства (особенно 32-битных устройств в системах с более широкой адресацией, обеспечиваемой через физический интерфейс). Расширение адреса ). [5] DOS и Windows Драйверы устройств — это место, где, скорее всего, будет использоваться термин «двойная буферизация». Исходный код Linux и BSD называет эти «буферы отражения». [6]
Некоторые программисты пытаются избежать такого рода двойной буферизации с помощью методов нулевого копирования .
Другое использование
[ редактировать ]Двойная буферизация также используется как метод облегчения чересстрочной развертки или деинтерлейсинга видеосигналов.
См. также
[ редактировать ]- Адаптивное обновление плитки
- Вертикальная синхронизация
- Стереоскопия
- очки с затвором LC
- Nvidia 3D Vision
- HD3D
- Службы виртуального DMA (VDS)
Ссылки
[ редактировать ]- ^ «Тройная буферизация: почему нам это нравится» . АнандТех. 26 июня 2009 года . Проверено 16 июля 2009 г.
- ^ Смит, Райан. «Обзор NVIDIA GeForce GTX 1080 и GTX 1070 Founders Edition: начало поколения FinFET» . Проверено 1 августа 2017 г.
- ^ Сообщество AMD [ мертвая ссылка ]
- ^ «Спецификация OpenGL 3.0, глава 4» (PDF) .
- ^ «Расширение физического адреса — память PAE и Windows» . Центр разработки оборудования Microsoft Windows. 2005 . Проверено 7 апреля 2008 г.
- ^ Горман, Мел. «Понимание диспетчера виртуальной памяти Linux, буферы отказов 10.4» .
Внешние ссылки
[ редактировать ]- Тройная буферизация: бесплатно улучшите производительность вашего ПК в играх Майк Дулиттл (24 мая 2007 г.)
- Графика 10. Архивировано 18 августа 2016 г. на Wayback Machine.