Здравствуйте, гость ( Вход | Регистрация )

30 страниц V « < 23 24 25 26 27 > »   
Ответить в эту темуОткрыть новую тему
> Разработка findcolor, findimage, Pure lua
DarkMaster
сообщение 1.5.2022, 11:40
Сообщение #481


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Цитата
Откуда я знаю ? Смысл в том, что ты искать причины замучаешься, если такая проблема всплывет.

Начнем с того, что луа - это язык который создавался, как интерфейс между сишными нагруженными функциями. Хочешь выжимать из языка больше, чем то для чего это предназначено? Ну твои (в данном случае мои) проблемы. Не нравятся проблемы джита? Ну так jit.off() и никаких неожиданностей. Будет обычный луа, расширенный ffi.
Цитата
я лично бы после подобных фокусов от языка сгорел и выбросил его на помойку (с учетом того, что альтернатив куча)

Тут нужно четко понимать на что ты идешь. Я понимал. Хотелось подергать судьбу за хвост и получить джекпот, не получилось. Я вполне отдавал себе отчет в возможных причинах и ограничениях. Если брать производительность, то ирония в том, что даже при хреновом прогнозировании jit'ом ты получаешь производительность существенно выше, чем без него и крайне приятную в отношении альтернатив. Простота и удобство для луа лично для меня очень высоки. В стародавние времена когда я учил С/С++ меня напрягали очень многие вещи, которые мне даже на заре моего разума казались велосипедами, которые давно должны были быть решены в общем случае за исключением высоконагруженных участков кода. В силу своего характера я не привык тупо говорить "гадость", а прокручивал в голове то, как бы я хотел это видеть и как бы это могло быть решено. Лет через 5 после этого я впервые увидел луа (задолго до пилота) и сказать, что моему удивлению не было предела - ничего не сказать. Все было реализовано примерно на 90% именно так, как я видел и мечтал. Мои мысли с разрабами сошлись очень сильно и лично для меня существенных минуса всего два: разошедшиеся пути главной ветки луа и jit версии (и то в следствии того, что jit версия заглохла) и некоторая ограниченность готовых биндингов в следствии пункта первого. У каждого языка есть своя ниша и lua имхо со своей справляется отлично, просто он меня наказал за то, что я пытался из речного трамвайчика сделать атомный ледокол. Это уж точно не вина языка и еще раз - я понимал на что я иду и все риски.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.5.2022, 19:35
Сообщение #482


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Поправил предыдущие замечания. Если найдете новые буду только рад.

Пароль: uopilot



Прикрепленные файлы
Прикрепленный файл  release_20220503.zip ( 4,78 мегабайт ) Кол-во скачиваний: 51
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 3.5.2022, 21:39
Сообщение #483


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26829
Пользователь №: 16.971
Возраст: 29



Координата X на 1 меньше чем нужно.
Red.bmp:
Цитата
X: 29, Y: 31, accuracy: 100

На самом деле X: 30, Y: 31, можно в пейнте проверить.

Red.bmp обрежь снизу до размера 10*18. Результаты поиска:
Цитата
Found: 13
X: 29, Y: 31, accuracy: 100
X: 29, Y: 50, accuracy: 100
X: 97, Y: 51, accuracy: 100
X: 97, Y: 70, accuracy: 100
X: 74, Y: 133, accuracy: 100
X: 74, Y: 152, accuracy: 100
X: 173, Y: 113, accuracy: 100
X: 173, Y: 132, accuracy: 100
X: 220, Y: 41, accuracy: 100
X: 220, Y: 60, accuracy: 100
X: 220, Y: 79, accuracy: 100
X: 257, Y: 153, accuracy: 100
X: 257, Y: 172, accuracy: 100

29, 50 - это конечная по Y координата найденной картинки. Т. е. нашлось что-то не то.

Не проще ли указывать цвет фона отдельным параметром? Никогда не понимал в чём удобство закрашивания левого верхнего пикселя.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.5.2022, 22:04
Сообщение #484


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(cirus @ 3.5.2022, 21:39) *


Не проще ли указывать цвет фона отдельным параметром? Ни когда не понимал в чём удобство закрашивания левого верхнего пикселя.


проще. удобств нет, осталось в наследство от поведения пилота.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.5.2022, 11:36
Сообщение #485


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Цитата
Не проще ли указывать цвет фона отдельным параметром? Никогда не понимал в чём удобство закрашивания левого верхнего пикселя.

Это удобно при машинной обработке изображения. Альтернатива разве что запись имени файла, но тут уже вопросы удобства еще бОльшие.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 14.5.2022, 1:45
Сообщение #486


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Можете накидать картинки на которых свои поделки тестите ? Или из практики что-то.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.5.2022, 21:13
Сообщение #487


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Я обычно в пеинте просто что-то рисовал, т.к. тестил весьма определенные моменты.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.6.2022, 22:51
Сообщение #488


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Попробовал с длл... В длл перебор получается 6.5 раз дольше... Что не так?
Код
DLLIMPORT int * shadow(int result[][5], int size_result)
{

    result [0][0] = 10;
    result [0][1] = 11;
    result [0][2] = 0;
    result [0][3] = 1;
    
    
    for (int i = 0; i < 1000000000; i++){
        if (result [0][0] < result [0][1]) {
            result [0][2]++;
            result [0][3]++;
        }
    }
    
    return result[0];
}

Код
local t = os.clock()
log(    array_comparator.shadow(result, 1024)   )
log("dll два инкремента:", os.clock()-t)
log(result[0][2])
log(result[0][3])
log""

result[0][0] = 10
result[0][1] = 11
result[0][2] = 0
result[0][3] = 1
local t = os.clock()
for i = 1, 1000000000 do
    if result[0][0] < result[0][1] then
        result[0][2] = result[0][2] + 1
    end
end
log("lua 1 инкремент:", os.clock()-t)
log(result[0][2])
log""

result[0][0] = 10
result[0][1] = 11
result[0][2] = 0
result[0][3] = 1
local t = os.clock()
for i = 1, 1000000000 do
    if result[0][0] < result[0][1] then
        result[0][2] = result[0][2] + 1
        result[0][3] = result[0][3] + 1
    end
end
log("lua 2 инкремента:",os.clock()-t)
log(result[0][2])
log(result[0][3])
log""


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.6.2022, 23:17
Сообщение #489


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Врубил оптимизацию в компиляторе (да-да, я мега сишник).
время выполнения изменилось с
dll два инкремента: 4.01
lua 1 инкремент: 0.624
lua 2 инкремента: 0.647

на
dll два инкремента: 0.75399999999999
lua 1 инкремент: 0.623
lua 2 инкремента: 0.648

Ну как-бы лучше, но как-бы все равно wtf...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.6.2022, 23:24
Сообщение #490


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(DarkMaster @ 3.6.2022, 22:51) *

Попробовал с длл... В длл перебор получается 6.5 раз дольше... Что не так?
Код
DLLIMPORT int * shadow(int result[][5], int size_result)
{

    result [0][0] = 10;
    result [0][1] = 11;
    result [0][2] = 0;
    result [0][3] = 1;
    
    
    for (int i = 0; i < 1000000000; i++){
        if (result [0][0] < result [0][1]) {
            result [0][2]++;
            result [0][3]++;
        }
    }
    
    return result[0];
}

Код
local t = os.clock()
log(    array_comparator.shadow(result, 1024)   )
log("dll два инкремента:", os.clock()-t)
log(result[0][2])
log(result[0][3])
log""

result[0][0] = 10
result[0][1] = 11
result[0][2] = 0
result[0][3] = 1
local t = os.clock()
for i = 1, 1000000000 do
    if result[0][0] < result[0][1] then
        result[0][2] = result[0][2] + 1
    end
end
log("lua 1 инкремент:", os.clock()-t)
log(result[0][2])
log""

result[0][0] = 10
result[0][1] = 11
result[0][2] = 0
result[0][3] = 1
local t = os.clock()
for i = 1, 1000000000 do
    if result[0][0] < result[0][1] then
        result[0][2] = result[0][2] + 1
        result[0][3] = result[0][3] + 1
    end
end
log("lua 2 инкремента:",os.clock()-t)
log(result[0][2])
log(result[0][3])
log""




в сишном коде компилятор может не уметь выкинуть проверку условия, оно же константное (вообще оптимизация включена ?)

Цитата(DarkMaster @ 3.6.2022, 23:17) *

Врубил оптимизацию в компиляторе (да-да, я мега сишник).
время выполнения изменилось с
dll два инкремента: 4.01
lua 1 инкремент: 0.624
lua 2 инкремента: 0.647

на
dll два инкремента: 0.75399999999999
lua 1 инкремент: 0.623
lua 2 инкремента: 0.648

Ну как-бы лучше, но как-бы все равно wtf...



Студия на такие случаи имеет хороший профайлер. На почти каждую строчку выдает ее время исполнения. Гадать можно много, но мое мнение что компилятор не может хорошо оптимизировать такое. Возможно другой справится лучше
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.6.2022, 23:38
Сообщение #491


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Ну мне то, как раз бы понять именно скорость выпонения ифов. Сделал просто базовую синтетику чтобы понять разницу.
Типа в си время жрет иф, математика мгновенна, а в луа иф выкинут, матетматика тормоз?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.6.2022, 23:52
Сообщение #492


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(DarkMaster @ 3.6.2022, 23:38) *

Ну мне то, как раз бы понять именно скорость выпонения ифов. Сделал просто базовую синтетику чтобы понять разницу.
Типа в си время жрет иф, математика мгновенна, а в луа иф выкинут, матетматика тормоз?



иф жрет везде. непонятно что под капотом у луа и что сгенерил сишный компилятор
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.6.2022, 0:13
Сообщение #493


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Круто) Как променять непонятное поведение ffi на компилятор (IMG:style_emoticons/default/crazy.gif) (IMG:style_emoticons/default/laughingneqw.gif)
Ну запихаю весь перебор и будем посмотреть. Но пока реально сижу и ржу)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.6.2022, 1:07
Сообщение #494


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(DarkMaster @ 4.6.2022, 0:13) *

Круто) Как променять непонятное поведение ffi на компилятор (IMG:style_emoticons/default/crazy.gif) (IMG:style_emoticons/default/laughingneqw.gif)
Ну запихаю весь перебор и будем посмотреть. Но пока реально сижу и ржу)



Майкрософтовский компилятор ожидаемо вырезал все что тормозит. Весь цикл просчитал за 0,3 миллисекунды. Не СЕКУНД, а именно 300000 наносекунд

И да, я даже не сырые указатели использовал, а std::array - обертку над массивами, что по идеи должно утяжелить код.

Цитата(Cockney @ 4.6.2022, 1:05) *

Майкрософтовский компилятор ожидаемо вырезал все что тормозит. Весь цикл просчитал за 0,3 миллисекунды. Не СЕКУНД, а именно 300000 наносекунд

И да, я даже не сырые указатели использовал, а std::array - обертку над массивами, что по идеи должно утяжелить код.


Железо i3 2ghz
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.6.2022, 1:26
Сообщение #495


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Цитата
Майкрософтовский компилятор ожидаемо вырезал все что тормозит. Весь цикл просчитал за 0,3 миллисекунды. Не СЕКУНД, а именно 300000 наносекунд

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

Код
DLLIMPORT int * shadow(int result[][5], int size_result)
{

    for (int i = 0; i < 1000000000; i++){
        if (result [0][0] < result [0][1]) {
            //result [0][0]++;
            result [0][1]++;
        }
    }
    
    return result[0];
}

а так?
можно 0 0 раскомменитить, если будет умничать)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.6.2022, 1:37
Сообщение #496


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(DarkMaster @ 4.6.2022, 1:26) *

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

Код
DLLIMPORT int * shadow(int result[][5], int size_result)
{

    for (int i = 0; i < 1000000000; i++){
        if (result [0][0] < result [0][1]) {
            //result [0][0]++;
            result [0][1]++;
        }
    }
    
    return result[0];
}

а так?
можно 0 0 раскомменитить, если будет умничать)



А смысл считать ифы в секунду ? Мне кажется это странный подход к измерению производительности решения в целом. В реальных то задачах данные не синтетический: Оно может 5 раз на удачную последовательность попасть и закешировать, а может и не попасть.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.6.2022, 1:45
Сообщение #497


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



дык а что он закэширует то? адреса то постоянно будут смещаться на каждой итерации. По сути это ад для всех оптимизаций.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.6.2022, 1:47
Сообщение #498


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



Цитата(DarkMaster @ 4.6.2022, 1:45) *

дык а что он закэширует то? адреса то постоянно будут смещаться на каждой итерации. По сути это ад для всех оптимизаций.


Так бренч предикшн процессора
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.6.2022, 1:57
Сообщение #499


***********

Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29624
Пользователь №: 11.279



Ну он на чтение сработает. А ветвления он вообще никак не просчитает ибо там просчитывать просто нечего.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.6.2022, 2:03
Сообщение #500


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22550
Пользователь №: 16.156



А причем тут чтение ? Там механизм не связан с доступом к памяти вообще. Там статистика переходов ведется. Чем больше переходов по одной из веток, тем быстрее проверка будет в ифе, скажем досрочный прыжок. А чтобы такое было возможно нужно хорошие данные дать на вход.


Вообще все это не важно. Кол во ифов ты не посчитаешь, да и это не надо. Бери за эталон какое то время и старайся снизить асимптотику алгоритма. Все остальное за машиной. Лучше не сумеешь.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

30 страниц V « < 23 24 25 26 27 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 26.6.2025, 16:38
Designed by Nickostyle