О legacy и форматах данных

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

А я вот тут читаю ассемблер, порожденный компилятором из C-шного кода обработки изображения. Много думаю.

Имею сказать, что распространенный в настоящее время формат "16-битное целое на компонент" - это максимально неудачный способ с точки зрения эффективности обработки:

  • от малейшего чиха переполняется или превращается в тыкву обнуляется, нужно постоянно следить за диапазоном;
  • векторные (SSE,AVX) операции с этим типом - очень ограничены, да и не векторные - тоже.
В результате, сплошные мучения компилятору, а результат - медленно работает. Скажем, вот такой вот код (из dcraw), который делает преобразование по матричному профилю для 3-4 входных каналов (цветов) и трех выходных:
out[0] = out[1] = out[2] = 0;
for (сc=0;сc<colors;сc++) {
  out[0] += out_cam[0][сc] * img[сc];
  out[1] += out_cam[1][сc] * img[сc];
  out[2] += out_cam[2][сc] * img[сc];
}
for(cс=0;сc<3;сc++) img[сc] = CLIP((int) out[cс]);
img[] - unsigned short, out[] - int, out_cam[] - float.

Смотрю на код, который порождает интеловский компилятор. Ну код, да. (три-)четыре load по 2 байта (количество loads зависит от colors /количества цветов/), дальше "вручную" выписанный dot product (нормальный, насколько это возможно), ну и обрезание до диапазона 0-65к и store.

Скорость работы этого кода - 100 мегапикселей в секунду на Sandy Bridge 4.5Ghz (в один поток, понятно что параллелится это на ура). Как-то не очень....

Да, считаем в мегапикселях т.к. в unsigned short у нас 8 байт на (4-компонентный) пиксель, а для float/int - 16 байт.

И еще о Linux (holy war!)

Что-то давно я Linux не троллил!

Когда мы делали Спамтест (который стал затем Kaspersky Antispam), чудовищным гемороем было изготовление дистрибутивов для Linux:

  • продукт поставлялся в бинарниках;
  • продукт интегрировался в MTA (штук 5 разных, от Sendmail до Qmail) путем патченья их конфигов;
  • Ну и хотелось поддержать, по возможности, все, что хоть как-то двигается.
С третьей задачей мы не справились, ибо количество способов, которыми расположены стартап-скрипты, конфиги и т.п. - поражало воображение. Имелся список поддерживаемых дистрибутивов (на которых сами тестировали, слава VMWare), а если у вас не оно - ну сами ставьте, документация есть.

Вчера я убедился, что за прошедшие 7-8 лет ситуация не изменилась. Ну вот драйвера для видеокарт ATI (которые бинарные). Казалось бы, ну kernel module, модуль в X11, библиотеки. Ну значит определи архитектуру, версию kernel (если драйвера разные), версию X11 - и ставься себе.

Однако хрен.

Linux A

Вы не поверите, но тулза про которую я спрашивал в прошлом посте называется GNOME System Monitor и делает ровно что надо: и цифрами и графиком и чаще раза в секунду и вообще. В GNOME-based системах должна быть просто с раздачи. Разные CPU можно красить в разные цвета, я просто поленился это делать для 24-х, да и цветов всяко не хватит.

Ей бы еще окошко с interrupt rate и вообще была бы лафа.

P.S. Подозревавшуюся проблему с affinity отловил, она там есть.

Linux Q

Граждане Линуксоводы!

Имею вопрос: есть ли к mpstat какой-нибудь GUI, ну вроде как в винде Performance Monitor? Мне надо смотреть load по ядрам, а то есть подозрение, что программа (чужая) в смысле affinity маленько безобразничает.

Дополнительное пожелание: уметь самплить чаще чем раз в секунду, 100-200 ms были бы в самый раз.

Про mpstat -P ALL я в курсе, только вот ядер - 24 штуки и никакая разумная история, ну хоть за 10 секунд, на экране никак не помещается.

