EuroDiffusion
P.S. Я вот иногда думаю мож меня на работу не берут потому что я Януковича на выборах поддерживал ? :)))
Показывай то, что у тебя наработано потом уже будем менять правила.
гыг - другими словами ты отказываешься ? раз ты отказываешься то боишься проиграть в этом случае , более того ты знаешь что если ты согласишься то проиграешь. А чего тебе бояться - ведь массивы не вносят большого прироста ? на самом деле мой задум был в том что бы с помощью такого примера - показать что дало наибольший прирост произвдоительности - массивы или раздельная обработка мотивов. я думаю простой эксперимент легко покажет - что именно массивы - дают наибольший прирост произвдительности - примерно в 30 раз. а раздельная обработка - максиум в 3-4 раза. таким образом путем простых арифметических подсчетов мы получаем что моя оптимизация примерно в 10 раз ( 30 / 3 ) эффективнее твоей.... все таки списки - это чудовищно .... :))) долой STL да здраствуют массивы :)))
Ты сам то осознаешь, как выглядит твоё предложение?
Примерно так: "моя программа будет похуже твоей, поэтому давай ты немного подпортишь свою, а я немного свою".
Я не вижу смысла снижать производительность своей программы.
Я согласен на то, что ты будешь использовать предложенный мной метод оптимизации. Я, вообще, играю в открытую.
Ты обещал, что превзойдешь мой результат? Дерзай, и посмотрим, что из этого получится.
Не получается?
Не надо искать обходных путей, пытаться изменить правила на бегу. Если не получается, так и скажи, а уж после предлагай другие эксперименты.
Не беспокойся, никто в тебя пальцем тыкать не будет и лузером звать не будут.
пустословие. хочешь увидеть более быструю версию ? подожди немного я придумал как, но возьмусь за реализацию не раньше чем закончу другой проект, который у меня счас на первом месте.
Ты без пустословия прожить можешь?
ты научился правильно видеть набор проблем - но неправильно распределяешь его по объектам - в данном случае ты перепутал меня с собой.
Я не отказывался, а предложил для начала доиграть раунд до конца без изменений правил игры и позволить тебе осуществить свои угрозы почти трехнедельной давности: "Исходников пока не выкладываю так как уверен что в рамках своей структуры ( хотя возможно с изменниями интерфесов ) мне удастя превзойти твой результат. Жди."
:D
М-да...
А что мешает то самому свой или мой пример прогнатькак с использованием одного приема, а потом другого?
Ок. Раз опыта самому сделать не хватает, потом сделаем вместе... :)
Но сначала сделай, что обещал и чем пугал
я думаю простой эксперимент легко покажет - что именно массивы - дают наибольший прирост произвдительности - примерно в 30 раз. а раздельная обработка - максиум в 3-4 раза.
таким образом путем простых арифметических подсчетов мы получаем что моя оптимизация примерно в 10 раз ( 30 / 3 ) эффективнее твоей.... все таки списки - это чудовищно .... :)))
Ты ещё не проделал эксперимент, даже не приступил к нему, а уже делаешь громкие выводы. Не рановато ли?
долой STL да здраствуют массивы :)))
да твоё реальное отношение к ООП для меня уже давно не секрет
пустословие. хочешь увидеть более быструю версию ? подожди немного я придумал как, но возьмусь за реализацию не раньше чем закончу другой проект, который у меня счас на первом месте.
Да я уже жду от тебя хоть чего-нибудь реального (а не сотрясания воздуха) уже больше месяца (с 10.11.2006).
да твоё реальное отношение к ООП для меня уже давно не секрет
STL - это еше не все ООП. лично мне STL не очень нравится. во первых потому что всякие идиоты из за того что я не выучил наизусть все подробности STL не давали мне работы. во вторых , с моей точки зрения его сложно использовать. все может быть гораздо проще.
вот скажи , Зеленый что для тебя ООП ? средство создания более быстрых или занимающих меньше места программ, более расштряемых программ или техника преодоления сложности ? мне больше видится последнее. с помощью ООП большинство задач я решаю в считанные часы. но вот ведь с точки зрения тактико-технических характеристик они уступают программам в алгоритмическом стиле. что скажешь ?
Уже третий месяц пошел с твоей последней попытки...
вот скажи , Зеленый что для тебя ООП ? средство создания более быстрых или занимающих меньше места программ, более расштряемых программ или техника преодоления сложности ? мне больше видится последнее. с помощью ООП большинство задач я решаю в считанные часы. но вот ведь с точки зрения тактико-технических характеристик они уступают программам в алгоритмическом стиле. что скажешь ?
Для меня ООП - это объектно-ориентированное программирование, способ связать данные и алгоритмы их обработки в единую сущность.
ООП не очень сильно ушло от процедурного программирования по части переиспользуемости и расширяемости кода. В основном ООП вносит удобства в разработку, а любые удобства требуют дополнительных затрат. Но эти затраты не связане непосредственно с ООП, т.е. ООП непосредственно не влияет ни на производительность, ни на расход памяти. Затраты связаны с конкретной реализацией механизма ООП, т.е. с уровнем ниже, и с архитектурными решениями на базе ООП, т.е. на уровень выше.
Удобство разработки увеличивает скорость разработки, что при итерационном подходе приводит к более близкому приближению (за счет большего количества итераций за тот же промежуток времени) к некоторому идеалу (более оптимальному варианту). Поэтому потери на сам механизм ООП могут быть с лихвой перекрыты полученным в результате более оптимальным решением.
я только что улучшил твой рекорд. Из сего следует что твоя программа ( как и первая моя )медленная , поэтому я ее улучшил. :D :D :D. смотри приложение. но в принципе я оставляю за собой необходимость выложить полностью свою программу.
Для меня ООП - это объектно-ориентированное программирование, способ связать данные и алгоритмы их обработки в единую сущность.
ООП не очень сильно ушло от процедурного программирования по части переиспользуемости и расширяемости кода. В основном ООП вносит удобства в разработку, а любые удобства требуют дополнительных затрат. Но эти затраты не связане непосредственно с ООП, т.е. ООП непосредственно не влияет ни на производительность, ни на расход памяти. Затраты связаны с конкретной реализацией механизма ООП, т.е. с уровнем ниже, и с архитектурными решениями на базе ООП, т.е. на уровень выше.
Удобство разработки увеличивает скорость разработки, что при итерационном подходе приводит к более близкому приближению (за счет большего количества итераций за тот же промежуток времени) к некоторому идеалу (более оптимальному варианту). Поэтому потери на сам механизм ООП могут быть с лихвой перекрыты полученным в результате более оптимальным решением.
то есть если отталкиваться от архитектуры современных процессоров ( не приспособленных для ООП ) - то сегодняшняя реальность ООП - быстрая разработка в обмен на производительность кода. согласен ?
Я отсмотрел изменения, которые ты внес в мой код.
Ты сделал лишь одно изменение в коде:
Portion& portion = portionline[x];
portion.coins = coins / portionCoinsRate;
coins -= portion.coins * portion.recipientCount;
}
:D
Недоразумение первое.
Видимо, ты действовал методом анализа кода, т.е. по-большому счету методом научного тыка.
Конечно, изначально может показаться, что исключение лишних математических операций на определенных итерациях может ускорить процесс. НО! Проверка и ветвление довольно трудоемкие операции (IMHO отчасти это связано с кэшем команд), которые выполняются на каждой итерации и с каждой итерацией в этой проверке всё меньше смысла. А если воспользоваться профайлером, то оказывается, что эта проверка в большинстве случаев излишне, а затраты на проверку оказываются больше, чем на выполнение "безрезультатных" арифметических операций. В результате мы получаем проигрыш в быстродействии:
на задаче с 18 странами
BioUnit - 1.28 сек
mod - 1.34 сек
Модификацию несколько ускоряет использование Single-threaded (/ML), а Favor Fast Code (/Ot) не дает никакого результата. Но подобное "трюкачество" я бы вообще не рассматривал, т.к. мы говорим об алгоритме и коде (программе), а не о параметрах компиляции.
Недоразумение второе и ГЛАВНОЕ.
Оптимизировать мой код ты пытался, как я уже говорил, методом анализа, но к сожалению анализируя код, ты, видимо, не до конца разобрался с алгоритмом, который этот код реализует. В результате модификация выдает неверный ответ. Проверь на 18 странах и убедись.
Кстати, ошибки такого рода легко выявляются автоматически. Для этого надо лишь использовать юнит-тестирование. Точнее, регрессионное тестирование.
то есть если отталкиваться от архитектуры современных процессоров ( не приспособленных для ООП ) - то сегодняшняя реальность ООП - быстрая разработка в обмен на производительность кода. согласен ?
С такой категорисной постановкой не согласен.
Как уже говорил выше постом, быстрая разработка приводит обычно к увеличению производительности самого кода. Кроме того, даже на одной итерации ООП код не обязательно будет уступать процедурному.
С такой категорисной постановкой не согласен.
Как уже говорил выше постом, быстрая разработка приводит обычно к увеличению производительности самого кода. Кроме того, даже на одной итерации ООП код не обязательно будет уступать процедурному.
хм вот код посмотри... интересно что ты об этом думаешь... в основном конечно мои ошибки в том что я мыслю производительность программ так если бы я их выполнял на процесоре Z80 или 8086... на совремменных процессорах все сложнее.... надо будет изучить архитектуру совремменных процессоров...
Исключительно за счет Single-threaded (/ML), и то когда при сборке моей версии такого ключа нет.
При равных условиях сборки модифицированная версия проигрывает.
Но всё это не важно, т.к. модифицированная версия, как уже говорил, невалидная.
Версия t в скорости проигрывает (грубо 3 сек), версия t1 проигрывает в скорости (более 3 сек), да ещё и неверный результат выводит.
Код смотреть не стал, но первое впечатление: как-то неаккуратно и нагромаждено.
:D принимаю поздравления :D
Начнем с того, что ты трижды нарушил правила нашего "турнира":
1) Программа без кода не рассматривается.
2) решение и исходные данные должны удовлетворять условиям задачи
3) Основной показатель производительности - время работы на уже предоставленных примерах (наборы стран).
Правила можно посмотреть здесь и их никто не оспаривал:
http://forum.codenet.ru/showpost.php?p=154844&postcount=61
Что касается нарушения №2, то поле было 20х20, а не 40х40, а количество стран было 20, а не 36.
Я бы не рекомендовал увеличивать поля и количество стран, т.к. это приводит к увеличению времени работы программы, а сл-но измерения времени становятся не столь объективными (из-за различных внутрисистемных процессов).
Но что-то я сегодня добрый. Правила то пишутся для меня, а не для остальных участников, поэтому представляю результаты этого этапа. Кстати, сравни дату моей последней версии (10.11.2006) и твоей (12.02.2007), я уж не говорю о количестве попыток.
Чтож, посмотрим, обскачет ли мой старичек твою очередную супер версию:
на задаче с 18 странами
BioUnit - 1.578 сек
PitxBool - 1.735 сек
на задаче с 36 странами (NEW!)
BioUnit - 66.078 сек
PitxBool - 71.016 сек
ПОЗДРАВЛЯЮ!
Твоя программа хотя бы не делает ошибок!
Утешительный приз в студию!
P.S. Даже не знаю, есть ли смысл тебе теперь выкладывать код своей черепашки... :)
PitxBull - 92.531
Green - 94.828
Значит, все же уважаешь... ;)
мало того что твоя старая программа без соответсвующей модификации параметров выпадает с ошибкой на примере с 36 странами,
Конечно. Моя программа работает с валидными входными данными.
Перечитай условие задачи.
Но для таких хитрецов (не умеющих читать условия задач) я специально вынес все размерности в отдельный файл constans.h
так она еше выполняется на две с половиной секунды медленее.
PitxBull - 92.531
Green - 94.828
Ещё раз перепроверил на другой машине:
на задаче с 18 странами
BioUnit - 1.281 сек
PitxBool - 1.5 сек
на задаче с 36 странами
BioUnit - 53.031 сек
PitxBool - 60.171 сек
Так что где-то ты ошибаешься в подсчетах времени.
Либо, как я уже говорил, из-за продолжительности расчета (полторы минуты - шутка ли) в подсчет времени вкрадывается большая ошибка из-за влияния ОС и других запущенных програм, а если ты ещё параллельно что-то делал на машине, то тогда вероятность ещё больше.
Недаром же ты не приводишь результаты менее продолжительных расчетов ;)
Ты так предсказуем... (http://forum.codenet.ru/showpost.php?p=173555&postcount=11) :)
Давай попросим кого-нибудь из форумчан сделать тест и на своей машине.
[size=4]Уважаемые независимые орбитры[/size],
я подготовил пакет для тестирования. Вам достаточно загрузить его, распаковать и запустить test.bat.
Тест будет выполняться долго (минут пять), наберитесь терпения и для чистоты эксперемента не запускайте никаких дополнительных программ, не переключайте окна, и т.п. Хорошо бы на время отключить скрин-сейфер. Но если лень, можете этого не делать. :)
Тест выведет результат, примерно следующего вида:
18 countries:
BioUnit - 1.281
PitxBull - 1.515
36 countries:
BioUnit - 53.031
PitxBull - 61.375
Для продолжения нажмите любую клавишу . . .
Перенесите эти данные в эту тему форума. Спасибо!
Для чистоты эксперемента тест можно запустить несколько раз.
[color=red]
P.S. Из-за ограничений на объем прилагаемого архива, я изъял свою версию программы из архива. Её нужно скачать отдельно здесь: [attach]1593[/attach] (это последняя версия)
и распаковать в туже папку, что и содержимое архива benchmark.ZIP
[/color]
Пятикратный запуск теста производился из консоли.
Оборудование:
M/B: WinFast® 6100K8MA by FOXCONN
CPU: AMD™ Athlon 64 3200 (2.0Ghz)
RAM: 512MB Hynix PC3200
Средний результат:
BioUnit - 1.25
PitxBull - 1.453
36 countries:
BioUnit - 48.937
PitxBull - 62.125
18 countries:
BioUnit - не удается выполнить указанную программу
PitxBull - 2.937
36 countries:
BioUnit - не удается выполнить указанную программу
PitxBull - 115.062
Для продолжения нажмите любую клавишу . . .
Железо: Ноутбук Asus A6JC, CoreDuo,1024 Mb
Тест 1 (результаты выводились в файл):
BioUnit - 1.593
PitxBull - 1.64
36 countries:
BioUnit - 68.765
PitxBull - 73.703
Тест 2 (вывод на консоль):
BioUnit - 1.593
PitxBull - 1.64
36 countries:
BioUnit - 68.766
PitxBull - 73.687
Тест 3(вывод на консоль):
BioUnit - 1.578
PitxBull - 1.64
36 countries:
BioUnit - 68.781
PitxBull - 73.703
CPU Pentium 4 531 - 3 GHz
Memory DDRII 2x512 MB 533 MHz
WinXp SP2 (про лицензию ничего говорить не буду)
антивирус NOD32 запущен в активном состоянии
со службами пока не ковырялся (установил систему только неделю назад)
вот что было у меня
BioUnit - 1.406
PitxBull - 1.546
36 countries:
BioUnit - 54.109
PitxBull - 61.125
Для продолжения нажмите любую клавишу . . .
CPU: Celeron 1.70 GHz
RAM: 1024 Mb Samsung PC3200
M/B: Asus P4PE
18 countries:
BioUnit - 2.984
PitxBull - 4.25
36 countries:
BioUnit - 293.906
PitxBull - 279.687
18 countries:
BioUnit - 2.828
PitxBull - 3.563
36 countries:
BioUnit - 250.078
PitxBull - 224.125
18 countries:
BioUnit - 2.796
PitxBull - 3.656
36 countries:
BioUnit - 244.734
PitxBull - 220.781
18 countries:
BioUnit - 2.812
PitxBull - 3.015
36 countries:
BioUnit - 236.453
PitxBull - 220.734
18 countries:
BioUnit - 2.812
PitxBull - 3.656
36 countries:
BioUnit - 245.406
PitxBull - 220.609
Первый дополнительный тест(+ NOD32, Outpost, Server4PC, matlabserver):
18 countries:
BioUnit - 10.297
PitxBull - 10.656
36 countries:
BioUnit - 309.796
PitxBull - 266.875
Второй дополнительный тест (безопасный режим):
18 countries:
BioUnit - 3.641
PitxBull - 5.906
36 countries:
BioUnit - 238.953
PitxBull - 216.14
Пояснения: в основных тестах было запущено 24 процесса, которые комп особо не грузили: 2 - 7 %. запускал всегда test.bat, скринсейвер отключен, мышь не трогал и т.д.
P.S. что мне показало, то я и запостил.
Железо:
CPU: AMD Athlon-64 3000+ 754 2.0 GHz
RAM: 1024 Mb
M/B: Gigabyte Technology Co., Ltd. K8T800-8237
Чистый тест, с отключенным АВ, сетью, без работы других приложений:
18 countries:
BioUnit - 1.234
PitxBull - 1.468
36 countries:
BioUnit - 54.312
PitxBull - 63.109
Запущены АВ (KIS 6 в среднем режиме без.), опера, сеть, играется без остановок фильм:
18 countries:
BioUnit - 1.578
PitxBull - 1.968
36 countries:
BioUnit - 73.015
PitxBull - 82.968
MB: ASUS K8N (nForce 3 250)
CPU: AMD Sempron64 2800+ (1.6 GHz)
RAM: Kingston DDR400 2x256
---
Проводилось в такой среде: [ATTACH]1588[/ATTACH]
5 тестов
Вот средние значения
PitxBull - 1,84
36 countries:
BioUnit - 61,3746
PitxBull - 76,3528
А вот результаты по каждму тесту
[ATTACH]1589[/ATTACH]
BioUnit - не удается выполнить указанную программу
PitxBull - 2.937
36 countries:
BioUnit - не удается выполнить указанную программу
PitxBull - 115.062
Для продолжения нажмите любую клавишу . . .
Да, пардон, построил с внешним CRT (/MD), которого видимо нет на твоей машине.
Перестроил с ключом /MT, т.е. статически влинковал CRT.
Этим файлом (из архива) надо заменить одноименный:
[color=red]последнюю версию можно взять здесь: [attach]1593[/attach][/color]
18 countries:
BioUnit - 1.828
PitxBull - 2.296
36 countries:
BioUnit - 81.859
PitxBull - 94.828
---
Скриншот среды: http://img64.imageshack.us/my.php?image=envnu8.jpg
VC++ 2005
Компилятор:
/O2 /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_VC80_UPGRADE=0x0710" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
Линкер:
/OUT:"D:\Projects\EuroDiffusion\BioUnit\Release\EuroDiffusion.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release\EuroDiffusion.exe.intermediate.manifest" /DEBUG /PDB:"d:\Projects\EuroDiffusion\BioUnit\Release\EuroDiffusion.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
P.S. Это для исправленной сборки (CRT линкуется статически): /MD заменено на /MT
моя прога выполняется быстрее и точка. га га га
Первая машина:
BioUnit - 2.813
PitxBull - 3
36 countries:
BioUnit - 132.875
PitxBull - 116.421
Press any key to continue . . .
Вторая:
BioUnit - 2.859
PitxBull - 3
36 countries:
BioUnit - 163.781
PitxBull - 116.406
Press any key to continue . . .
Третья (опа!):
BioUnit - 3.078
PitxBull - 3
36 countries:
BioUnit - 145.671
PitxBull - 205.656
Press any key to continue . . .
Все тесты, проводились с отключенной мышью, скрин-сервером, касперским, аськой и т.д.
Первые два результат похожи по разнице времени на результы kosfiz. Третий удивил. Повторил:
BioUnit - 2.796
PitxBull - 3
36 countries:
BioUnit - 143.765
PitxBull - 117.796
Press any key to continue . . .
Ага.
ИМХО Выводы.
Поражает стабильность числа 3 у PitxBull для 18 countries, у "плавание" результат у BioUnit для 36.
С этого ракурса кажется, что реализация PitxBull более стабильна к текущему состоянию системы, а BioUnit более зависим от количества свободной памяти, запущенных процессов и т.п.
!Но. У нас в конторе, в это воскресенье, =) PitxBull явно выигрывает на бОльших масивах входных данных.
Такая разница в полученных результатах у участников тестирования ("независимых орбитрах", как звучит,а!) говрит имхо о специфичной работе реализаций на разных машинах. Смысл такого тестирования?
Характеристики машин. Вообщем-то да, схожая kosfiz. Машины закупались в одно время и имеют одинаковые харатеристики, ну кроме размеров винтов (на третьей он больше), что собственно почти не влияет на производительность.
Celeron 1,7, 512 Мб, BD7II Motherborad.
18 countries:
BioUnit - 1.359
PitxBull - 1.468
36 countries:
BioUnit - 54.828
PitxBull - 63.187
Напиши аппаратные характеристики компов
BioUnit - 1.375
PitxBull - 1.468
36 countries:
BioUnit - 50.734
PitxBull - 61.875
ОС: WinXP SP2
CPU: PIV 1.6 GHz
RAM: 256 MB
Результаты
18 countries:
BioUnit - 2.984
PitxBull - 3.062
36 countries:
BioUnit - 114.062
PitxBull - 117.296
моя прога выполняется быстрее и точка. га га га
green !
моё сообщение в личке . :)
18 countries:
BioUnit - 2.875
PitxBull - 3.062
36 countries:
BioUnit - 120.312
PitxBull - 117.375
P.S.: Действительно, неплохо быть знать какие исходники использовались.
...
Поражает стабильность числа 3 у PitxBull для 18 countries, у "плавание" результат у BioUnit для 36.
С этого ракурса кажется, что реализация PitxBull более стабильна к текущему состоянию системы, а BioUnit более зависим от количества свободной памяти, запущенных процессов и т.п.
...
Стало любопытно, провел еще серию тестов (на первом предложенном варианте).
Запустил создание образа в неро, аську, диспечер задач, ворд, билдер, нод32 на глубокое сканирование. Результаты.
BioUnit - 1.594
PitxBull - 1.765
36 countries:
BioUnit - 70
PitxBull - 74.75
18 countries:
BioUnit - 1.688
PitxBull - 1.656
36 countries:
BioUnit - 69.453
PitxBull - 75.312
18 countries:
BioUnit - 1.671
PitxBull - 1.734
36 countries:
BioUnit - 70.656
PitxBull - 76.344
Естествено, в прощессе тестов происходило переключение по окнам, и пр.
Следующий тест был проведен после того, как ноут был переведен в режим Ouiet Office - мой включается как правило в данный режим при отсутствии внешнего питания (нагрузка осталась та же):
BioUnit - 3.578
PitxBull - 3.671
36 countries:
BioUnit - 154.375
PitxBull - 168.374
Затем был включен режим презентации - т.е. производительность минимальная - набор приложений тот же + дополнительно набирается это сообщение
BioUnit - 3.656
PitxBull - 3.765
36 countries:
BioUnit - 168.328
PitxBull - 171.984
Хм. Запустил на ноуте SAMSUNG X20 - Pentium M 1,73 GHz, 512 Mb
Результат (использовалась вторая сборка - со статически прилинкованной библиотекой):
BioUnit - 1.578
PitxBull - 1.671
36 countries:
BioUnit - 66.296
PitxBull - 78.531
Чегото закономерность конечно видна - но как раз таки обратная.