Декабрь 2015

AVX2 и VPGATHERDD - продолжение

Продолжаем дневник программиста на AVX2 (начало и продолжение).

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

Параллельно считаем RAW-гистограмму и карту пересвета-недосвета (на самом деле там карта экспозиции считается, а не просто пересвет-недосвет, а дальше она визуализируется с лимитами, все что выше/ниже лимита раскрашивается.).

Вот в этом месте VPGATHERDD (из RAW-значений в экспозицию по LUT) внезапно дал выигрыш...

Еще про AVX2 и VPGATHERDD

Продолжение вот к этому вот тексту и к тамошним комментариям:

1. Собрался с духом и переписал тройку мест на 256-битные команды. Помогло: время исполнения этих кусочков упало на 15-25%. Буду дальше писать.

Это без особой оптимизации, старый код у меня SSE3, никаких BLENDPS/EXTRACTPS не использовалось, соответственно и AVX2 - это чисто замена _mm_ на _mm256_ ну и типы 256-битные. В уже переписанных кусках буду еще смотреть на DPPS: на SandyBridge эта инструкция выигрыша не давала, но может быть поможет на Haswell+.

2. А вот с VPGATHERDD - сплошное разочарование:

  • Для гистограммы (когда gather, потом инкремент, потом поэлементная запись) - получается серьезный проигрыш в производительности, а код сложнее.
  • Для операций вида bitmap[index][channel] = contrast_curve[value] проигрыш тоже есть, хотя и незначительный. Совсем оптимизированное (читаем только 6 элементов, для альфа-канала берем defaults т.е. через masked load) - совсем незначительно медленнее, единицы процентов на всю функцию, но медленнее.

Уж не знаю, кому эта VPGATHERDD в таком виде нужна. Ну разве только на новых процессорах она побыстрее.

1 Терабайт

Если бы SD-шки не продавались парами, мне бы наверное хватило бы 3/4 от показанного.

Стандарты - дешево!

Не могу не прорекламировать (пиратский?) сайт e-standard.org.

Стандарты ISO (мне был нужен 17321, но теперь и других напокуплю) всего по $8 (вместо обычных $100+), карточки принимают, пейпал не принимают, шлют вручную (я заплатил в 10 вечера, прислали в 7 утра), не мошенники. Все прислали, правда про 17321-2 пришлось напомнить, сначала не прислали.

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

FastRawViewer 1.2.2

По сложившейся традиции, ранний анонс FRV 1.2.2.

Изменения этой версии:

  • Новая (скрытая) настройка (Registry/Defaults) Prefs->FileArrivalDelay
    Предназначена для случая, когда в текущий каталог добавляются файлы, чтобы FRV не пытался показать те файлы, процесс копирования которых не завершен.
    FastRawViewer:
    • дожидается, пока размер файла перестанет изменяться (перечитывая папку с частотой, указанной в Preferences - Performance - Re-read folder in...)
    • ждет еще время, указанное в настройке FileArrivalDelay (стандартное значение - 2000 миллисекунд)
    • и только после этого показывает файл в панели Filmstrip.
  • ...

Приветы из прошлого

С помощью Winqual отловил редкую (на сегодня) багу в старых драйверах Nvidia, которая била и по FastRawViewer:

  • Драйвера серии 2xx (я тестировал на 296.17, но в дампах видны и другие) для старых карт (с 8800 по GTX560) декларируют OpenGL extension GL_OES_get_program_binary, но при попытке порезолвить это расширение - оно не резолвится.
    Я вот даже не знаю, ошибка это, или спецификации OpenGL это разрешают, но декларировать расширение, которого нет на самом деле - это беспредел.
    В современных драйверах (Windows ставит 340.52 через апдейты, на geforce.com предлагают 341.92) этой проблемы нет, то есть простая установка рекомендованных апдейтов проблему решает (потому и бага редкая).
  • FRV это даже пытается обработать (на всякий случай), но, как выяснилось, неправильно (написано на всякий случай, потестировать не было случая, получилась ошибка в условии if).

Ну, полечил, в 1.2.2 будет, там всей правки на пару строк.

Одновременно повеяло прошлым из другого места:

  • Вынимаю боевую видеокарточку, вставляю заботливо заначенную 8600GS
  • Загружаюсь (Win8.1 x64), windows начинает мучительно искать драйвера.
  • Параллельно ставлю драйвера сам, перезагрузка не требуется.
  • Запускаю отладчик, чиню багу, начинаю тестировать.
  • В какой-то момент FRV мне говорит "милок, а у тебя OpenGL стал 1.1"

Это значит виндовый поиск драйверов ничего не нашел - и временно поставленные (без перезагрузки) видеодрайвера куда-то дел, вернул родной Windows OpenGL 1.1 (софтверный, еще от Win95).

После перезагрузки все, понятное дело, встало на место. Мораль же в том, что "драйвера без перезагрузки" в варианте 3-летней давности - это кривой механизм. Его, похоже, улучшили, с драйверами 3xx я таких засад не помню, но место - кусается.

 

О скорости карточек в камерах

В раньшие годы Rob Galbraith вел базу по скорости карточек памяти в разных камерах. А потом перестал (может случилось что выгуглил: автор сменил работу и забросил сайт), последнее обновление сайта вообще в 2013-м году, а базы - в 2012.

Но нашлись последователи, рекомендую: www.cameramemoryspeed.com

У них и камеры новые представлены (не все, но в мои потребности попадают) и набор карт памяти достаточно свежий.

RawDigger 1.2.3

Ссылки:

Изменения

Косметические:

  • Поддержка Sony RX1R-II (по сути, только цветовой профиль, все остальное и так работало)
  • Обновлен exiftool
  • Увеличена скорость работы при изменении параметров Selection Grid. Проблема проявлялась только на OS X 10.11, на остальных системах разница будет заметна только на очень больших сетках с тысячами ячеек.

Про UHS-II

Покупал тут в октябре SD-карточки (файлы растут, 80Mb уже, блин), купились Lexar 1000x UHS-II, потому что если парами покупать на B&H, то дешево получается.

Пришлось брать и ридер: черная пятница, то-се, удержаться трудно, взялся Transcend RDF9. Старый ридер, Lexar LRW300U перешел в резерв (ну по опыту, Transcend долго не живет, поэтому резерв нужен).

Ну что сказать:

  • Запись отличается слабо, 69 и 75Mb/sec (карты - Lexar 1000x)
  • А вот чтение отличается практически вдвое, 75 и 145Mb/sec

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