Re[17]: PCI-E
От: Andrew S Россия http://alchemy-lab.com
Дата: 22.09.06 13:09
Оценка:
AS>>С отключенным кешированием (в биосе это именно кешированием называлось) — да.

GN>Да эти названия маркетологи похоже придумывают


AS>>Впрочем, то, что это не кеширование в прямом смысле этого слова — тоже верно (хотя, смотря что понимать под словом кеширование. Если только отображаение в кэш процессора — тогда да).


GN>По кешированием понимаю перенос данных в более быстрое хранилище (для возможности повторного быстрого использования). А что еще под ним можно понимать?


Запись данных группами, например. В этом случае тоже происходит кеширование в буферах перед записью.

GN>Теперь о чтении видеопамяти. Поскольку память эта не кешируется в кеше CPU, то повторные чтения будут медленны. Так же, в случае обычной памяти, в кеш читается сразу несколько последовательных ячеек, что ускоряет доступ к последовательным элементам. Поэтому читать из видеопамять быстро никак не получится.

GN>Видимо, это учли про проектировании PCI-E или видеокарт для неё. И сделали быстрый аппаратный блиттинг, который может быстро скопировать большой объем памяти. На маленьких объёмах он будет проигрывать программному чтению (лишние вызовы ядра, отправка команд GPU). Фактически, копируя видеопамять в основную мы выполняем ручное кеширование.

Да не аппаратный это блиттинг, блин, ну сколько можно. Берем directx, получаем указатель на физическую поверхность, применяем алгоритмы из аллегро — получаем немного _быстрее_ gdi. По крайней мере, на моей 6600gt и 80-х драйверах. Ты не забывай, что PCI-E — это серьезная шина, ведь есть программный сли, который работает только через PCI-E, при этом всего на 20-30% медленнее получается, чем при связке через шнурок.

AS>>Копирование все-равно будет, посколько gdi это и так делает. Собирает оно или нет очень маленькие обновления — по идее должно, даже на уровне юзер. На практике же я этого не наблюдал. Поэтому в случае миррор дравера мы вынуждены рисовать 2 раза — один раз в видеопамять, а второй раз в системную. На любые изменения. И не просто копировать — а делать блиттинг, выводить текст и т.д. — т.е. делать заведомо более тормозные операции, чем тупое копирование данных.

AS>>Как я тебе уже тут показал, копирование из системной памяти в системную для PCI-E медленнее, чем из видео в системную. Итого, получается, при собирании все в системную память вместо работы с видео мы имеем:
AS>>1. Любое обновление обрабатывается 2 раза — один раз в видео, другой раз в системную память.

GN>Не так. Модифицируем системную память, и не чаще каждого кадра копируем в видеопамять. Можно копировать только изменения или другие оптимизации применять.


Ага. Т.е., в пределе, изменили один пискел — скопировали кадр. Красиво живем. Нет, текущий вариант DDI, хотя и позволяет некоторым образом кешировать битмапы (для поверхностей есть соотв. флаг), все равно не позволяет это делать нормально для mirror драйвера. То есть, конечно, если хочется большого секса — то можно пробовать, но в этом случае есть риск не сделать проект вообще, не то, что за сколь-либо приемлемое время.

AS>>2. ОБрабатываются _все_ операции, накопление невозможно.

AS>>3. Копирование системная-системная на современных машинах медленнее, чем видео-системная.

GN>Проблема в том, что на одно копирование системная-системная понадобтся 2 других: системная->видео и видео->системная. Или понядобится видео->системная, в то время, как из системной копировать не надо. Нужен скриншот — просто получил указатель в системной памяти и всё.


Нет, не так. У тебя есть 2 копирования — системная-видео и системная-системная, в случае миррор драйвера. Причем это, вообще говоря, не копирования, а конструирования изображения, что, сам понимаешь, обычно в РАЗЫ медленнее.
Итого, 2 конструирования. Причем то, которое в системную память, получается еще и медленнее, чем в видео, поскольку оно может, как ты и говоришь, быть ускорено аппаратно — тут все в руках разработчика драйвера. Великолепно.
В случае же чтения ИЗ видеопамяти у тебя одно конструирования системная-видео (то бишь, эта операция аналогична первому варианту) и одно копирование из видео в системную, причем копирование не при каждой операции DDI, а когда тебе захочется. Таким образом, конструирование из системной в системную память заменяется копированием из видео в системную, что, как ты понимаешь, получается значительно быстрее. А уже если это еще и аппаратно реализовать — ну.. ты понял. Итого — смысла постоянно копировать в системную память я не нашел. Наверное, я тупой

GN>Есть и обратная проблема — сейчас много чего рисуется аппаратно, стало быть — только в видеопамять. То есть я фактически предлагаю отказаться от аппаратного ускорения. Да, я знаю, что это ересь и противоречит пожеланиям инвесторов nVidia


