Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Оптимизация на низком уровне


Автор: Stern87 18.6.2009, 04:21
Загорелся переводом проектов с Delphi (работаю в Delphi 7) на С++ (работаю в С++ Builder 6).
И к своему удивлению обнаружил, что алгоритмы выполняются в среднем на 20% медленее, чем на Delphi.
На Delphi использую доп. библиотеки такие как FastMM4, FastMove, FastCode. Это библиотеки, которые заменяют часть стандартных функций на их оптимизированные asm-аналоги. Без них, безусловно, Delphi будет далеко позади от С++.

Но интересует, есть ли соответствующие или похожие библиотеки для проектов на С++.
И, если можно, приведите дополнительные рекомендации по тонкой оптимизации кода С.

Огромное спасибо.

Автор: mrbrooks 18.6.2009, 08:09
Цитата(Stern87 @  18.6.2009,  04:21 Найти цитируемый пост)
Но интересует, есть ли соответствующие или похожие библиотеки для проектов на С++.

А что конкретно эти дельфяцкие библы делают? 


Цитата(Stern87 @  18.6.2009,  04:21 Найти цитируемый пост)
И, если можно, приведите дополнительные рекомендации по тонкой оптимизации кода С.

О какой оптимизации идет речь? Все что нужно оптимизирует компилятор, с галочкой в настройках.

Автор: Stern87 18.6.2009, 23:27
Цитата(mrbrooks @ 18.6.2009,  07:09)
А что конкретно эти дельфяцкие библы делают?
Отвечу цитированием вступления http://www.fastcode.dk/fastcodeproject/fastcodeproject/index.htm
Цитата
The Fastcode project provides highly optimized functions for the Delphi community. Functions are faster versions of Delphi runtime library functions, VCL functions or functions meant as extensions for these. The project is running on a volunteer basis.

Functions can be written in assembler and use all the modern instruction sets, MMX, SSE, SSE2, SSE3, 3DNOW and 3DNOW+. We provide functions optimized for all modern processors and also versions that will run at all older processors. On the library page there are units available with all functions (currently more than 300) to download for free.
По сути там открыто много соревнований по совершенствованию тех или иных функций.
http://www.fastcodeproject.org/

Цитата(mrbrooks @ 18.6.2009,  07:09)
О какой оптимизации идет речь? Все что нужно оптимизирует компилятор, с галочкой в настройках.
Это да. Вот только "Speed" у меня вызывает Access Violation, а в остальном ускорения (завершения выполнения алгоритма) не наблюдается.

Автор: W4FhLF 19.6.2009, 05:00
Ты выбрал древний компилятор С++, не соответствующий стандарту, который вообще ничего оптимизировать не умеет. И чего ты ждёшь? Юзай компилятор от MS или Intel, плюс нужно учитывать специфику проекта, если у тебя там большие объёмы данных в памяти, значит оптимизировать работу с памятью, применять алгоритмы с меньшим временем работы(сортировка, поиск, перестановка), продумать возможность распараллеливания алгоритма, если программа будет использоваться на среднем декстопе, то в этом есть смысл, т.к. почти везде 2х ядерные процы. И только потом уже можно думать над оптимизацией кода как такового. 

Автор: mrbrooks 19.6.2009, 08:03
Stern87, влом по ссылкам ползти - нет что бы тут в кратце описать.  smile 
А это:
Цитата

The Fastcode project provides highly optimized functions for the Delphi community. Functions are faster versions of Delphi runtime library functions, VCL functions or functions meant as extensions for these. The project is running on a volunteer basis.

Functions can be written in assembler and use all the modern instruction sets, MMX, SSE, SSE2, SSE3, 3DNOW and 3DNOW+. We provide functions optimized for all modern processors and also versions that will run at all older processors. On the library page there are units available with all functions (currently more than 300) to download for free.

просто декларация намерений. Типа какие мы кайфовые пацаны. Ничего конкретного.

W4FhLF, вы убийца дебилдера  smile Конечно можно спорить, отсылать к С++ Builder 2009, где ситуация, мягко говоря иная по сравнению с шестой версией, но это уже скатимся к холивару. Билдер заточен для некоторых известных задач, и заточен хорошо. К сожалению - этого не понимают новички - и пишут на нем все подряд. И чОООрт знает знает как.

Автор: Alca 19.6.2009, 09:04
Цитата

Юзай компилятор от MS или Intel

Stern87, а ты сделай три проекта Delphi, С++Builder, Visual C++ с теми функциями, которые ты хочешь использовать и замерь скорость исполнения кода. Тогда все вопросы отпадут сами собой.

