Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: putman on January 04, 2017, 07:08:12 PM

Title: Время поиска картинки.
Post by: putman on January 04, 2017, 07:08:12 PM
Здравсте.

Меня вопрос тут посетил.
Бот ищет десяток картинок (10 х 15) в поле (300 х 100), стоит таймер, когда играю с главного компа (стоит флеш жёсткий диск) на поиск уходит около 200 мс.
Когда запускаю бота с виртуальной машины, жёсткий диск обычный с блинами, там 30-40 мс. получается.
Значит из кеша винта читает на виртуальной машине, ведь быстрее чем на флеш диске не может быть по определению ...
Но иногда и главный комп разгоняется до тех же 30-40 мс., но редко.

Как так, как бы сделать быстро и там и там ????
В будущем будет около сотни картинок и 2 секунды против 300-400 мс. это ощутимо уже получится.

Что скажете ?
Title: Re: Время поиска картинки.
Post by: Oraven on January 04, 2017, 07:29:44 PM
Не думаю что тут дело в чтении. Больше всего времени занимает сравнение пикселов. Тут все зависит от процессора, и степени его нагрузки.
Сделай картинки меньше.
Title: Re: Время поиска картинки.
Post by: putman on January 04, 2017, 07:37:03 PM
Не думаю что тут дело в чтении. Больше всего времени занимает сравнение пикселов. Тут все зависит от процессора, и степени его нагрузки.
Сделай картинки меньше.
Меньше нельзя, возникнет неоднозначность.
Процессор быстрый =), i7-4770, 3.5 ГГц.
Дело в том, что виртуальная машина стоит на одном и том же компе, т.е. проц в обоих случаях идентичен.
Из под виртуалки даже наверное послабее будет, она же (виртуальная машина) тоже жрёт ресурс небольшой.
Я думаю на кеш диска, иногда же и главный комп ищет 30 мс., значит то из кеша берёт данные, а то лезет за ними в память диска.
---
А вообще, Кликерман отличная программа, она сэкономила тысячи часов рутины в игре ))))
Пойду сделаю донат создателю, давно хотел.
Всех с НГ !!!
---
Жаль небезопасно хвастаться своими скриптами, он уже достаточно крут, бот сам днями играет.
А если похвастаться )))) то тут могут сидеть от игры админы, палить )))
 
Title: Re: Время поиска картинки.
Post by: Vint on January 04, 2017, 10:24:08 PM
Ищет столько времени и НЕ находит?
Он же ищет одну из? Ну вот и разный результат.
Или то на чём ищет - разное, неблагоприятное для таких заготовок.
У секретного скрипта, конечно, это не узнать  ;D ;D
Title: Re: Время поиска картинки.
Post by: dramster on January 04, 2017, 11:31:16 PM
поделюсь советом по ускорения работы кликера с графическим буфером. непойму только, почему никто не пользуется этой фичей  ???

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

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




