FastRawViewer 1.4.7-1301: и еще быстрее

Как разработчику, мне конечно проще писать changelog, но вот читать их - удовольствие сомнительное. Поэтому новый анонс FRV 1.4.7 ("техническое превью") написан с нуля, а для тех кто читал предыдущие анонсы пишу список изменений:

  • Добавлена настройка GPU Processing - Parallel GPU Data upload (и для CPU и для GPU-режимов), работает только с OpenGL, должно стать несколько быстрее (и в CPU и в GPU режимах)
  • переключаемые режимы CPU-MIX-MIX-GPU-GPU - упрощены, остались CPU-MIX(с квадратами)-GPU (со всеми фичами)

А для вновь читающих ниже полный текст (это изменения относительно релиза 1.4.6), а под ним будут ссылки для скачивания:

RAW processing on GPU

Введение

В новой версии FRV реализована обработка RAW-данных на видеокарте (баланс белого, экспозиция, контраст, для стандартного байера - еще и демозаика). Этот режим в настоящее время еще совершенно экспериментальный, поэтому все дополнительные настройки сейчас показаны в Preferences (в дальнейшем - бОльшая часть их будет убрана в скрытые настройки и/или зафиксирована навсегда).

В этом режиме:

  • при первом показе файла (или при переключении JPEG-RAW, если выбран не Maximal-режим использования памяти GPU, см. ниже) в видеокарту грузятся RAW-данные в представлении floating point.
  • Пересчет из RAW-данных (первый раз, или при смене параметров: ББ, экспокоррекция, контраст) в RGB-представление производится на видеокарте.
  • для стандартного RGBG-байера, дебайеризация тоже делается на видеокарте (и качество демозаики чуть лучше, чем у стандартной CPU-шной, если не включен режим низкого качества).

Согласно результатам тестов:

  • На быстрой видеокарте (NVidia GTX 1080):
    • при Graphics Engine: OpenGL, новый режим (со всеми включенными галочками) значительно быстрее при первом показе (открытии) файла и невероятно быстрее при изменении параметров показа RAW (особенно заметно на файлах с очень большим объемом RAW-данных, например 40Mpix Linear DNG)
    • Graphics Engine: DirectX11/DirectX9: первый показ файла примерно на 10% быстрее, чем в старых версиях, обновление параметров RAW работает значительно быстрее.
  • На медленной видеокарте (Intel HD4000):
    • в режиме OpenGL не медленнее, чем старая версия при открытии файла; обновление параметров RAW сильно быстрее.
    • Режим DirectX: не медленнее старой версии при открытии файла, обновление экрана при смене параметров RAW - значительно быстрее.

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

При работе на батарейном питании (лаптоп, планшет), использование GPU Render должно (но не проверялось систематически: только на одном ноутбуке) сильно экономить батареи т.к. CPU жрет больше GPU

Включение режима

Режим GPU Rendering включается настройкой GPU Processing - GPU Compatibility - Process RAW data on GPU. В текущей тестовой версии она включена по умолчанию.

Поскольку версия тестовая и неизвестно, у всех ли работает, то

  • Новую фичу нужно дополнительно до-включить горячей клавишей (см. ниже), по-умолчанию этот "второй выключатель" отключен.
  • Несмотря на то, что OpenGL-режим должен быть быстрее, FRV будет использовать установленный видеорежим, не предлагая его сменить. 

После включения 'Process RAW data on GPU', в нижней строке, в правой ее части (левее кнопок Grid/Full screen) появляется индикатор CPU (другие его положения: MIX и GPU), который индицирует текущий режим работы:

  • CPU - "все как раньше" - обработка RAW на CPU, в видеокарту передается готовое изображение
  • MIX - обработка делается на CPU, затем часть изображения (квадратиками) повторно обрабатывается на видеокарте и показывается поверх с уменьшенной яркостью. Этот режим нужен, чтобы убедиться в работоспособности GPU-режима (если работает - будут квадратики), он медленнее и CPU и GPU режима т.к. работа делается два раза.
    Если вы в этом режиме видите более темные квадратики как на картинке справа, то все хорошо, GPU-процессинг работает.
  • GPU - все обрабатывается на GPU в соответствии с настройками.

Переключение режимов CPU/GPU/MIX производится шорткатом Alt-G (Windows)/Opt-G(Mac) (настраивается обычным образом), он же Menu - View - Switch GPU RAW processing mode. При использовании настройки Interface - Restore last View settings... положение переключателя CPU/MIX/GPU восстанавливается при следующем запуске FRV.

Новые настройки в Preferences - GPU Processing

