Skip to content

Conversation

ArtemSkrebkov
Copy link

Перешёл на работу с CV_8U стало быстрее.
Но конвертирование в hls, bgr и увеличение интенсивности не ускорились.
Т.е. ускорение достигается в результате избавления от конвертирования в CV_32F.
Ну да, по сути это было бесполезным действием, т.к. обычно пользователи работают с CV_8U.

Текущее время 45-47 мс, как ещё ускорить идей пока нет.

@ArtemSkrebkov
Copy link
Author

И тут ещё тест перестал проходить, мне кажется, это всё из-за смены типа.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Stragger , такая конструкция с циклами работает быстрее, чем srcHls += Scalar(0, 0, intensityInt)?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, быстрее.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Странно. Очень странно.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Собрал все под Windows (Windows 8, MSVS 2012, TBB 4.2, Intel Core i5-3330, 8GB RAM), получил обратный эффект: такой вариант с циклами работает ~2.8 мс, srcHls += Scalar(0, 0, intensityInt) --- ~0.7 мc.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@ArtemSkrebkov
Copy link
Author

Такая же фигня, что и HLS. Только эффект стал хуже если редактировать только интенсивность, плюс артефакты появились.
Перевод в bgr ускоряется, а в HSV даже замедляется немного на многопроцессорной версии.
Первая картинка hls, интенсивность 0.5
Вторая hsv, 0.5
Третья hsv, 1.0
boostcolorhls
boostcolorhsv
boostcolorhsvmax

@druzhkov-paul
Copy link
Contributor

Эффект действительно немного отличается, но по мне он не хуже, просто другой.
Занесите, пожалуйста, времена в табличку для обновленной версии с HLS (1 и 4 потока) и для версии с HSV (1 и 4 потока).

@ArtemSkrebkov
Copy link
Author

Поправил отступы, добавил замеры времени, не отличаются они.

@druzhkov-paul
Copy link
Contributor

Жаль. Думаю, что если мы хотим добиться хорошего времени при компиляции MSVС, надо разбираться, почему переход из RGB в HLS/HSV не ускоряется и, возможно, реализовать его самостоятельно. С GCC, насколько я понимаю, проблем быть не должно (было бы хорошо, если бы кто-то собрал все это GCC и измерил время).

@valentina-kustikova , что думаешь?

@valentina-kustikova
Copy link
Contributor

@druzhkov-paul , мне кажется, что сейчас идут какие-то "танцы с бубном" :), потому что идут попытки поменять алгоритм, но мы не понимаем, зачем и из-за чего мы это делаем.

Насколько я помню, мы договаривались, что Артем запустит IPS (инструкцию я присылала) и пришлет картинку с полученным профилем перед тем, как менять пространства с HLS на HSV или наоборот. Поэтому предлагаю именно это и проделать. Concurrency-анализ должен показать, как распределена нагрузка между потоками при вызове каждой функции. Сейчас у меня вообще складывается ощущение (исходя из времени), что конвертация в HLS (HSV) последовательная.

Было бы неплохо иметь аналогичный профиль и под Ubuntu, чтобы можно было их сравнить и сказать, что идет по-разному. При этом конечно же стоит посмотреть время на обеих системах. @Stragger , договоритесь с кем-то из ребят, у кого реальная система с Ubuntu, чтобы они запустили вашу реализацию с замерами времени.

Для упрощения процесса снятия профиля можно написать приложение, которое ничего не делает, кроме прямой и обратной конвертации (по факту выдернуть узкое место функции). Именно с него снимать замеры времени и строить профиль.

@ArtemSkrebkov
Copy link
Author

Сделал приложение которое выполняет только конвертацию туда и обратно.
IPS запускал предлагаю результаты на собрании посмотреть и обсудить.
Влад запускал это приложение на убунте, получилось как-то так:
1 поток
TIMER_toHLS: 61.78ms
TIMER_toBGR: 59.15ms
4 потока:
TIMER_toHLS: 25.19ms
TIMER_toBGR: 25.99ms
Теперь windows:
1 поток:
TIMER_toHLS: 39.17ms
TIMER_toBGR: 39.35ms
4 потока:
TIMER_toHLS: 32.14ms
TIMER_toBGR: 11.57ms

Ну в общем, то что и написал Павел.

@valentina-kustikova
Copy link
Contributor

@Stragger , а можно скриншот предварительно прислать, чтобы разговор был предметным?

@ArtemSkrebkov
Copy link
Author

угум, легко, я на почту их скинул.

@valentina-kustikova
Copy link
Contributor

@Stragger , а можно картинки с результатами Concurrency-анализа на 4-ех потоках, причем мне нужна не вкладка Summary, а та, где изображено 4 потока и распределение нагрузки.

@ArtemSkrebkov
Copy link
Author

Я добавил табличку(лежит со всеми остальными таблицами, AS - hls test) с замерами времени для приложения, которое bgr в hls переводит и обратно, конвертировались картинки разного размера. По замерам можно увидеть, что распараллеливание там всё-таки есть, правда для картинок маленького разрешения, ускорения нет, а наоборот. Похожий эффект и при использовании HSV, различия по скорости между hls и hsv не заметил.
Исходник лежит в моём репозитории: ветка hls_test, ./samples/hls_test.cpp

@ArtemSkrebkov
Copy link
Author

Залил финальную реализацию, поправил регрессионный тест, т.к. перешёл на целочисленные изображения и там проблемы с округлением.

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.03%) when pulling 5d5abff on stragger:boost_color_impl into 8447ebe on UNN-VMK-Software:master.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Табуляции...

druzhkov-paul added a commit that referenced this pull request Jul 7, 2014
Boost Color filter optimization
@druzhkov-paul druzhkov-paul merged commit 96af030 into itlab-vision:master Jul 7, 2014
@druzhkov-paul
Copy link
Contributor

Если будут еще идеи, как можно ускорить работу данного фильтра, предлагайте, пробуйте, делайте pull request'ы.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants