Память процессора... Как обратиться? Заполнить? Освободить?
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Совершенный код, ИМХО, книга которую надо прочитать _ПЕРЕД_ тем как начать учиться программировать, чтобы понимать, какую цель надо преследовать во время разработки. Что управление сложностью гораздо важнее "оптимизированности" (до разумных пределов, конечно) ^_^ И перечитать после года овладения OOP,TDD и подобных методик
Brainenjii писал(а):книга которую надо прочитать _ПЕРЕД_ тем как начать учиться программировать, чтобы понимать, какую цель надо преследовать во время разработки
Вы правы.
Brainenjii писал(а):перечитать после года овладения OOP,TDD
Вы правы...
.
vitaly_l Мне так кажется что вы не с того начали учиться программированию.
Надобность в оптимизации кода встречается не так часто. Мне за 25 лет приходилось раза 3-4 оптимизировать быстродействие. Первый раз помню задача на XT считала почти сутки. Ускорить удалось до нескольких минут
Потом другую задачу пришлось просто переписать с бейсика на паскаль. Потом оптимизировал SQL запрос (в конце месяца все дружно начинали формировать отчет и сервер просто задыхался от нагрузки)... Ну больше и вспомнить не чего.
Основная масса задач рассчитана на работу с пользователем через форму. Юзверь он как правило очень тормозной, и за быстродействием современных компов просто не поспевает. В последней моей работе кода было написано около 120000 строк из них сама расчетная часть (та что нуждается в оптимизации) всего 1500 строк. Ну сократил умножения в цикле, ну инлайнами что-то заменил... Наскреб 12 процентов. Остальные тонны кода остались как есть. Работает и фиг с ним. Даже метод половинного деления не стал менять на золотое сечение
и так сойдет.
Если вы действительно хотите стать программистом, то есть такая замечательная книга - библия программиста. Называется "Искусство программирования" Д.Кнут трехтомник. Если вам удастся ее достать, читайте и наслаждайтесь. Там есть 99% всего что вам понадобится.
Надобность в оптимизации кода встречается не так часто. Мне за 25 лет приходилось раза 3-4 оптимизировать быстродействие. Первый раз помню задача на XT считала почти сутки. Ускорить удалось до нескольких минут
Основная масса задач рассчитана на работу с пользователем через форму. Юзверь он как правило очень тормозной, и за быстродействием современных компов просто не поспевает. В последней моей работе кода было написано около 120000 строк из них сама расчетная часть (та что нуждается в оптимизации) всего 1500 строк. Ну сократил умножения в цикле, ну инлайнами что-то заменил... Наскреб 12 процентов. Остальные тонны кода остались как есть. Работает и фиг с ним. Даже метод половинного деления не стал менять на золотое сечение
Если вы действительно хотите стать программистом, то есть такая замечательная книга - библия программиста. Называется "Искусство программирования" Д.Кнут трехтомник. Если вам удастся ее достать, читайте и наслаждайтесь. Там есть 99% всего что вам понадобится.
Код: Выделить всё
for i := 0 to 1000000с такими цифрами удачи не видать, и от "процессорной" оптимизации толку не будет((
vada писал(а):Называется "Искусство программирования" Д.Кнут трехтомник
Ужасные программисты... Вам лишь бы заставить художников читать... В смысле - спасибо добрый vada...
первый том книги здесь: http://reslib.com/book/Iskusstvo_progra ... goritmi_#1
второй здесь: http://reslib.com/book/Iskusstvo_progra ... goritmi_#1
это третий: http://reslib.com/book/Iskusstvo_progra ... _tom_3_#90
vada писал(а):Работает и фиг с ним.
Если априори писать код с учётом того, что описано в данном топике, то сам код - потом можно даже не оптимизировать... Исключения составляют совершенствование мат-формул... Юзвери... Юзвери... у меня 1000000 картинок их нужно сравнить и найти копии... На сравнение каждой картинки уходят доли секунды, но всё вместе... получается 1000000 на 1000000... долго...
vada писал(а):метод половинного деления не стал менять на золотое сечение
Что за золотое сечение, как в соотношениях композиции или просто пополам???
.
vitaly_l писал(а): На сравнение каждой картинки уходят доли секунды, но всё вместе... получается 1000000 на 1000000... долго...
А куда нам спешить? Меня лично очень напрягает тенденция, когда в задачах не критического уровня ставят огромные требования к оптимизациям и ресурсам. Эти требования там нефиг не нужны, пусть работает в фоне, пусть ест 20-30% процессора нам некуда спешить ибо это одноразовая задача.
vitaly_l писал(а):Исключения составляют совершенствование мат-формул...
Оптимизация для мат. формул простая - берешь математический пакет и упрощаешь там всю математику по самые не магу, а потом уже эту упрощенную вещь пишешь в программу.
Kemper писал(а):берешь математический пакет и упрощаешь
Я математические пакеты - упрощать точно не буду... я не математик...
в функцию превратить ещё куда не шло, а УПРОЩАТЬ... хотя... всё - относительно...
Kemper писал(а):пусть ест 20-30% процессора
А что ему ещё остаётся??? Выше "крыши" - не прыгнешь...
А если задача многоразовая???
.
Вот Вы немного раскрыли свою задачу по сравнение картинок.
Нужно эту задачу оптимизировать:
а) распараллеливание на несколько процессоров и даже на несколько компов.
б) вначале сравнивать упрощено, а если есть признаки совпадения, то сравнивать точно. Можно рассчитать некий индекс, или еще что-то (я не знаю в чем различие Ваших картинок).
Финальная оптимизация - уже дает копейки.
Нужно эту задачу оптимизировать:
а) распараллеливание на несколько процессоров и даже на несколько компов.
б) вначале сравнивать упрощено, а если есть признаки совпадения, то сравнивать точно. Можно рассчитать некий индекс, или еще что-то (я не знаю в чем различие Ваших картинок).
Финальная оптимизация - уже дает копейки.
alexey38 писал(а):распараллеливание на несколько процессоров и даже на несколько компов
Параллельные вычисления - это моя мечта... Буржуины проклятые мешают... Уже сто лет бы параллельные процессоры существовали... а то подсовывают свои бесталанные - допотопные тормозные интелы, которые ещё Аристотель придумал, а Бэббидж - усовершенствовал. Зачем им деньги???
alexey38 писал(а):сравнивать упрощено
Без этого вообще никак...
alexey38 писал(а):в чем различие Ваших картинок
Различие картинок??? Пусть будут буквы (символы)...
Растровые сравнивает. Подобные находит... даже если цвет поменять или офсет сделать...
Ускорить можно, только если в вектор перевести... (но я об этом пока только размышляю...)
Добавлено спустя 16 минут 55 секунд:
Re: Память процессора... Как обратиться? Заполнить? Освободить?
alexey38 писал(а):Можно рассчитать некий индекс
Индекс? Это интересный момент... здесь можно поподробнее????!
.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
http://habrahabr.ru/post/120562/
http://habrahabr.ru/post/120577/
заметьте, если бы изначально задавался вопрос - как быстро сравнить кучу изображений - рассуждения пошли бы в совсем другом ключе.
Самый лучший способ оптимизации - это смена алгоритма (кстати, из того же совершенного кода ^_^)
http://habrahabr.ru/post/120577/
заметьте, если бы изначально задавался вопрос - как быстро сравнить кучу изображений - рассуждения пошли бы в совсем другом ключе.
Самый лучший способ оптимизации - это смена алгоритма (кстати, из того же совершенного кода ^_^)
Brainenjii писал(а):рассуждения пошли бы в совсем другом ключе
Всё идёт как надо... Рассуждения идут в нужном ключе, ребёнок (в смысле я) - получил кучу необходимых знаний и умений...
Brainenjii писал(а):смена алгоритма
Я им(алгоритмом) не дорожу... Я так и думал: индекс - это хэш... Как работает хэш, я нутром понял, но алгоритмом нет...
Хэш изображений??? Этого я не могу понять даже нутром...
.
первый том книги здесь:
второй здесь:
это третий:
Это то.
Индекс? Это интересный момент... здесь можно поподробнее????!
Помните старый анекдот про нового учителя географии в абсолютно отвязном классе?
Ну... про натягивание презика на глобус... Где еще самый заинтересованный ученик спросил что такое глобус...
Ну так вот. С Кнута и начнем.
Есть такое понятие "целевая функция" или "индекс"... Кто как назовет.
Вас интересуют какие-то конкретные отличия картинок. Всю картинку побитно сравнивать смысла нет, ибо они могут быть из разных источников (фотик, скан с репродукции, кадр видео,...) они полюбому отличаются. Вот и строится умным программистом целевая функция, типа, а что сравнивать то? Например, в левом верхнем углу солнце. Оно частично прикрыто справа трубой дома. Вот вы в массе картинок и ищете нечто подобное. Т.е. должно быть более светлое пятно вида круга с отрезанным сектором. Это и будет целевой функцией.
Или, уже разработаны методы определения наличия человеческого лица на картинке... Поиск лица в определенном месте и есть целевая функция. Да много уже чего математически решено для картинок.
Есть и масса упрощенных методов поиска, например "метод монтекарло", или "метод случайного поиска". Он хорош тем что заранее известно сколько выборок вы будете делать для достижения некоторой вероятности попадания в цель.
Если попадание нашлось вот тогда включаются более более точные (более трудоемкие) методы поиска.
Просто если вы весь лимон картинок будете обрабатывать точным методом, это будет очень долго, но когда вы менее точным но более быстрым методом из лимона выбрали сто картинок... Прикиньте во сколько раз вы быстрее выполните свою работу...
Да чего я! Читайте Кнута. Там все есть.
vada писал(а):Читайте Кнута. Там все есть.
А потрещать???
vada писал(а):"целевая функция" или "индекс"
Значит это был не хэшь... а целевая функция...
Кстати в указанном, добрым Brainenjii, примере: вычисление хэш - делает лишнюю работу, т.к. разделяя на два цвета, он всё равно оставил матрицу 64х64 и просчитывает её как и без хэша, а вот точность сравнения, у него - уменьшилась... Однако вот Расстояние Хэмминга... Его я и пытаюсь сейчас перевести на язык художников и объяснить моим ленивым нейронам, как этим Расстоянием Хэмминга пользоваться...
.
Хэш это тоже целевая ф-я.
vada писал(а):Хэш это тоже целевая ф-я
Ну вот... опять всё поломалось... я полагал, что хэш - это число...
Число - это индекс...
Индекс - это хэш.
Хэш - это функция...
Целевая функция - это число...
Перегрузка.
Ресет.
О чём Мы говорили?
.
http://wiki.lazarus.freepascal.org/Comp ... xamples/ru
