Производительность BitBlt - PullRequest
3 голосов
/ 12 июня 2009

У меня есть функция, которая разбивает многостраничный TIFF на отдельные страницы, и она использует функцию Windows BitBlt. С точки зрения производительности, видеокарта будет иметь какое-либо влияние на раскол? Стоит ли вместо этого использовать прямую библиотеку C / C ++?

Ответы [ 2 ]

2 голосов
/ 12 июня 2009

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

Если вы вносили изменения в данные изображения, то есть вероятность, что использование вашей видеокарты может помочь; но только если вы рендерите много новых данных изображения для tiff назначения, особенно для 3D-сцен и т. п.

2 голосов
/ 12 июня 2009

Если BitBlt может отображать страницы в видеопамять, есть очень хороший шанс, что ваша видеокарта будет работать намного быстрее, чем процессор. Это по нескольким причинам:

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

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

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

Я должен добавить - я считаю, что вам нужно указать, что память находится на карте в контексте устройства. Я не думаю, что простое создание контекста памяти делает что-то особенное с видеокартой.

...