В порядке следования в закладке

  • GPU Memory Usage(эта настройка заменила старую Store all renderings in GPU memory)
    • Minimal - в GPU хранится только текущее изображение; неиспользуемые графические ресурсы сразу освобождаются. Это очень медленный режим, использующий минимальный объем видеопамяти.
    • Minimal+ - Используется один набор графических ресурсов, при переходе к изображению меньшего размера видеопамять не освобождается. 
    • Optimal - Используется два набора графических ресурсов: текущее изображение и "следующее", в процессе обновления видеоданных на экране не может быть "мусора" (частей предыдущей картинки).
    • Maximal - Используется до четырех наборов ресурсов (RAW, iJPEG, eJPEG, +обновляемый в данный момент), второе переключение RAW/JPEG должно быть мгновенным.

    Optimal/Maximal настройки "набирают полную скорость" к показу третьего изображения в серии, Minimal+ - ко второму.
    Использование режима GPU RAW Rendering возможно только с настройками Optimal/Maximal.

Новые настройки в GPU Processing - GPU Compatibility settings:

  • Parallel GPU Data upload - включает параллельную загрузку данных в видеокарту (только для Graphics Engine: OpenGL).
    На современных дискретных (в отдельном слоте/со своей памятью) видеокартах этот режим значительно быстрее (для протестированных конфигураций).
    На процессорных и мобильных (без своей памяти): этот режим, скорее всего, вреден.
  • Process RAW data on GPU - разрешает GPU (и MIX) режимы работы, но не включает работу GPU, она должна быть включена явно шорткатом Alt-G или через меню View
    • Use 16-bit floating point data - включает использование 16-битных данных (вместо 32-битных), это вдвое меньше данных и загрузка в видеокарту будет вдвое быстрее.
      Настройка доступна только для 64-битной версии FRV и только на процессорах i3/i5/i7-3xxx и новее.
    • Calculate Over/Underexposure maps on GPU: области передержки/недодержки будут рассчитываться на видеокарте, а не загружаться в видеокарту готовыми.
    • Use faster (but lower quality) RGB bayer demosaic - использовать более быструю, но менее качественную (такую же как в CPU-режиме) демозаику.

Прочие изменения

  • при запуске с именем файла, или если при запуске вспоминается последний открытый файл (см. настройку File Handling - Start without filename): сначала будет декодирован (и показан) открываемый файл, а лишь затем начнется декодирование и показ иконок в filmstrip.
    При запуске с именем файла на медленном носителе (HDD, сеть, медленная карта) - чтение иконок не будет мешать чтению первого показываемого файла.
  • Переделана настройка Image Display - Use Monochrome mode for Bayer images: добавлена опция Detect, которая будет обнаруживать такие файлы автоматически.
  • Улучшена обработка Sleep/Awake (в первую очередь на Mac)
  • Menu - File - Clear _Rejected subfolder:
    • добавлена кнопка Show in Explorer/Reveal in Finder, позволяющая посмотреть на _Rejected из файлового менеджера
    • Настройка Preferences - Copy/Move/Reject - Show detailed _Rejected folder stats before clearing the folder:
      Если включена, то показывается детальная раскладка по удаляемым файлам (NN RAW, MM RAW+XMP и т.п.).

Исправлены ошибки:

  • при выключенной галочке Menu - Adjust - Exposure Correction и включенной настройке Use Adobe hidden exposure первый показываемый файл показывался без Adobe hidden exposure.
  • в процессе выхода из программы  - отключается очистка кэшей (эта очистка в процессе выхода могла привести к падению)

И еще

Полностью переработан код обработки RAW-данных и показа RAW/JPEG в режиме одного изображения, исправления и изменения, именно это сделало возможным GPU-режим. Видимые пользователем изменения:

  • Все RAW-форматы:  По причине реорганизации внутренних данных и изменения внутренних алгоритмов (с целью оптимизации), возможны незначительные расхождения в  результатх расчета автобаланса белого и авто-ETTR.
    Особенно это касается файлов Fuji SuperCCD, для которых изменения особенно велики.
  • черно-белые изображения: код для обработки оптимизирован под SSE/AVX, это место стало в разы быстрее
  • Изображения в плавающей точке (DNG)
  • поддержаны нормализованные (т.е. с диапазоном данных 0..1) изображения.
  • поддержаны нежатые floating-point изображения
  • 4-цветные не-RGB (CMYG) изображения:
  • исправлена ошибка в чтении сохраненного баланса белого.
  • исправлена ошибка: неверно показывалась гистограмма 4-го канала.

Временно, на период тестирования:

  • Новый режим включается галкой Preferences - Performance - Use new (sliced) processing code (по умолчанию - включено). Если выключить, то все будет как в FRV 1.4.6
  • На той же закладке можно выключить поддержку инструкций AVX2 (временно перенесено из скрытых настроек)

Ссылки для скачивания

Ссылки устарели, берите из более свежего анонса

Приз для тех, кто дочитал досюда

Если вы тестировали FRV, у вас кончился триал, но вы хотите потестировать еще, вот  ключик, действующий до конца июня (используйте copy-paste чтобы не путать O и 0):

