В первом столбце таблиц на рис. 17.3 показаны время выполнения функции GetPixel () и размер картинки, в остальных - время копирования области экрана.
Рис. 17.3. Время копирования При увеличении размера копируемого участка время первого чтения цвета точки изменяется незначительно, а время второго чтения увеличилось от 5 мкс для картинки 30 х 30 до 3909 мкс для картинки 300 х 300. Это различие довольно просто объясняется. Дело в том, что при первом чтении цвета точки функция GetPixel () начала выполняться немедленно, затем при вызове функций копирования экрана ускоритель поставил двадцать заявок на копирование в очередь и, возможно, начал выполнять первое копирование к тому времени, когда было вызвано второе чтение цвета точки GetPixel (). Вторая операция чтения не может исполняться немедленно, функция должна прочитать тот цвет точки, который получится в результате выполнения всех ранее вызванных операций. Поэтому фактическое чтение цвета точки выполнится после обслуживания всех заявок
Работа с растровыми изображениями
на копирование. Таким образом, время выполнения второго вызова GetPi xel () кроме собственно чтения цвета включает в себя время на выполнение операций копирования экрана.
Чтобы оценить время копирования, необходимо знать, совмещает ли ускоритель процесс приема заявок с их обслуживанием или при непрерывном поступлении заявок вывод изображений на экран прекращается. Для получения ответа нужно обратить внимание на то, что если длительность копирования оценивать разностью времен второго и первого чтения цвета, то нельзя получить постоянной скорости пересылки данных из одного участка видеопамяти в другой. Скорость получается тем выше, чем меньше картинка. Этому есть только одно объяснение. В то время как основной процессор и интерфейсный блок ускорителя пишут и читают заявку на выполнение примитива, другой блок ускорителя выполняет ранее заданную операцию копирования.
Попробуем оценить скорость передачи данных при копировании рисунка размером 50 х 50 пикселов. Общее время пересылки, составляющее 132 мкс, состоит из времени передачи 20 заявок (102 мкс) и увеличения длительности чтения цвета (37 - 6 = 31). За это время передается 200 тысяч байт (двадцать картинок по 2500 точек при цветовой глубине 32 бита). Скорость передачи данных составила 1600 байт/мс. Такое высокое значение объясняется тем, что информационная магистраль ускорителя позволяет пересылать параллельно коды цвета нескольких точек.