I like to move it, move it

Мониторю всяческие новости про OpenCL, CUDA и прочие GPGPU и в последние дни просто засыпан новостью про то, что GEGL is getting GPU-based image rendering and processing.

Довеском к этой новости идет ссылка на OpenCL on GEGL: Results up to now, где сравнивается реализация brightness-contrast фильтра на CPU и на GPU (и не каком-то, а Tesla 2050 ценой 2 килобакса) и получается для 1-мегапиксельного изображения:

  • 526 msec на CPU
  • 483 msec на GPU
Просто гигантский выигрыш, почти 10% !!! Притом, как я понял (может быть и неправильно), во время исполнения на GPU не посчитана пересылка "обратно", с карты в RAM.

При этом, заметим, на CPU оно работает на одном ядре (хоть и на SSE2), а значит на 4 ядрах оно банально будет быстрее разика в три.

Причина тривиальна и прямо в том блог-посте описана, весь пар ушел в свисток, а все время исполнения - на пересылку данных. Собственно исполнение обработки на GPU занимает около 1/10 всего времени.

При этом, само время исполнения - чудовищно. Полсекунды на 1 мегапиксель, даже если пиксели 16-байтные (4 float) - это 32 мегабайта в секунду. Э.... По PCIe обычно ходит 4-5 гигабайт/сек..... Проблема, судя по всему, кроется в тайлововой организации картинки в GEGL, тайл при этом мелкий (128x64) и даже на CPU обрабатывать их эффективно не получается, что уж говорить про GPU, где под каждый тайл аллоцируется текстура.

На эту тему имею рассказать следующую историю:

В мечтах о халяве

(Моя) тяга к халяве - неистребима.

Приходит SMS от сбербанка (по памяти):

У вас подключен Мобильный Банк, которым вы никогда не пользовались. Пополняйте мабилу без комиссии. Отправьте "ТЕЛ 100" на номер 900 и ваш счет пополнится на сотку.
Я это воспринимаю, естественно, как промо, дескать сбербанк так пиарится и хочет подарить мне 100 рублей.

Но это же банк! Дарить бабло им слабо, а ТЕЛ 100 переводит сотку с моей карты на оператора. А я то надеялся.....

Заметим, что все равно удобно, особенно во всяких роумингах без интернета и терминалов оплаты. И фишку я запомнил.

P.S. Шедевр мобильного маркетинга (не от сбера): "Ваш день рождения тогда-то (правильная дата). Чтобы изменить - позвоните по телефону такому-то".

О солнечной энергетике

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

В тестировании участвовал минимальный комплект имени магазина MobilPower, плюс у меня еще был маленький мультиметр, которого не хватило т.к. он меряет ток до 0.4А, а надо хотя бы до 1-1.5 ампера.

За эти два дня удалось зарядить:

  • Два комплекта (по 4шт) пальчиковых батареек. Один "до упора", второй - "как-то" (заряжали часа 4, а что получилось - не проверяли потом).
  • Электронную книжку PocketBook 360Plus из состояния "1 палка заряда" до упора.
  • Аккумулятор телефона Thuraya из состояния "пусто" до состояния "1 звонок и десяток SMS"
  • Айфон из состояния "пусто" до состояния "как-то".

Идея о том, что зарядник можно приклеить к баллону катамарана - оказалась пустой. Там заливает и вообще смывает даже на слабой реке и большом кате. На вещи, в теории, можно было бы класть, но тоже неудобно, туда весла кладут-снимают постоянно и всякий прочий скарб.

Несмотря на работоспособность конструкции я ее использовать дальше не собираюсь. По куче причин:

Усталость металла

8 сезонов, 13 походов (не считая апрельских Полометей, коих было еще штуки 3-4, но точно я не помню) и продольный набор на тритоне-двойке начал трескаться вдоль. Причем, добила его Карелия сего года, где никаких (больших) нагрузок на катамаран не было, перед выездом я все трубки наскоро смотрел и такое бы - не пропустил. Может быть это дурное влияние Мошковых?