Это и есть ересь. Все, что надо для миррор драйвера — установить свои правила по сбору обновлений. Т.е. кешировать обновления до тех пор, пока ему это надо. А затем давать user коду доступ именно к обновлениям, а не к целиковой back поверхности. А то создается ощущение, что вроде как сделали интерфейс, а когда начинаешь им пользоваться, оказывается, что для своих целей, и уж тем более для нормального взаимодействия с юзер-моде оно не приспособлено вообще. Пока этого не будет сделано нормально в интерфейсе DDI, миррор драйвер пригоден только для сбора регионов обновления и других мелких целей. Точка.

AS>>Ну и где же столь желаемые преймущества? Отвечу. А нету их. По крайней мере, для моих задач — я это тестировал довольно активно Причем различие — ну просто разительное.


GN>Дык правильно, сейчас ведь всё сделано не так, как надо.


... до основания, а затем...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[18]: PCI-E
От: gear nuke  
Дата: 22.09.06 14:26
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Запись данных группами, например.


Дык Это так и называется. Буржуйский термин — write combining.

AS>В этом случае тоже происходит кеширование в буферах перед записью.


Там происходит накопление данных. После этого данные из этого буфера пишутся один раз.

AS>Да не аппаратный это блиттинг, блин, ну сколько можно. Берем directx, получаем указатель на физическую поверхность, применяем алгоритмы из аллегро — получаем немного _быстрее_ gdi.


В этих алгоритмах память последовательно читается? Тогда понятно. Значит считывается целиком линейка и хранится где-то в буфере (вот это — кеш вне процессора). Буферов этих не много, и при непоследовательном чтении скорость должна упасть. Кеш CPU при рандомном доступе естесственно тоже не помогает, но если доступ "не сильно рандомный", будет намного лучше. Но, конечно, при работе с видеопамятью доступ обычно поледовательный! Красивое решение. А чипсет попробую угадать — nForce Плохо, что даташиты на них не доступны всем желающим


AS>Ага. Т.е., в пределе, изменили один пискел — скопировали кадр.


Зачем же. dirty rectangles можно использовать. ИМХО некоторый аппаратный механизм, который будет отслеживать изменения (не надо по-пиксельно) и потом копировать сам в видеопамять будет значительно проще и дешевле существующих монстров. Еще бы к нему немного памяти, что б он адреса изменений туда сам писал Фактически, смысл видеопамяти получится — кеш для RAMDAC.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[14]: PCI-E
От: Аноним  
Дата: 22.09.06 17:32
Оценка:
Khm a vi chasom ne nazivaete cachirovaniem to chto v BIOS (vrode s pentiumov takoe bilo no mot i ranshe) nazivalos Video BIOS/Memory shadow? Eto sovsem drugaya chtuka. Kstati niche ne dauschaya na sovremennih OS.
A vot Write combining eto da..
Re[15]: PCI-E
От: Andrew S Россия http://alchemy-lab.com
Дата: 22.09.06 20:15
Оценка:
А>Khm a vi chasom ne nazivaete cachirovaniem to chto v BIOS (vrode s pentiumov takoe bilo no mot i ranshe) nazivalos Video BIOS/Memory shadow?

Это не то. Так называется отображение video ROM в память. Мимо.

А> Eto sovsem drugaya chtuka. Kstati niche ne dauschaya na sovremennih OS.

А>A vot Write combining eto da..

Write combining это и есть вид кеширования. Уже говорили про это, ну сколько можно. Где формируются пакеты, слово подсказать, как это называется, а?
Никто ведь и не говорил, что данные кэшируются в кэше данных процессора — это по меньшей мере было бы глупо, учитывая затраты на синхронизацию по и без того не слишком быстрой шине. Впрочем, называть это можно как угодно, но сам смысл от этого не изменится.
Вот из мануала асус p2b
http://www.naic.edu/~wapp/DataSheets/ASUS_P2B.pdf#search=%22ASUS%20P2B%20manual%22
стр 46

Посмотрите, как там называется пункт, про который говорим.
Вот, кстати, из терминов:

Write Combining — объединенная запись — термин применяется при описании устройств кэш-памяти и означает накопление записываемой информации в кэш-памяти с последующим "выстреливанием" готового пакета данных на шину. Этот режим позволяет ускорить запись информации, например, в память видеокарты.

Ну и, что не так то?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[16]: PCI-E
От: Аноним  
Дата: 22.09.06 20:37
Оценка:
Vse tak. Imenno eto ya i pisal v message svoey
Re[19]: PCI-E
От: Andrew S Россия http://alchemy-lab.com
Дата: 22.09.06 20:43
Оценка:
AS>>В этом случае тоже происходит кеширование в буферах перед записью.

GN>Там происходит накопление данных. После этого данные из этого буфера пишутся один раз.


Кеширование и накопление в данном случае суть одно и то же. Ведь кэш не обязательно должен быть ассоциативным, и тем более совсем не обязательно должен выполняться силами процессора, абстрагируйтесь
Ладно, думаю, хватит флейма. У меня родился хороший совет по теме, как ускорить блиттинг. Лучше всего решить это дело аппаратно. Купить машину посвежее
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.