| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Оптимизация на низком уровне |
| Автор: Stern87 18.6.2009, 04:21 |
| Загорелся переводом проектов с Delphi (работаю в Delphi 7) на С++ (работаю в С++ Builder 6). И к своему удивлению обнаружил, что алгоритмы выполняются в среднем на 20% медленее, чем на Delphi. На Delphi использую доп. библиотеки такие как FastMM4, FastMove, FastCode. Это библиотеки, которые заменяют часть стандартных функций на их оптимизированные asm-аналоги. Без них, безусловно, Delphi будет далеко позади от С++. Но интересует, есть ли соответствующие или похожие библиотеки для проектов на С++. И, если можно, приведите дополнительные рекомендации по тонкой оптимизации кода С. Огромное спасибо. |
| Автор: Stern87 18.6.2009, 23:27 | ||||||
http://www.fastcodeproject.org/
|
| Автор: W4FhLF 19.6.2009, 05:00 |
| Ты выбрал древний компилятор С++, не соответствующий стандарту, который вообще ничего оптимизировать не умеет. И чего ты ждёшь? Юзай компилятор от MS или Intel, плюс нужно учитывать специфику проекта, если у тебя там большие объёмы данных в памяти, значит оптимизировать работу с памятью, применять алгоритмы с меньшим временем работы(сортировка, поиск, перестановка), продумать возможность распараллеливания алгоритма, если программа будет использоваться на среднем декстопе, то в этом есть смысл, т.к. почти везде 2х ядерные процы. И только потом уже можно думать над оптимизацией кода как такового. |
| Автор: mrbrooks 19.6.2009, 08:03 | ||
| Stern87, влом по ссылкам ползти - нет что бы тут в кратце описать. А это:
просто декларация намерений. Типа какие мы кайфовые пацаны. Ничего конкретного. W4FhLF, вы убийца дебилдера |
| Автор: Alca 19.6.2009, 09:04 | ||
Stern87, а ты сделай три проекта Delphi, С++Builder, Visual C++ с теми функциями, которые ты хочешь использовать и замерь скорость исполнения кода. Тогда все вопросы отпадут сами собой. |
| Автор: mrbrooks 19.6.2009, 10:08 |
ага. я представляю, как автор будет прикручивать к студии и предвкушаю результат. |
| Автор: Alca 19.6.2009, 10:38 | ||||
Я имею ввиду CRT-шные Добавлено через 1 минуту и 55 секунд
Добавлено через 14 минут и 35 секунд mrbrooks, пусть сравнит аналоги CRT-шных функуций в Delphi, С++Builder, Visual C++. |
| Автор: Stern87 19.6.2009, 14:08 |
| Ребята, спасибо за ответы. Я вас правильно понял: для начала неплохо бы перейти от СррВ6 на СррВ2009? |
| Автор: mrbrooks 19.6.2009, 14:10 | ||
однозначно |
| Автор: Stern87 20.6.2009, 21:44 |
| Был у меня под рукой CppB2007. Решил всё проверить на нём. В итоге только сильнее разочаровался. Вместо (к примеру) 700 секунд на выполнение затрачивается около 1100 (В настройках был "Speed", без него чуть-чуть больше) |
| Автор: W4FhLF 21.6.2009, 06:16 |
| Есть много способов оптимизировать программу по скорости и смена компилятора с переписыванием пожалуй самый нерациональный и наименее эффективный. Поэтому, не тем путём ты пошёл. Хотя Борланд всё равно ацтой в этом плане) |
| Автор: Stern87 22.6.2009, 00:33 |
| Хорошо конечно. Но что таки тогда делать мне? Конкретно. |
| Автор: dumb 22.6.2009, 01:15 |
для конкретного ответа не хватает конкретики в вопросе. либо показывай код, либо рассказывай подробно, что он, собственно, делает и как. |
| Автор: Stern87 22.6.2009, 02:42 |
| Ух. Ну как мне привести код всех своих проектов?? Скажите, раз Borland C++ херня, то на чём кодить? |
| Автор: W4FhLF 22.6.2009, 07:15 |
| Stern87, существуют такие программы, называются профайлеры. Начни с них. Грубо говоря, они позволяют понять из-за чего твоя программа работает медленно. Согласно правилу Парето, 80% времени занимают 20% кода, а чаще это соотношение ещё более контрастно. Т.е. зачем тебе оптимизировать всю программу, если 95% времени тратится на какой-нибудь один алгоритм или цикл или на запись/чтение HDD(в этом случае вообще никакие переписывания и компиляторы помочь не могут)? Вот эту часть и нужно оптимизировать(это называется bottleneck). И чтобы понять где bottleneck твоей программы расположен, тебе нужен профайлер, ибо опыта маловато судя по всему. |
| Автор: mrbrooks 22.6.2009, 08:00 |
| ИМХО автор страдает излишним максимализмом к своему программному обеспечению. Как я понимаю его категорически не устраивает код который генерит сам Билдер - дык пусть пишет на WinAPI и затем оценит отношение затраченное время/скорость работы не включая свой собственный плод бессонных ночей. Т.к. непонятно, что делает автор в итоге,рекомендовать что либо смысла не вижу. |
| Автор: Stern87 23.6.2009, 03:25 |
| W4FhLF, а какие профайлеры можно использовать? Я в среде С++ действительно новенький. Но хочу его изучить достаточно глубоко. Основы изучил и перевёл первый проект с Delphi на С++, а он оказался медленее работать стал... Какие посоветуете профайлеры использовать с CppB2007? |
| Автор: ksili 23.6.2009, 06:02 |
| Stern87, с профайлерами не всё так просто. Корректность их работы может зависеть от используемого процессора. 1) Исторически пожалуй, два самых основных профайлера для винды - AMD Code Analyst и Intel VTune. Изначально они работали только с "родными" процесорами. Сейчас вроде они работают на всех процах x86, но честно предупреждают - на не родном камне могу и гнать. Кроме того VTune нехило стОит. 2) Есть профайлер, встроенный в студию, но я что-то не смог его использовать, он мне написал, что к меня в проекте нет управляемого кода. Наверно ему надо, чтобы всё было в классах. В общем про него много сказать не могу. 3) Недавно появился такой продукт как Intel Parallel Studio, встраивающийся в MS VS и содержащий кроме прочих вкусностей ещё и профайлер. Продукт тоже платный, но можешь скачать месячный Evaluation. 4) Кроме того на сайте Intel можешь поискать и найти ещё и бесплатные утилиты, тоже связанные с замерами производительности. Например, IPTU - Intel® Performance Tuning Utility. К сожалению, профайлеров, встраивающихся в Билдер какой-либо версии, я не знаю. Если кто-то может ещё указать профайлеры, пишите - буду рад почитать. |
| Автор: kemiisto 23.6.2009, 06:55 | ||||
Для начала, наверное, язык нужно изучить как следует. И тут какая-нить фраза типа, на C++ гораздо больше возможностей написать неэффективный код. По себе знаю: год прошёл, а ###код остался. =) Слово Borland - лишнее!
|
| Автор: mrbrooks 23.6.2009, 07:48 |
ваше все. опять доблестные дельфяцкие парни правду матку рубят. камрады у вас есть свой собственный раздел - или вам уже там тесно? |
| Автор: Alca 23.6.2009, 12:58 | ||
Под винду - MS Visual Studio (у нее компилер круче) |
| Автор: Alca 25.6.2009, 10:01 |
| http://www.agner.org/optimize/#manuals |
| Автор: Stern87 25.6.2009, 16:42 |
| Alca, Спасибо! |