Первый раз такое вижу. Трескается, вроде бы, только обжатая часть, втч и на тех трубках, где совсем уж больших нагрузок нет (хвосты продолин).

Надо бы не забыть продолины за зиму заменить....

Update: мне почему-то кажется, что некоторые комментаторы считают, что я недоволен Тритоном. Это не так. Остальные (непоказанные на снимке) участки продолин тоже сильно изношены: я катамаран много раз бился ими о скалы и прочие выступающие предметы. Там все помято и погнуто. Совсем по хорошему, их надо было менять после сезона 2007 года.

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

О развешивании

Внезапно возникла задача разместить на балконе два велосипеда, а не один. Один - там просто стоял, немного мешал, но было пофиг. Два уже так не встанут.

Внимание, вопрос. Подвешивание за переднее колесо на одном крючке - чем-нибудь плохо? Ну вот как на этой вот картинке:

О литии

В Монголии потестировать одноразовые литиевые батареи нормально не удалось, не хватило времени на полный прогон (NiMh-Li-NiMh). И в Карелии - тоже не хватило, но выводы сделать уже вполне можно:

GPS 62s на двух литиевых батарейках (Energizer Ultimate Lithium) прожил 6 походных дней (и индикатор сейчас опять показывает "все палки", после недели отдыха прибора), тогда как на NiMh оно жило 2-3 дня. С учетом того, что литий еще и вдвое легче - прямая выгода. Надо, кстати, понять, сколько там реального остатка осталось, разрядить по таймеру.

В связи с этим возникает следующий вопрос: на eBay можно купить эти батареи примерно по $1.5 за штучку в retail-раскраске (у нас они в рознице по 80-100 рублей), но есть еще многочисленные китайские продавцы, предлагающие то же самое (вроде бы) по $1, но в OEM-раскраске. Например вот, top-rated seller, явно пишет про "true energizer", отзывы вроде нормальные.

Вопрос: кто-нибудь из читателей уже пробовал на себе эти "OEM-Energizer". Нет, понятно, за $20-30 можно и самому попробовать, но вдруг кто уже?

Вопрос2: известны ли прецеденты, чтобы к покупателю 20-30 батареек докопались бы на таможне как к "коммерсанту" ("не для личного пользования")?

О фотографическом цвете

Вот смотрю я в новую dcraw, точнее в diff с предыдущей, и вижу там:

-      pix[0] = rp[0] + ((  200*rp[1] + 22929*rp[2]) >> 14);
+      pix[0] = rp[0] + ((   50*rp[1] + 22929*rp[2]) >> 14);
Это расчет красной компоненты пикселя при распаковке из Canon sRAW (YCbCr) в RGB.

А потом весь мир будет удивляться, отчего профили перестали подходить, причем только для sRAW (а для обычного RAW - продолжат работать).

А, да, а потом некто перестроит профили под новую формулу, а затем достанет из загашника старые DNG (где в linear-RGB все распаковано по-старому).

Так и живем.

Идентификация музыки (Q)

Вот бывает смотришь ролик на ютюбе или там кино какое. А там музыка. Эту музыку хочется того, опознать.

Как?

Посоветовали ключевое слово Tunatic, но заставить ея работать не получилось. Может еще что есть?

Осложняющее свойство: микрофона нет (и не будет!), кроме того выход - цифровой, S/PDIF, прямо вот биты в ресивер. Заводить эту хрень на ноуте (с микрофоном) как-то мучительно.

Win7, x64, масло, холст, аудиочип от Реалтека.

Update: советующим Shazam повторяю Win7, x64, короче, десктоп.

Update2: Shazam на ойпаде работает (а других пригодных девайсов у меня нема), но это, конечно, не такое удобное решение, как прямо из цифрового потока брать. Ну вот с наушниками неудобно, например.

Pages

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