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

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

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

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

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