FastRawViewer 1.4.7: Technology Preview

RAW processing on GPU

Introduction

When we released FastRawViewer 1.0 (3.5 years ago), there was still a relatively large amount of very old (chipset) graphic processors in use, while the most widely-used disks were HDD/SSD drives with SATA interfaces. We were trying to make things work for that as well. The idea was to ensure good user experience on slow/weaker hardware with the RAW sizes that were prevalent then (12-16Mp).

Nowadays, everything's a bit more grown up. Graphic processors integrated with CPU chips (integrated graphics) are fairly fast, and the discreet ones that are more or less reasonable are very fast. We also have much faster drives now, such as NVMe; thus file read speed has also gone up quite a lot. At the same time, the number of megapixels has gone up as well and 40-50 megapixels has become the norm.

So, now, responding to the call of time, we've improved things significantly while also maintaining compatibility with the older hardware.

In this new version of FastRawViewer, we've added a new, much faster, mode for processing RAW data (white balance, exposure/lightness, contrast, and demosaicking for standard Bayer pattern) on graphic processors, or GPUs.

Note: Because this mode is currently in "technology preview" state, all of the additional settings are currently displayed in the Preferences. In the future, the majority of them will be placed in the hidden settings and/or set permanently).

FastRawViewer. Technology Preview
  • In this mode:
  • When first displaying a file (or when switching between JPEG-RAW, if the Maximal mode of using GPU memory, see below, hasn't been selected) the RAW data is loaded into the graphic processor in floating point presentation.
  • Recalculating from RAW data (the first time or when changing RAW rendering parameters, such as WB, exposure/lightness, contrast) to RGB is done on the graphic processor.
  • For standard RGBG-Bayer, demosaicking is also done on the graphic processor (and the quality of the demosaicking is slightly better than on a standard CPU one, if low quality mode isn't turned on).
  • According to the results of the tests:
  • On a fast graphic processor (NVidia GTX1080):
  • with Graphics Engine: OpenGL, the new mode (with all of the checkmarks turned on) is significantly faster during the first display (opening) of the file and unbelievably more responsive when changing the RAW rendering parameters (this is especially visible on files with a very large amount of RAW data, for example 40Mpix Linear DNG)
  • Graphics Engine: DirectX11/DirectX9: the first display of the file is about 10% faster than for old versions, but the screen refresh when RAW rendering parameters are changed is much faster.
  • On a relatively slow graphic processor (Intel HD4000):
  • Both OpenGL/DirectX modes: no slower than the old version when opening a file; screen refresh when RAW rendering parameters are changed is much faster.

Of course, if the speed at which the file is being opened is limited by the speed of the disk or network subsystem, then there will be no noticeable change in the time taken to open the file (but changing the RAW rendering parameters continues to work faster).

When working with battery power (laptop, tablet), using GPU Render should (but hasn't been systematically tested: only on one laptop) significantly conserve battery because CPU consumes more than GPU.

Download Links

Updates history

1.4.7-1307: Fixed an error resulting in wrong autoexposure calculation or even crash if autoexposure was used several times on single image (only if 16-bit floats was used and parallel data upload turned off).

Turning this mode on

The GPU Rendering mode is turned on through the setting GPU Processing - GPU Compatibility - Process RAW data on GPU. In the current test version, it's turned on by default.

  • Because the version is currently being tested and it's unknown whether it works for everyone:
  • The new feature needs to be additionally enabled via hotkey (see the picture below), by default this "second off-switch" is turned off.
  • Despite the fact that OpenGL Mode should be faster, this FRV version will continue to use the video mode selected earlier, without offering to change it (most likely we'll add mode change prompt in release version).
  • After turning on 'Process RAW data on GPU' in the bottom bar, in the right part (left of the Grid/Full Screen buttons) a CPU indicator appears (its other "positions" are MIX and GPU) which indicates the current work mode:
  • CPU - "everything like before" - processes RAW on the CPU, a prepared image is passed to the graphic processor
  • MIX - the processing is done on the CPU, then part of the image (by squares) is processed again on the graphic processor and above with decreased lightness. This mode is needed to make certain of the GPU mode's operational integrity, it's slower than both CPU and GPU modes since the work is done twice.
  • If, in this mode, you see dark squares as on the image on the right, then everything is good, GPU processing works.
FastRawViewer 1.4.99 Technology Preview. MIX mode
  • GPU - everything is processed on the GPU according to the settings.

Switching between CPU/GPU/MIX modes is done through the Alt-G shortcut (Windows) / Opt-G (OS X macOS) (this shortcut can be changed as usual), also Menu - View - Switch GPU RAW processing mode. When using the Preferences - Interface - Restore last View settings, the position of the CPU/MIX/GPU switch is restored at the next launch of FRV.

New settings in Preferences - GPU Processing

FastRawViewer Technology Preview Preferences. GPU Processing Settings
  • Note: Graphics engine selection drop-down is for Windows only.
  • In order of appearance in the tab:
  • GPU Memory Usage (this setting replaces the old Store all renderings in GPU memory)
  • Minimal - only the current image is stored in the GPU; the unused graphic resources are immediately freed up. This is a very slow mode, using a minimal amount of video memory.
  • Minimal+ - uses one set of graphic resources, when moving to a smaller image, video memory is not freed up.
  • Optimal - two sets of graphics resources are used: the current image and the "next" one, in the process of refreshing video data on the screen there can't be "garbage" (bits of prior images).
  • Maximal - up to four sets of resources are used (RAW, iJPEG, eJPEG, +currently refreshed), the second RAW/JPEG switch should be instantaneous.
  • Optimal/Maximal settings get to full speed by the time of displaying the third image in a series, Minimal+ - by the second.
  • Using the GPU RAW Rendering setting is only possible with the Optimal/Maximal settings.

New settings in GPU Processing - GPU Compatibility:

  • Parallel GPU Data upload - turns on the parallel loading of data into the graphic processor (only for Graphics Engine: OpenGL).
  • On modern discreet (with a separate slot/with its own memory) graphic processor, this mode is much faster (for tested configurations).
  • On integrated and mobile (without dedicated video memory) graphic processors: this mode is, probably, suboptimal.
  • Process RAW data on GPU - allows GPU (and MIX) modes, but doesn't turn on GPU work mode, it needs to be turned on explicitly through the Alt-G shortcut or through the View menu.
  • Use 16-bit floating point data - turns on using 16-bit data (instead of 32-bit), which halves the amount of data and loading into the graphic processor will be twice as fast. The visual quality of render is not diminished ("visually lossless").
  • This setting is accessible only to the 64-bit version of FRV and only on i3/i5/i7-3xxx processors and newer.
  • Calculate Over/Underexposure maps on GPU: areas of over/underexposure will be calculated right on the graphic processor, instead of loading pre-calculated data into the graphic processor.
  • Use faster (but lower quality) RGB Bayer demosaicking - uses the faster but lower quality (same as it was/is in CPU mode) demosaicking.

Other Changes

  • When launching with a filename, or when during launch the last open file is recalled (see the setting File Handling - Start without filename): first the file being opened will be decoded (and displayed) and only then will the decoding and display of icons in the filmstrip start.
  • When launching with a filename on a slow media (HDD, network, slow flash card), reading the icons won't get in the way of reading and processing the first file to be displayed.
  • The Image Display - Use Monochrome mode for Bayer images setting has been redone: a Detect option has been added, which will detect these files automatically.
  • The processing of Sleep/Awake has been improved (mainly, for OS X)
  • Menu - File - Clear _Rejected subfolder:
  • The Show in Explorer/Reveal in Finder button has been added, allowing one to look at _Rejected using the file manager
  • Preferences - Copy/Move/Reject - Show detailed _Rejected folder stats before clearing the folder setting:
  • If this is turned on, then the details of the deleted files is displayed (NN RAW, MM RAW+XMP, etc.).
  • A new setting has been added: Preferences - "Dim Histogram/Stats/EXIF panels while changing files."
  • When turned on (the default), the Histogram/Statistics/EXIF panels will become dimmer while moving between files. This takes an (extra) 6-20 milliseconds, depending on the speed of the computer.
  • This setting is new; the panels used to always dim in older versions.

Bugfixes

  • When the Menu - Adjust - Exposure Correction checkbox was not checked and the Use Adobe hidden exposure setting was checked, the first file to be displayed would be shown without applying Adobe hidden exposure.
  • In the process of exiting the program, cache cleaning turns off (this cleaning in the processing of exiting could lead to a crash)
  • For pairs of RAW+JPEG, in some instances the eJPEG representation could be wiped from the memory (but not the eJPEG file itself - copy/move worked correctly).
  • Pre-fetch for external JPEGs did not work in all cases.

Also

  • The code for processing RAW data and displaying RAW/JPEG in single image display mode has been completely reworked, with fixes and changes; this has made GPU mode possible. The changes visible to users:
  • All RAW formats: due to the reorganization of internal data and changes in internal algorithms (with the goal of optimization), minute differences in the results of auto-white balance and auto-ETTR calculations are possible.
  • This especially concerns Fuji SuperCCD files, for which the changes are especially large.
  • Monochrome images: the code for their processing has been optimized for SSE/AVX, this part has become several times faster.
  • Images in floating point (DNG):
  • normalized images (meaning with a data range 0...1) are supported
  • uncompressed floating-point images are supported
  • 4-color non-RGB (CMYG) images:
  • an error in reading saved white balance has been fixed
  • an error has been fixed where the histogram for the 4th channel was displayed incorrectly
  • Temporarily, during the testing period:
  • The new mode is turned on through the Preferences - Performance - Use new (sliced) processing code checkbox (by default, this is turned on). If it's unchecked, then everything will be as in FRV 1.4.6
  • In that same tab, one can also turn off support for AVX2 instructions (temporarily made visible, instead of being one of the hidden settings).

Prize for those who made it here

If you tried FastRawViewer earlier, and your trial period has ended: if you'd like to try the new version, here's a license key that works until the end of July (copy-paste it so as to not mix up the letter "O" and the number 0):

P2IW6L-XOXNXX-LMBUED-GTI74X

Those who'd like to become permanent testers: contact us at support@fastrawviewer.com

(best) Testing results

  • First, the methodology. Currently, what's slowing everything down is the GUI and the decoding of the JPEG (we will improve these as well), and so that they don't get in the way:
  • Turn on Preferences - RAW + JPEG - Ignore internal JPEGs, they won't be decoded
  • If you have RAW+JPEG, then turn off Decode and show external JPEGs
  • Performance: increase the Decoded RAW cache size to the size of the test set (let's say, 40), so the disk doesn't limit us.
  • The GPU Processing tab: fastest settings are in the image below.
FastRawViewer 1.5 Technology Preview. GPU Processing Settings
  • The GUI slow-down can be fixed as such:
  • Panels - Hide bottom window bar when hiding panels
  • Then, press Tab - it'll remove all of the panels and the bottom bar.

Test results below are for a computer with a i7-7700K processor, factory-set frequencies, NVMe disk (Plextor M8P), NVidia 1080, fresh drivers, fresh Windows 10.

  • With the above-listed conditions, results are as follows:
  • Sony A7R-II uncompressed (a set of 22 files): current record is 22.7 fps (@42 Mpix!)
  • BlackMagic Cinema camera (uncompressed DNG, 5Mpix): 49.3 fps.
  • For compressed RAW files, the display speed depends on the speed at which these files are unpacked, and, as a rule, is generally lower (only 17fps for Canon 5D Mark II; using a CPU with a large number of cores ought to speed it up).
  • When turning on the panels and the bottom bar of the GUI - the results fall by ~1.5 times and improving this part is our next goal.

Add new comment

Simple HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Lines and paragraphs break automatically.
Subscribe to this blog updates