Автор: mrbrooks 19.6.2009, 10:08
Цитата(Alca @  19.6.2009,  09:04 Найти цитируемый пост)
Visual C++ с теми функциями, которые ты хочешь использовать 

ага. я представляю, как автор будет прикручивать к студии 
Цитата(Stern87 @  18.6.2009,  04:21 Найти цитируемый пост)
доп. библиотеки такие как FastMM4, FastMove, FastCode
 и предвкушаю результат.

Автор: Alca 19.6.2009, 10:38
Цитата

Visual C++ с теми функциями, которые ты хочешь использовать 

Я имею ввиду  CRT-шные

Добавлено через 1 минуту и 55 секунд
Цитата

Functions are faster versions of Delphi runtime library functions


Добавлено через 14 минут и 35 секунд
mrbrooks, пусть сравнит аналоги CRT-шных функуций в Delphi, С++Builder, Visual C++. 


Автор: Stern87 19.6.2009, 14:08
Ребята, спасибо за ответы.

Я вас правильно понял: для начала неплохо бы перейти от СррВ6 на СррВ2009?

Автор: mrbrooks 19.6.2009, 14:10
Цитата(Stern87 @  19.6.2009,  14:08 Найти цитируемый пост)
Я вас правильно понял: для начала неплохо бы перейти от СррВ6 на СррВ2009? 

однозначно smile 

Автор: Stern87 20.6.2009, 21:44
Был у меня под рукой CppB2007. Решил всё проверить на нём.
В итоге только сильнее разочаровался.
Вместо (к примеру) 700 секунд на выполнение затрачивается около 1100 (В настройках был "Speed", без него чуть-чуть больше) smile

Автор: W4FhLF 21.6.2009, 06:16
Есть много способов оптимизировать программу по скорости и смена компилятора с переписыванием пожалуй самый нерациональный и наименее эффективный. Поэтому, не тем путём ты пошёл. Хотя Борланд всё равно ацтой в этом плане) 

Автор: Stern87 22.6.2009, 00:33
Хорошо конечно. Но что таки тогда делать мне? Конкретно.

Автор: dumb 22.6.2009, 01:15
Цитата(Stern87 @  22.6.2009,  01:33 Найти цитируемый пост)
Но что таки тогда делать мне? Конкретно. 

для конкретного ответа не хватает конкретики в вопросе. либо показывай код, либо рассказывай подробно, что он, собственно, делает и как.

Автор: 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
Цитата(Stern87 @  18.6.2009,  02:21 Найти цитируемый пост)
Загорелся переводом проектов с Delphi (работаю в Delphi 7) на С++ (работаю в С++ Builder 6).

 smile А что эт ты так загорелся? Мотивация то какая?

Цитата(Stern87 @  19.6.2009,  12:08 Найти цитируемый пост)
Я вас правильно понял: для начала неплохо бы перейти от СррВ6 на СррВ2009?

Для начала, наверное, язык нужно изучить как следует. И тут какая-нить фраза типа, на C++ гораздо больше возможностей написать неэффективный код. По себе знаю: год прошёл, а ###код остался. =)

Цитата(Stern87 @  22.6.2009,  00:42 Найти цитируемый пост)
Скажите, раз Borland C++ херня, то на чём кодить? 
 
Слово Borland - лишнее! smile Ну, раз уж ты спросил:
  • Какой-нить Refined C++ (Java, Python, C#). По мне, C# - лучший из худших, хотя Python не видел... smile И до кучи к C# попробуй F#. Если мозг выдержит, то...
  • Ada - расхожая фраза, что "это не сложность большой помойки, а сложность часового механизма", видимо, в какой-то мере, положение дел отражает.
  • Oberon (Component Pascal) - наше всё! smile

Автор: mrbrooks 23.6.2009, 07:48
Цитата(kemiisto @  23.6.2009,  06:55 Найти цитируемый пост)
Oberon (Component Pascal) - наше всё!

ваше все.

опять доблестные дельфяцкие парни правду матку рубят. камрады у вас есть свой собственный раздел - или вам уже там тесно?   smile 

Автор: Alca 23.6.2009, 12:58
Цитата

Скажите, раз Borland C++ херня, то на чём кодить?

Под винду - MS Visual Studio (у нее компилер круче) 

Автор: Alca 25.6.2009, 10:01
http://www.agner.org/optimize/#manuals

Автор: Stern87 25.6.2009, 16:42
Alca, Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)