AVX2 и VPGATHERDD - продолжение
Продолжаем дневник программиста на AVX2 (начало и продолжение).
Добрался до 4-го места, которое хотелось пооптимизировать окончательно уже года два как: берем 16-битные целые (RAW-данные), конвертируем в плавучку, вычитаем черный, результат записываем. То есть первый этап дебайеризации.
Параллельно считаем RAW-гистограмму и карту пересвета-недосвета (на самом деле там карта экспозиции считается, а не просто пересвет-недосвет, а дальше она визуализируется с лимитами, все что выше/ниже лимита раскрашивается.).
Вот в этом месте VPGATHERDD (из RAW-значений в экспозицию по LUT) внезапно дал выигрыш процентов в 6% (меряю тремя замерами, разброс между ними больше, это усредненные 6%).
И, что приятно, сократился код, вместо cN = table[value[N]] (и так 8 раз, по числу элементов в векторе) стала одна команда. Аналогично и с записью, вместо побайтовой или пословной записи результата (смешно, но скорость выполенения не отличалсь значимо) - одна строчка на которую приятно посмотреть:
shuffle_mask собирает в кучку значащие байты из 32-битных слов, permute_mask ставит их в начало слова:
const __m256i permute_mask = _mm256_set_epi32(7, 6, 4, 3, 2, 1, 5, 0);
Не могу не передать пару ласковых слов автору _mm256_unpacklo_epi16: там где в 128-битном SSE был просто unpacklo, там в 256-битном варианте нужно еще попереставлять байтики, потому что два 128-битных регистра (половинки YMM) - это не один 256-битный и работает оно не так.
Но главный спидап в этом месте оказался от замены _mm_store_ps() на _mm_stream_ps(), одно это место ускорило 128-битный вариант процентов на 25 и дальнейшие улучшения с gather и 256-битностью на фоне общего ускорения от stream - практически не видны.
Результат всех оптимизаций смешной: на жатых RAW форматах мы теперь абсолютно упираемся в декомпрессор (который для Huffman не параллелится совсем), ну разве только для tiled DNG не упираемся. А на нежатых (вроде Sony uncompressed) - упираемся в скорость единичной SSD-шки, при 82Mb x 5fps определяющим местом опять становится диск. И таки да, для нежатых Sony вместо 4-4.5fps теперь 5 с небольшими копейками. Было за что биться.
Посмотрим что будет на Skylake: на присмотренном девайсе скорость чтения диска вроде вовсе не ограничивает, увидим во что упремся там.
Comments
Оффтопик: а что ты можешь
Оффтопик: а что ты можешь сказать про T/S-объективы на цифру? Вот тут весь отпуск мне такого остро не хватало. Причём мне на APS-C, что, как я понимаю, упрощает ситуацию и увеличивает выбор.
Но мне в голову ничего кроме Arax 2.8/35 не приходит (а надо бы пошире, обычно, если хочется T/S то значит я очень близко к чему-то архитектруно-=высокому и у меня нет физической возможности просто отойти ногами подальше).
На Sony NEX есть T/S
На Sony NEX есть T/S переходник кипоновский, с обратной стороны у него Nikon F (и может и еще какие есть). Вешается обычный никон, движений там будет соответственно несколько миллиметров в каждую сторону, но будет.
На зеркальный рабочий отрезок - только или родные или СФ через переходник.
А не бывает переходников с MF
А не бывает переходников с MF на FF/APS-C c T/S внутри? Что бы объектив среднеформатный, но обычный?
Я ж пишу "СФ через переходник
Я ж пишу "СФ через переходник". Mirex, Kipon.
Но СФ-оптики шире 35-мм практически нет.
То есть какая-то есть, но
- из новых (типа всяких цифровых пентаксов и мамий) - и потому стоит неприлично.
- ну и с электронной диафрагмой многое (мамии так точно, пентаксы - не вдавался)
Ну так "СФ через переходник"
Ну так "СФ через переходник" можно понимать двояко. И как "T/S переходник для СФ-оптики" и как "тупой переходник и T/S-СФ оптика" :)
T/S-СФ-оптика вся ж довольно
T/S-СФ-оптика вся ж довольно длинная, короче 55 вроде и нет ничего.
Да, у кипона что-то ничего
Да, у кипона что-то ничего нет, а у Мирекса есть, но 400 евро, Аракс побюджетнее получается.
У кипона есть хассель на
У кипона есть хассель на пентакс-к: http://www.adorama.com/KATSHSPXK.html
Мирекс - это с VAT, поэтому реально там минус налог, плюс пересылка, плюс перевод (потому что карточки Mirex так и не принимает вроде).
Но с Pentax-K вообще плохо жить, самый вменяемый зеркальный байонет под переходники - это Canon.
Хи-хи, на сайте киппона я
Хи-хи, на сайте киппона я этот переходник пропустил (не смог найти?). Вот такой у них удобный сайт.
$272 это уже куда приятнее (хотя, что это я говорю, как при баксе по 73 может быть что-то приятное вообще?!), надо смотреть что со старой хасселевской оптикой...
Ничего хорошего. 40-мм,
Ничего хорошего. 40-мм, довольно дорогой даже старый, а про новый вообще слов нет.
Ну и 50.
Проще, поди, узкий от Canon-FD (или старый никон) пересадить на другой байонет.
По идее, под хассель же цейса
По идее, под хассель же цейса должно быть навалом? Ну, времён 500-ки какой-ниубудь, я не про современную инкарнацию, конечно. Дистагон там, такое?
Я тебе и говорю: 40mm (старый
Я тебе и говорю: 40mm (старый - так себе, новый - хороший, но дорогой), 50мм.
И фишай какой-то, 30 или 35, не помню.
Вообще, если оглянуться
Вообще, если оглянуться вокруг, то можно увидеть, что у Самьянга/Рокинора есть и 24 и 35мм T/S, с поворотами к тому же. Первый подороже, а второй так ещё и подешевле. И они делают Pentax-K.
Думаю, это будет самый дешёвый вариант, кроме, возможно, переделки Canon-FD, но для переделки нужны какие-то особые социальные скиллы по поиску очень хорошего фрезеровщика, которых у меня нет.
А они делают для K-байонета?
А они делают для K-байонета? Если да, то 24-мм наверное и есть вариант (раз 35 - узковато)
Делают, да. В Россию их не
Делают, да. В Россию их не возят, а на Адораме находится. Как Рокинор а не Самьянг.
Кстати, и возят: http:/
Кстати, и возят: http://specphoto.ru/#2;3;18;;167614;3026
Но чего-то про 35-TS я
Но чего-то про 35-TS я сомневаюсь, никогда не встречал.
Хм. Я вчера вроде не пил и
Хм. Я вчера вроде не пил и точно видел, причём заметно дешевле, чем 24. А сегодня уже найти не могу. Что это было?!
Если такая переделка вообще
Если такая переделка вообще возможна, у FD рабочий отрезок меньше чем у K. Переходники все линзовые. Что качества не добавит.
Лучше потери в линзах, чем
Лучше потери в линзах, чем виньетирование на краях.
Хотя.., если оптика не даёт нужного диаметра изображения (не помню термина, когда картинка режется конструктивом оптики), то и линзы не спасут.
Любой TS объектив по определению рисует приемлемую по техническому качеству картинку на большем поле (или формате, если угодно). Поэтому и с шириками TS проблемы. Попробуйте сконструировать 16 мм на СФ (а для ФФ это не так и экстремально). Но можно поставить любой штатный объектив, и двигать/гнуть, жертвуя при этом краями.
Ну 17/TS для кэнона сделали ж
Ну 17/TS для кэнона сделали ж. Да, не 16. Но близко.
Миллиметров на 10 его можно двигать, т.е. кроет, грубо говоря, 645-й формат.
Я бы к буквосочяетанию strim относился с осторожностью.
Я, конечно, весьма далёк от программирования, тем более с использованием SSE-инструкций.
Но мне кажется, что "стрим" чего-то не гарантирует. Как пример, разница между TCP и UDP.
При потоковой передаче видео вообще возможны массовые потери кадров... Но всё в пределах стандартов.
MOVNTQ
MOVNTQ
Moves the quadword in the source operand (second operand) to the destination operand (first operand) using a non-temporal hint to minimize cache pollution during the write to memory.
Я же оговорился, что "в Вашем
Я же оговорился, что "в Вашем французском" я не комильфо. :-)
Но "сторе" (ИМХО!) предполагает сначала гарантированную запись, а "стрим" - обсчёт налету.Именно здесь собака могла и порыться.
Да нет же. Стрим - это запись
Да нет же. Стрим - это запись мимо кэша. Для случая "именно записи" - в самый раз.
Но ведь и чтение и запись
Но ведь и чтение и запись "именно мимо кэша" на порядок медленнее.
Или сегодня это уже не так?
Запись то с чего?
Запись то с чего?
Если мы линейно пишем много мегабайтов, много больше чем есть кэша, то мы кэш только вымываем.
Да и с чтением аналогично, если мы не используем повторно значение.