|
|
  |
Разработка findcolor, findimage, Pure lua |
|
|
| DarkMaster |
23.4.2022, 1:02
|
          
Модератор UOPilot
Сообщений: 9.766
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30008
Пользователь №: 11.279

|
Цитата Кол-во ядер == кол-во потоков Считается правильным делать 2x потоков на ядро для оптимальной производительности. Хотя в рамках наших задач (по сути чистая синтетика) может быть иначе. Цитата Неэффективно будет иначе (на каждый поток луа свой пул потоков поиска). У нас нет еще даже имиджа работающего в многопоточке, а мы уже делаем многопоточку многопоточных имиджей =) Имхо все по порядку. По факту все это реализуется очередью, причем на стороне луа и без особых проблем. Подобные вопросы для меня и стали опеределяющими в плане архитектуры всего поиска - дллка только, как инструмент перебора массива, если этот перебор будет многопоточный - ну хорошо, но вопросы логики, очередей, обработки изображения и прочего в длл ну вообще не надо закидывать. Цитата посмотри внимательней, в закрепе есть они В архиве которые что ли? Пилот и вырезка центра пилота?
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| DarkMaster |
23.4.2022, 1:15
|
          
Модератор UOPilot
Сообщений: 9.766
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30008
Пользователь №: 11.279

|
Ищем зеленый квадрат Красная рамка - реально заданная область поиска, пиксели будут сравниваться только внутри этой рамки. Оранжевая рамка - фактическая область по которой пилот будет "двигать" паттерн в поисках совпадений. Синяя рамка - образей найденого квадрата с низким % точности.
В итоге имидж который мы заставили искать в области 100 100 109 109 возрващает координаты найденного изображения 95 95. Подобные приколы на последней версии пилота должны фильтроваться искуственно после окончания поиска, но сам алгоритм не был исправлен, на сколько мне известно.
посмотрел картинки. а что собственно не так? там 3 картинки с точностю 60%, две картинки с точностью 50% и одна каринка с точностью 100%
Это у меня завались генерированные рандомные картинки - может пригодятся.
Прикрепленные файлы
Безымянный.bmp ( 1,08 мегабайт )
Кол-во скачиваний: 73
generated.zip ( 654,4 килобайт )
Кол-во скачиваний: 80
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| DarkMaster |
23.4.2022, 2:21
|
          
Модератор UOPilot
Сообщений: 9.766
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30008
Пользователь №: 11.279

|
Цитата Блин, более менее начал осмысливать твое видение. А как ты решил проблему с кол-вом найденных элементов -1, т.е. искать все что найдешь ? Тут как я вижу работает только если железно знаем сколько найдем. Кстати с -1 проблемы условно нет, как я уже говорил заведомо большой буфер создать и не выносить мозг. А вот с ограничением N будут вопросы, возможные мьютексы и т.д. Но тут вообще есть очень опасный момент, что если каритнок реально много то в любой многопоточке проверка итогового количества изображений может мьютексами систему колом поставить. Взови миллион блокировок и разблокировок с реальным переключением потоков. Там боюсь проще будет найти все и выкинуть лишние. Вообще синхронизация количества и порядка найденных элементов для меня вопрос не имеющий однозначного ответа. Т.е. проделывая поиск на 10 элементов в области где этих элементов 100, то при многопоточке мы не можем гарантировать их порядок и непрервыность. Имхо в данном случае только передача локальных ограничений в 10 элементов в каждый поток даст фиксированный порядок. Но тут еще встает вопрос, а нужен ли будет этот фиксированный порядок? Вопросы откровенно говоря сложные и имхо очень сильно зависящие от конкретной ситуации и скорее всего подобные инструкции должны быть опциональными.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| Cockney |
23.4.2022, 12:10
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22672
Пользователь №: 16.156