чтото я может упускал, или чтото изменилось. всегда был уверен в вышесказанном. немного потестил. время выполнения гетскрин при 16бит  уменьшается примерно в 3-4 раза при огромных разрешениях (UHD) и в 9-10 раз при скрине небольших областей. с картинками не тестил, но при поиске пикселя существенной разницы не увидел  :( . возможно это както зависит от машины на которой проводились тесты ранее, или от версии кликера. вобщем я предложил вариант, но тепер не уверен в вышесказанном (кроме скорости выполнения гетскрина)  :-[
Title: Re: Время поиска картинки.
Post by: putman on January 05, 2017, 08:56:09 PM
Ищет столько времени и НЕ находит?
Он же ищет одну из? Ну вот и разный результат.
Или то на чём ищет - разное, неблагоприятное для таких заготовок.
У секретного скрипта, конечно, это не узнать  ;D ;D
Нет, я сужу по варианту, где ни одной из картинок нет и он перебирает их все.
И разница в скорости в 10 раз меня смущает.
Title: Re: Время поиска картинки.
Post by: putman on January 05, 2017, 08:58:17 PM
изменение глубины цвета - вот оно, вот что дает кучу скорости при работе с графикой.
Спасибо, очень хороший совет.
Title: Re: Время поиска картинки.
Post by: dramster on January 06, 2017, 01:43:41 AM
изменение глубины цвета - вот оно, вот что дает кучу скорости при работе с графикой.
Спасибо, очень хороший совет.
только жаль, что это не правда. :(
ну почему же, вполне даже правда. вот пример http://crapware.aidf.org/forum/index.php?topic=1803.0
какой бы у тебя не был супермега компутер с 28ядрами и девятью видеокартами и 1254 терабайтами оперативы  :D . ну не успевает кликер на 32 битном экране, хоть ты тресни. на 16битной картинке скорость гетскрина вырастает в десятки раз, и в этоге в игре ты в переди всех.
Title: Re: Время поиска картинки.
Post by: Vint on January 06, 2017, 03:15:09 PM
на 16битной картинке скорость гетскрина вырастает в десятки раз
Логически, скорость чисто гетскрина может вырасти максимум в 2 раза, т.к. объём данных меньше в два раза. Откуда десятки?
Конечно могут быть другие факторы, но они побочные. И десятков раз думаю ее будет.
Title: Re: Время поиска картинки.
Post by: dramster on January 06, 2017, 05:22:16 PM
А что мешает проверить? Я говорю как есть, и ничего не придумываю. Было проверено на старой слабой машине, и сейчас на более мощной. Участок 800x600 скринится в 8 раз быстрее, если область гетскрина еще уменьшать, время выполнения еще заметнее уменьшается. На больших участках - менее заметно. Как было проверено еще при написании бота на мастергитары, там время выполнения уменьшалось с 20 до 1 мс.
Title: Re: Время поиска картинки.
Post by: Vint on January 08, 2017, 10:50:19 PM
Мешают проверить праздники  ;)
Очень мешают.

Только что проверять? 800х600 быстрее в 8 раз чего?
Понятно, что чем меньше область, тем быстрее.
Проверял на сериях?
У меня на старом компе один! гетскрин был... 250-300мс всего экрана 1280х1024, после смены стало то ли 50, то ли 30 не помню. На работе было. Сейчас ни тех компов, ни тех мониторов.
Вот завтра померяю.
Title: Re: Время поиска картинки.
Post by: dramster on January 08, 2017, 11:25:20 PM
Только что проверять? 800х600 быстрее в 8 раз чего?
Понятно, что чем меньше область, тем быстрее.

Я имел ввиду то, что при смене глубины цвета на 16 бит, скорость выполнения гетскрина области 800х600 выростет в 8 раз. Если эту область уменьшить до 50х50 к примера то разница в скоростях при 32 и 16бит будет уже раз в 20.
Примерно конечно, тоже щяс неначем потестить, но примерно помню, так как ранее тестил. Я просто это к тому, что ты написал, что скорость выполнения должна вырости в 2 раза. Теоретически это так, но на практике вот этак.
 При 16бит можно добиться того, что гетскрин выполняется мгновенно, 0-1мс, при условии что область не велика, точно помню как писал для игры мастер гитары, там область скрины при 32бит выполнялась 25-30мс, и бот терял смысл, так толку от него никакого, как только сменил на 16бит, радости не было предела. Бот приходилось притормаживать механически, так как самые сложные треки проходил  на 100%.
И теперь, если существует задача постоянного сканирования экрана, на лету, каждый фрейм, сразу меняю глубину цвета.
Вспомнил последнее применение, классическая змейка, миниигра в большой игре, чтоб заполнить все поле змейкой, набрать максимум очков нужно змейку направлять через все поле. Движется она очень очень быстро. как обычный гетскрин при 32 битах успеет делать скрин области, если она огромна? Я набрал максимум, получил жалобу, и чуть не получил бан. :D
Title: Re: Время поиска картинки.
Post by: Vint on January 09, 2017, 11:18:52 AM
Так, потестировал.

Код:
[spoiler]
Code: (clickermann) [Select]
#name "Тест на скорость"
// Author: Vint
// Version: 6.0 (09.091.2017)

$count = 100         // количество повторов
$wait = 1               // основная задержка

//===  Вывод времени выполнения ms в формате час:мин:сек,мс ====================
SUB(timeprint, $tt_print)
    IF($tt_print > 999)
        $timesec = $tt_print/1000
        $hours = INT($timesec/3600)
        $minuts = INT(($timesec - ($hours*3600))/60)
        $sec = ($tt_print - ($hours*3600*1000) - ($minuts*60*1000)) / 1000
        LOGWRITE($hours, ":" , $minuts , ":" , $sec)
    END_IF
END_SUB

//===  Вывод времени выполнения  ===============================================
SUB(print_timeaction, $actionnamet, $tt_search)
    LOGWRITE("время выполнения ", $actionnamet, ":  ", $tt_search, " мс")
    timeprint($tt_search)
END_SUB

//==============================================================================

WAIT(1)
LOGCLEAR
$timer1 = $_ms

// тестируемый код
//==============================================================================
FOR($i=0, $i < $count)
    GETSCREEN
    //GETSCREEN(0, 0, 800, 600)
    //WAITMS($wait)
END_CYC
//==============================================================================


$time_test = $_ms - $timer1

LOGWRITE("===============  тест времени выполнения  ===============")
LOGWRITE("Разрешение экрана   ", $_xmax+1, "x", $_ymax+1)
LOGWRITE(" ")
print_timeaction("тест 1", $time_test)
LOGWRITE("среднее время за ", $count, " повторений:  ", $time_test / $count, " мс")
LOGWRITE(" ")

HALT
[/spoiler]

Предварительная пауза при старте - 1 сек
Сериями по 100 шт.
Десяток запусков на каждом тесте, диапазон результатов.

Результаты:
Code: [Select]
GETSCREEN(0, 0, 800, 600)
 480000 px

 32 bit    1.2 - 1.3 мс
 16 bit    2.3 - 2.4 мс

Code: [Select]
GETSCREEN   // 1600x900
 1440000 px   - ровно в 3 раза больше пикселов

 32 bit    3.1 - 3.2 мс
 16 bit    6.4 - 6.6 мс

Всё согласно теории!  :o  ну почти...
В 3 раза больше пикселов - в 3 раза больше время гетскрина.
16 bit  в два раза быстрее 32 bit  только у меня наоборот  ;D ;D  32 bit быстрее. Чудеса.

Система Win XP SP3 32 битная!
i5-2500 CPU 3.30 GHz
3,46 ОЗУ
Title: Re: Время поиска картинки.
Post by: dramster on January 09, 2017, 09:44:04 PM
 :o интересно, очень интересно. Жаль что я в данный момент не могу подтвердить свои тесты  :( . Но я обязательно покажу свои результаты... примерно через недельку.
Title: Re: Время поиска картинки.
Post by: dramster on January 24, 2017, 04:19:28 PM
неужели, приехал домой  :D .
вот твой тест на моем компе. @Vint


весь экран. 5120x2160
Code: [Select]
32 бит
15:25:20 ===============  тест времени выполнения  ===============
15:25:20 Разрешение экрана   5120x2160
15:25:20 
15:25:20 время выполнения тест 1:  13099 мс
15:25:20 среднее время за 100 повторений:  130.99 мс
15:25:20 
16 бит
15:26:25 ===============  тест времени выполнения  ===============
15:26:25 Разрешение экрана   5120x2160
15:26:25 
15:26:25 время выполнения тест 1:  2269 мс
15:26:25 среднее время за 100 повторений:  22.69 мс

GETSCREEN(0, 0, 800, 600)

Code: [Select]
32 бит
15:27:48 ===============  тест времени выполнения  ===============
15:27:48 
15:27:48 время выполнения тест 1:  2295 мс
15:27:48 среднее время за 100 повторений:  22.95 мс
15:27:48
16 бит 
15:28:18 ===============  тест времени выполнения  ===============
15:28:18 
15:28:18 время выполнения тест 1:  146 мс
15:28:18 среднее время за 100 повторений:  1.46 мс

GETSCREEN(0, 0, 100, 100)

Code: [Select]
32 бит
15:29:27 ===============  тест времени выполнения  ===============
15:29:27 
15:29:27 время выполнения тест 1:  2227 мс
15:29:27 среднее время за 100 повторений:  22.27 мс
15:29:27 
16 бит
15:30:15 ===============  тест времени выполнения  ===============
15:30:15 
15:30:15 время выполнения тест 1:  22 мс
15:30:15 среднее время за 100 повторений:  0.22 мс
15:30:15 

чуешь разницу  :D . на области 100х100 в 100 раз быстрее выполняется при 16 бит   :D.  кстити ставил 8 бит  - время выполнения примерно тоже что и при 16бит, "среднее время за 100 повторений:  0.2 мс" при 100х100, но тут сильно не разгонишся, всего 256 цветов.  16 бит же вполне хватает для анализа любого изображения, и колормод не потребуется - 65 536 цветов .

система Win7 Ultimate 64bit
AMD FX(tm)-8350 Eight-Core Processor 4.00GHz
16,0 ГБ ОЗУ




;D ;D ;D ;D ;D ;D ;D ;D

пока писал пост, прикинул, что может и не от количества цветов зависит. проверил:

GETSCREEN(0, 0, 800, 600) 32 бит
Code: [Select]
  стиль Aero
15:55:45 ===============  тест времени выполнения  ===============
15:55:45 
15:55:45 время выполнения тест 1:  1906 мс
15:55:45 среднее время за 100 повторений:  19.06 мс
15:55:45
 Классический стиль
15:56:13 ===============  тест времени выполнения  ===============
15:56:13 
15:56:13 время выполнения тест 1:  57 мс
15:56:13 среднее время за 100 повторений:  0.57 мс
15:56:13

GETSCREEN(0, 0, 100, 100) 32 бит  Классический стиль
Code: [Select]
16:14:42 ===============  тест времени выполнения  ===============
16:14:42 
16:14:42 время выполнения тест 1:  19 мс
16:14:42 среднее время за 100 повторений:  0.19 мс

во как оно бывает, вот что препятствует сканированию  ;D . и глубина цвта тут не причем, просто при 16 бит рабочий стол переходит в "Упрощенный стиль" .

Век живи – век учись... и тестируй.  ;D
Title: Re: Время поиска картинки.
Post by: Vint on January 25, 2017, 10:45:38 AM
Вот так начнёшь изучать симейные портреты...©

Вот что творит AEROфобия   ;D

Ещё не дочитав, меня удивили твои результаты:
при 32 bit   что 800x600 , что 100x100 всё едино.

А так прикольно получилось.
При переходе     32-16              800x600  выгода в 15,7 раз,
а при                   Aero-Classic    800x600  выгода в 33,4 раза.
Значит при переходе на 16 bit не только стиль упрощался, но что-то мешало. Как у меня 16 bit в два раза дольше 32
Вот попробуй, для интереса на классическом 800x600   32 и 16.

Надо занести этот важный факт в справку. На критических по времени задачах отключать AERO!
Title: Re: Время поиска картинки.
Post by: dramster on January 25, 2017, 12:33:54 PM
Значит при переходе на 16 bit не только стиль упрощался, но что-то мешало. Как у меня 16 bit в два раза дольше 32
Вот попробуй, для интереса на классическом 800x600   32 и 16.

все верно, 16 бит мешает выполнению гетскрина, и даже не в 2, а почти в 3 раза.

GETSCREEN(0, 0, 800, 600) классический стиль
Code: [Select]
32 бит
12:07:14 ===============  тест времени выполнения  ===============
12:07:14 
12:07:14 время выполнения тест 1:  58 мс
12:07:14 среднее время за 100 повторений:  0.58 мс
12:07:14
16 бит
12:08:32 ===============  тест времени выполнения  ===============
12:08:32 
12:08:32 время выполнения тест 1:  147 мс
12:08:32 среднее время за 100 повторений:  1.47 мс
12:08:32 

еще пару тестов: упрощенный стиль и классический стиль - разницы нету, скорость на максимуме. тормозит именно аэро.

а насчет 16 бит и 32 бит, по сути разницы не должно было быть. в кликермане в память походу пишет в любом случае по 8 бит на канал, и ему до лампочки что там на экране.  а вот что там тормозит, это вопрос...
 
и еще, когда я капался в памяти кликера http://crapware.aidf.org/forum/index.php?topic=2134.msg12725#msg12725 , заметил, что в графическом буфере записано 32 бит на пиксель, тоесть еще 8 бит на прозрачность, всегда 255. зачем? конечно Johnny виднее... но как по мне, если не писать в память лишние данные, скорость немного повысится. а еслиб еще кликер понимал что на экране шестнадцатибитное изображение, и писал в память не по 8 бит на канал, а так как на экране - 5:5:6 бит на каждый канал соответственно, получился бы еще небольшой прирост  :D. но это только мои догадки, не воспринимайте серьезно  :D .





насчет того что записывается канал прозрачности, я скорее всего ошибаюсь, так как в буфер прозрачность не записывается, там уже до записи постоянно существуют эти данный, просто эти 8 бит прозрачности не используются.
Title: Re: Время поиска картинки.
Post by: Vint on January 25, 2017, 01:43:34 PM
Я думаю что 4 байта вместе с прозрачностью это стандарт. Видно библиотеки так все написаны. Это заодно и оптимизация, обрабатываются два слова или скорее двойное слово. Эти данные всё равно читаются и на их отсеивание и выкидывание потратится лишнее время.
Двойное слово, и даже просто слово, считается или запишется быстрее, чем раздельно 5+5+6 бит. Нужно сформировать эти два байта собирая биты. А в кликере тоже их хранить как 2... нееее. Это весь поиск, сравнение переписывать. Ради чего. Тупиковое направление.