Многопоточность здорового человека и многопоточность курильщика

В прошлой серии своих упражнений я дошел до того, что уперся в malloc. И успокоился. Но нет. Что-то чесалось и я решил таки продолжить, как выяснилось - не зря.

Чтобы не упираться в malloc, я перешел к такой единичной задаче:

  • Передаем в worker указатель на данные (и размер)
  • Считаем fnv64
  • Результат - 64-битное число, которое копируется без аллокации данных и подобного.

Кроме того, мне очень хотелось добиться двух вещей

  • Вписать всю конструкцию в Qt-шные signal/slot, то
  • ...

Многопоточность: производительность map/reduce

В очередной раз профайля одну программу, обратил внимание на большой spin time (на мьютексе) в достаточно неожиданном месте, а именно в QtConcurrent::blockingMappedReduced (и в подобных). Пришлось сделать стенд и сравнить с TBB (спойлер: TBB нигде не хуже, а есть где и прямо вот в разы лучше).

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

Еще о многопоточности

Три недели в углу лежал незакрытый гештальт, надо закрывать.

Если кто помнит, то в прошлой серии мы дошли до того, что Qt-шная система signal-slot плохо масштабируется в многопоточном случае и нужно для передачи данных между потоками использовать что-то еще. Ну, к примеру, lock-free очередь (из TBB или вот эту, такой уж большой разницы я пока не обнаружил, хотя и должна быть).

Ну что ж, берем делаем приложение:

  • пачка потоков (1...32) делает какую-то простую работу (копирует строку)
  • складывает
  • ...

RawDigger 1.4 (beta)

С этого постинга мы начинаем плавное тестирование RawDigger 1.4 в котором немало изменений, требующих этого самого тестирования.

Обновление GUI Toolkit

(давно) Используемый нами в RawDigger GUI-toolkit Qt4 (давно) перестал соответствовать современным операционным системам. В результате, мы вынуждены (постепенно) от него избавляться, причем, по тем же соображениям поддержки новых фич в ОС, менять на очень новую версию Qt 5.12

Помимо изменений в коде RawDigger (небольших), это подразумевает долгое и полноценное бета-тестирование:...

FastRawViewer 1.5.4 Release (final)

FastRawViewer 1.5.4 наконец то выпущен и на английском сайте (а на русском сайте обновлены ссылки на версию).

По сравнению с предыдущим анонсом:

  • Камеры Fujifilm X-Pro3, Sony ILCE-6100/6300, Olympus E-M5-III переведены из "предварительно поддержаны" в "поддержаны" (это означает, что добавлены данные для совместимости с Adobe: Baseline exposure, расчет баланса белого в CCT/Tint).
  • Исправлена ошибка, на которую пожаловались в комментариях к предыдущему анонсу.
  • Исправлена ошибка: некоторые RGBA-TIFF файлы показывались некорректно.
  • FastRawViewer теперь знает про Photoshop 2020.

Если вы уже брали версию 1.5.4 с русского сайта, то

  • Можно перевзять (с русского или английского сайтов)
  • Можно подождать: дней через 7-10 мы добавим новую версию в уведомления об апдейтах и при проверке обновлений FRV вам сам скажет что пора.

LibRaw 201910 snapshot

Выпущен свежий snapshot LibRaw:

Изменений много, поэтому переводить обратно с английского не буду.

Ключевое долгожданное изменение - поддержка Canon CR3 - присутствует. Хочу сказать публичное громкое спасибо Алексею Данильченко: Алексей, СПАСИБО, без тебя мы бы вряд ли справились сами.

FastRawViewer 1.5.4 Release

FastRawViewer 1.5.4 выпущен, пока только "на россию", брать только на русском сайте: https://www.fastrawviewer.ru/download

UPDATE: версия на сайте обновлена после исправления ошибки.

Скопирую оттуда же список изменений (в этот раз он совсем небольшой):

Поддержка камер

  • GoPro HERO5, HERO6, HERO7, Fusion
  • Better support for Nikon Coolscan NEF files

Предварительная/неполная поддержка камер

  • Canon EOS M6 Mark II, EOS M200, EOS 90D
  • Fujifilm X-A7, X-Pro3
  • Olympus E-M5 Mark III
  • Sigma fp
  • Sony ILCE-6100, ILCE-6600

Новое/изменения

  • Настройка File
  • ...

Ускоряем многопоточную программу в 150 раз за три простых шага

Во вчерашней истории я, не задумываясь, предложил два способа решения проблемы congestion у Qt signal/slot в многопоточном случае: выдавать результат работы потока пачками и/или вообще выдавать его другим способом (через неблокирующую очередь).

Вчера вечером я проверил первый способ (сегодня задокументировал-нарисовал графики) и вот что у меня получилось:

Исходный псевдокод собственно обработчика выглядит так:

while(job = nextJob()){ result = processJob(job); emit processed(result); }

Давайте накопим результаты в пачку и выдадим эту пачку принимающей стороне:

while(job = nextJob()){...

Закон Амдала против 'interrupt rate'

Давно не писал о программировании, а тут вдруг повод появился.

Допустим, мы хотим на Qt в много потоков что-то фигачить. Ну, к примеру, читать метаданные файлов (или метаданные RAW-снимков из RAW-файлов). Понятно, что в реальной жизни это все упирается в диск, но если все уже было прочитано и закэшировано, то нет.

В реальной жизни прекрасно работает вот такой вот паттерн: запустим N threads и в каждой из них будем делать как-то так:

while(job = nextJob()){ result =...

Отчет о проделанной работе

Что-то замучала текучка, но вот ее результаты

  • FastRawViewer 1.5.4 - Release Candidate. 14 новых камер, остальные изменения минимальны, даже баги поправленные какие-то смешные.
  • RawDigger 1.3.1 - релиз. Это изменение аж среднего номера версии (1.3.1 считаем вместе с 1.3.0), изменения заметные.
  • PixelShift2DNG 0.9.17 - Release Candidate. Поддержана полностью Sony A7R IV, поддержан Pentax KP (да, у него тоже есть PixelShift).
  • Monochrome2DNG, DPRSplit - выпущены новые версии, но выпуск был - только ради поддержки macOS Catalina,
  • ...

Про ZFS и L2ARC

У одного моего друга есть NAS на (7+2)-6Tb. Семь дисков в RAIDZ2 (том под данные), два диска в зеркале (том под бэкапы). И был там L2ARC-кэш на полтерабайта, Patriot Hellfire. Поскольку полтерабайта это мало (см ниже), этот кэш обслуживал только активные данные для работы, но не том с бэкапами, а для тома на котором живут торренты было secondarycache=metadata. И, в общем, было видно, что полтерабайта - мало.

Посмотрел один мой друг в прайслисты, посмотрел в обзор терабайтных SSD...

И снова анонсы

Обновили две наших утилиты

Monochrome2DNG 1.1

  • Возможность переписать имя вендора (EXIF:Make, DNG:UniqueCameraModel) на нужную вам строку.
    Например, если у вас монохромная (переделанная) камера Fujifilm и CaptureOne/Fuji, то название вендора FUJIFILM эта C1 жреть для монохромных файлов, а Fujifilm - нет.
  • Совместимость с macOS 10.15: для этой версии macOS необходима "нотаризация приложения" у Apple, что мы и стали делать.

Качать по ссылке выше.

PixelShift2DNG 0.9.11

  • Поддержка Sony A7R-IV (и 4- и 16-кадровые склейки)
  • Возможность указать количество склеенных кадров в имени выходного файла
  • Совместимость с macOS 10.15

Качать по ссылке выше.

Pages

Subscribe to blog.lexa.ru: все статьи