HLO7KE-ZW6727-FU5ON7-V24O63

Желающие стать постоянными тестерами: пишите  на support@fastrawviewer.com

(наилучшие) Результаты тестирования

Сначала о методике. В настоящий момент более всего тормозит GUI и декодирование JPEG (эти места мы тоже будем улучшать), чтобы они не мешали:

  • Включаем Preferences - RAW + JPEG - Ignore internal JPEGs, они не будут декодироваться
  • Если у вас RAW+JPEG, то выключаем Decode and show external JPEGs
  • Performance: увеличиваем Decoded RAW cache size до размера тестового набора (скажем до 40), чтобы диск не ограничивал.
  • закладка GPU Processing: самые быстрые настройки на картинке справа (кликабельно).
  • Тормоза GUI лечатся так:
    • Panels - Hide bottom window bar when hiding panels
    • А потом жмем Tab, оно уберет все панели и нижнюю строку.
  • Компьютер у меня: i7-7700K, стоковые частоты, NVMe диск (Plextor M8P что ли), NVidia 1080, свежие драйвера, свежая Windows 10.
  • Если тестовый набор небольшой, то просматриваем его один раз, чтобы он оказался в кэше.

После этих вводных, результат у меня получается такой:

  • Sony A7R-II uncompressed (набор 22 файла): рекорд пока 21.8 fps (40Mpix!)
  • BlackMagic Cinema camera (uncompressed DNG, 5Mpix): 42 fps.

При включении панелей/нижней строки GUI - результаты падают в ~1.5 раза и улучшение этого места - наша следующая цель.

Чего бы хотелось от тестеров

Если вы дочитали аж досюда и хотите помочь, то нам очень бы помогли бы логи на вашем железе, как в OpenGL-режиме, так и в DirectX.

Для этого:

  1. Настройки GPU Processing - как на картинке выше (начнем с OpenGL)
  2. Preferences - Other - Debug log messages: All
  3. Перезапустить FRV
  4. Пролистать (в режиме отображения одного файла, а не "плитки") 3-4 файла.
  5. Нажать два раза Alt-G, чтобы оно переключилось из CPU-режима в GPU
  6. Пролистать еще 3-4 файла
  7. Menu - Help - Debug Log - Save to File.
  8. Если у вас Windows: Preferences - GPU Processing - Graphics Engine: DirectX 9 (или 11)
  9. Перезапустить FRV
  10. Пролистать 3-4 файла в режиме CPU, 3-4 файла в режиме GPU
  11. Menu - Help - Debug Log - Save to File.
  12. И прислать оба файла + краткое описание конфигурации на lexa@lexa.ru или support@fastrawviewer.com

Если у вас Мак. то шаги 8-11 пропустить, поскольку DirectX там нет.

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

Comments

> На быстрой видеокарте (NVidia GTX 1080):

> На медленной видеокарте (Intel HD4000):

P1 вроде пишут что они в C1 используют все GPU что есть для работы, а как здесь ?

N/A

Одного достаточно.

> Одного достаточно.

тю !

N/A

В случае вьюера - результат расчетов (на GPU) надо бы иметь на том же GPU, которое их кажет, иначе весь пар уйдет в свисток (таскать результаты туда-сюда можно, но не быстрее, чем их заново посчитать, расчет быстрый)

ну вот у меня notebook и в нем HD Graphics 4600 & GTX870M ... я не замечаю на экране переключения между ними на тему кто показывает на экране... т.е. если я куплю следующий с например 2 x GTX1080M то 50% мощности не будут использованы ?

N/A

Там и 50% избыточны в случае 1080.

Почему же не будут? Будут. Под майнинг.

Мы майнинг в FRV вроде (пока) не собирались встраивать.

Хотя идея, конечно, интересная

там чуть сложнее, у оптимуса общий видеобуфер, потому и не замечаете.

А вот вообще, где почитать как устроено переключение графики?

Ну вот явно же приложению на скаку нельзя менять, если приложение запросило графический контекст какой-то, то там есть всякие сapabilities мы на них рассчитываем и если подменить другим чипом, с другими возможностями, то все испортится. Это не говоря про скомпилированные shaders, которые в OpenGL вроде как машинно(чипо)-зависимые.

И как оно вообще может быть устроено тогда (ну понятно, можно содержимое фреймбуферов таскать туда-сюда, но не выглядит эффективным)?

Меня лично Optimus так задолбал, что я отключил нафиг встроенное видео. Теперь хоть предсказуемо работает.
А так я никогда не видел, чтобы работающее приложение свопало видеокарты на скаку, только при следующем запуске с явными настройками.

Я почитал что-то на MS-овском сайте, вроде в DirectX12 можно на скаку переключаться, во всяком случае какие-то структуры данных есть для этого.

Add new comment