|
К слову об оптимизациях c++ компилятора от майкрософт. Есть функция, в ней примерно такой код: Код if (arr[0] != r && arr[1] != b && arr[2] != g) {//....}Замеряю эту функция профилировщиком. 0,3мс, общее время выполнения программы 29мс. Запомнили ? теперь меняем в этой функции код на этот: Код if (arr[0] != r || arr[1] != b || arr[2] != g) {//....}Замеряю эту функция профилировщиком. 0,3мс, общее время выполнения программы 390мс. Отмечу, что время самой функции не меняется, а изменяется общее время работы. Такое себе не позволяет даже jit самый плохой.
|
|
|
|
|
|
| Cockney |
23.4.2022, 14:49
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22672
Пользователь №: 16.156

|
Цитата(cirus @ 23.4.2022, 12:09)  Всё верно.
А как оно верно может быть. Реально найти только 3, пилот это подтверждает Код Найдено изображений: 3 Координаты изображений: 1 - 7 2 % совпадения: 100 2 - 1 3 % совпадения: 66 3 - 9 5 % совпадения: 66 Все остальные изображения либо совпадают менее чем на 50% (левый верхний угол, левый нижний угол), либо являются строкой, которая вообще не найдется, т.к. сверху ничего более нет (правый верхний угол) Цитата(DarkMaster @ 23.4.2022, 2:21)  Кстати с -1 проблемы условно нет, как я уже говорил заведомо большой буфер создать и не выносить мозг. А вот с ограничением N будут вопросы, возможные мьютексы и т.д. Но тут вообще есть очень опасный момент, что если каритнок реально много то в любой многопоточке проверка итогового количества изображений может мьютексами систему колом поставить. Взови миллион блокировок и разблокировок с реальным переключением потоков. Там боюсь проще будет найти все и выкинуть лишние. Вообще синхронизация количества и порядка найденных элементов для меня вопрос не имеющий однозначного ответа. Т.е. проделывая поиск на 10 элементов в области где этих элементов 100, то при многопоточке мы не можем гарантировать их порядок и непрервыность. Имхо в данном случае только передача локальных ограничений в 10 элементов в каждый поток даст фиксированный порядок. Но тут еще встает вопрос, а нужен ли будет этот фиксированный порядок? Вопросы откровенно говоря сложные и имхо очень сильно зависящие от конкретной ситуации и скорее всего подобные инструкции должны быть опциональными.
А проблема оверлеев ? Когда при низкой точности совпадений находит на одном участке много картинок. Тут нужно выбирать лучшее. Я вообще решил это нахождением всего возможного и потом отбором лучших
|
|
|
|
|
|
| DarkMaster |
30.4.2022, 5:21
|
          
Модератор UOPilot
Сообщений: 9.766
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30008
Пользователь №: 11.279

|
Вобщем по поводу моего колора и падений производительности со временем на которые грешил sutra. Решилось изменением настроек джита. Мой вердикт по сути прежний - нужно функцию сравнения массивов (и ничего более) вынести в отдельную длл и все проблемы уйдут. В настройках увеличено количество хранимых трасировок и объем памяти под них, еще снижен порог для обнаружения горячей трассировки. Код jit.opt.start( "maxtrace=4000", --Max. number of traces in the cache "maxrecord=16000", --Max. number of recorded IR instructions "maxirconst=2000", --Max. number of IR constants of a trace "maxside=400", --Max. number of side traces of a root trace "maxsnap=125", --Max. number of snapshots for a trace "hotloop=24", --Number of iterations to detect a hot loop or hot call "hotexit=10", --Number of taken exits to start a side trace "tryside=4", --Number of attempts to compile a side trace "instunroll=4", --Max. unroll factor for instable loops "loopunroll=15", --Max. unroll factor for loop ops in side traces "callunroll=3", --Max. unroll factor for pseudo-recursive calls "recunroll=2", --Min. unroll factor for true recursion "sizemcode=256", --Size of each machine code area in KBytes (Windows: 64K) "maxmcode=8192") --Max. total size of all machine code areas in KBytes Сообщение отредактировал DarkMaster - 30.4.2022, 5:50
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| DarkMaster |
30.4.2022, 13:28
|
          
Модератор UOPilot
Сообщений: 9.766
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30008
Пользователь №: 11.279

|
Цитата проще, имхо, взять предсказуемый c#, а не подбирать десяток параметров джита. Честно говоря беспонятия какой из них сработал или их сочетание. Сделал нативно - сработало. Ну и я уже высказал свое мнение - перебор должен быть на, скажем, си, чтобы не было никаких оглядок на джит и было полное понимание происходящего. Собственно пребор на дллке имхо убирает все проблемы. Осталось побороть лень и дернуть студию чтобы сделать это так, как это нужно именно мне =)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| Cockney |
1.5.2022, 10:28
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22672
Пользователь №: 16.156

|
Цитата(DarkMaster @ 1.5.2022, 2:06)  и в чем будет проблема? ты предлагаешь вообще луа убрать из пилота что ли? Проблема актуальна только для высоко нагруженных кусков кода, а в пилоте он один - финды.
Откуда я знаю ? Смысл в том, что ты искать причины замучаешься, если такая проблема всплывет. Если перечитать беседу, то там вроде начиналось все с вполне регулярного кода, который вопросов не вызывает. Цитата(DarkMaster @ 1.5.2022, 2:06)  ты предлагаешь вообще луа убрать из пилота что ли?
это уже каждый должен сам решать, я лично бы после подобных фокусов от языка сгорел и выбросил его на помойку (с учетом того, что альтернатив куча). Да и причем тут пилот ? У каждого уже своя реализация пилота по ощущениям, поэтому нет ограничений.
|
|
|
|
|
|
|
  |
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0
|
|