![]() |
|
Модераторы: bsa |
![]()
|
|
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Скажите пожалуйста, если сравнивать по работоспособности С и С++.. оправдана ли будет скорость выполнения программы против скорости её написания?
Использовать предполагается в нейронных сетях (это довольно сложные математические структуры, с огромным количеством вычислений). В отдельных местах я буду допускать (практически наверняка) использование ассемблеровых вставок для ускорения работы. Там просто порой есть много тупых действий |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Proger10, и за счет чего же будет выигрыш в производительности при перемножении массива на число для C относительно C++?
Кто тебе это сказал? |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Ну в общем-то я про это и спрашиваю, будет ли
Это я в качестве примера привёл возможность использования в такой ситуации асма Вообще я слышал, что С работает быстрее С++. Но честно говоря, понятия не имею почему. Чем он действительно быстрее-то? На чём С выигрывает перед С++? Это сообщение отредактировал(а) Proger10 - 26.3.2009, 03:37 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
если, конечно, подумать, то да, C++ использует всякие новомодные штуки вроде виртуальных функций (если, конечно, они у вас будут). Но проигрыш на современных процессорах может быть очеь и очень незначительным... Скорость падает не от компилированного кода, а от кривых алгоритмов и их кривой реализации... так что не заморачивайтесь - пишите на чем угодно. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
jonie, скорость падает еще и от кривого компилятора
так что с точки зрения быстродействия писать нада не на каком-то языке, а под конкретный компилятор |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
Добавлено через 40 секунд есть смысл написать это на haskell =) |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Lazin, у haskell'а быстродействие больше чем у С\С++ ? ниверю
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
я думаю предложение Haskella было не из за преимуществ в скорости (но думаю что он не сильно отстает от Си/Cpp), а как более удобный для решения такого ряда задач (н.с.) , так как он функциональный. Это сообщение отредактировал(а) mes - 26.3.2009, 10:40 |
|||
|
||||
| Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
зависит от реализации, у GHC быстродействие ниже чем у большинства компиляторов с++, у JHC в среднем не меньше, но он еще сырой
чисто теоретически, производительность кода написанного на haskell, может быть даже выше, чем у с++ кода из-за частичного применения ф-й, например, пишешь ты ф-ю на с++
при вызове этой ф-ии, всегда будут передаваться параметры в стек, всегда будет происходить полное вычисление ф-ии(если она не подставляемая)... в хаскеле все может быть иначе
что можно представить как
ф-ю принимающую один аргумент и возвращающую ф-ю принимающую один аргумент и возвращающую Int чисто теоритичесски, компилятор, или даже рантайм, может генерировать такие частично примененные ф-ии, вместо одной общей реализации, что может привести к увеличению производительности |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Будет проигрыш в производительности А С/С++ дадут одинаковую производительность, если не использовать С++ run-time конструкции в узких местах. |
|||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Ну в C++ компилятор также может заинлайнить все вызовы, как, например, при сортировке через std::sort. А в runtime, конечно, уже никак. Чтобы в runtime инлайнить функции нужен уже какой-то JIT компилятор. Вот он может, чисто теоретически, проанализировать весь загруженный на тот момент код и заинлайнить вызов виртуальной функции. Да и в number crunching вроде не принято пользоваться JIT компиляторами, там в основном Fortran/C/C++. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
вроде бы это не та задача, где надо оптимизировать в run-time
да и передачи параметров через стек можно избежать, если юзать __fastcall а на асме можно например оптимизировать то что не оптимизировал компилятор, может распараллеливает он хорошо, зато в других местах генерит очень неоптимальный код, кроме того компиляторы С++ не поддерживают достаточно большое количество полезных инструкций х86 |
|||
|
||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
OMFG!!1 ну надо-же, это каких интересно?
это просто другой подход к решению проблемы, программируя на с++(си, паскале) ты не столько работаешь над алгоритмом, сколько над его реализацией(в этой переменной у нас будте одно значение, в той - другое, потом мы делаем с ними следующее ... и вон в той переменной оказывается результат); программируя на функциональных языках(а особенно на haskell) используют совершенно другой подход, обычно ФП программа это императивная программа наоборот, мы не определяем как будет вычисляться результат конкретно, вместо этого мы вводим набор правил для получения результата, как конкретно и в какой последовательности это будет реализовано уже не важно ну и определять вручную как вызывать ту или иную ф-ию, передавать параметры через стэк или регистры, это прошлый век, даже для с++ |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Lazin, это обсуждалось уже много раз, покажи С++ код без асм вставок, который приведет к генерации bswap, fldpi/fldlg2/fld*, и много чего еще
в msvc есть intrinsic'и но далеко не для всех инструкций Добавлено через 4 минуты на уровне инструкций процессора тоже нет переменных, и практика показывает, что нет способа быстрее способа сложить два произвольных числа чем add reg,reg |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
речь идет о разнице между (рантайм) константами и переменными в сложных выражениях. Первое легко подается оптимизации. |
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
А какой это - кривой? |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Писать я кстати буду под компайлер GNU GCC. (линуксовый)
Понятно. Значит действительно нужно не заморачиваться, а писать на С++. Это и чуток проще заодно |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
GoldFinch, а G++ кривой?
Какой, по-вашему, прямой? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
По версии GoldFinch - все кривые, он сам как компилятор, пишет все на ассемблере, и знает какой код процессор будет быстрее выполнять, performance guru одним словом
Добавлено через 1 минуту и 31 секунду любой современный, более или менее распространенный с++ компилятор, другого все-равно не дано |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Ну G++ (gcc) относится к хорошим компайлерам или не очень? Зато свободный.. а то компилятор от visual studio денег стоит, а компилить на нелицухе как-то не модно
|
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Proger10, кто тебе сказал, что он денег стоит?
|
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Не уж-то майкрософтовский и бесплатный? Эти понятия разве совместимы?
|
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Proger10, у MS КУЧА бесплатных продуктов.
Например Visual Studio Express(основное отличие - возможность ставить сторонние плагины. Остальные отличия ты не заметишь) |
|||
|
||||
| jonie |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||||||
|
|||||||||||
| GoldFinch |
|
||||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
jonie, примеры кривости кодогенератора msvc уже приводились, например кривая передача значений вещественных переменных в функции
то что конмпелировалось
а должно было бы скомпилироваться так
еще у msvc багнутый встроенный ассемблер %) |
||||||
|
|||||||
| xvr |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ох уж эти сказочники
Результат
cl:
Алгоритм измерения кривизны рук знаешь? |
||||||||||||||
|
|||||||||||||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
xvr, а у меня
из 2008 студии, удали свое старье и поставь новую версию) листенг:
Это сообщение отредактировал(а) GoldFinch - 27.3.2009, 12:51 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Нет уж увольте - ищите, чему у нее теперь соотвествует /G6 и как теперь выглядит /Ox (у меня это /Ogityb1 /Gs, в 2008 - /Ogtpy судя по листингу)
|
|||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
С практической стороны возможно будет быстрее, безглючнее и дешевле написать на плюсах без всяких асмовых вставок.
Скорость догонять железом ( в тяжелых случаях построить распределённую систему аля Folder@Home Прошу не считать пост холиваром |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Считаю, что оптимальнее всего написать на С++, затем, если скорость не устроит, прогнать через профайлер (только нужно прогонять прогу скомпилированную с опциями (для gcc): -O3 -g -pg - максимальная оптимизация, отладочная информация, информация для профилирования), а затем оптимизировать узкие места всеми доступными способами.
|
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
GoldFinch а у меня вот так скомпилолось (vc9):
мне застрелиться? (оптимизация SSE2) можно и так получить:
опция /fp:strict так где лоханулся компилятор-то? -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
bsa, вроде бы тема себя уже исчерпала к середине 1й страницы
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
GoldFinch скмпилируй да посмотри
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
jonie, чего посмотри? ты там не всю функцию привел %)
сам посмотри ^^ Это сообщение отредактировал(а) GoldFinch - 2.4.2009, 19:21 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |