Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли смысл написания на С (не на С++)? нейронные сети... 
V
    Опции темы
Proger10
Дата 26.3.2009, 03:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Скажите пожалуйста, если сравнивать по работоспособности С и С++.. оправдана ли будет скорость выполнения программы против скорости её написания? smile

Использовать предполагается в нейронных сетях (это довольно сложные математические структуры, с огромным количеством вычислений). В отдельных местах я буду допускать (практически наверняка) использование ассемблеровых вставок для ускорения работы.

Там просто порой есть много тупых действий smile ну как например - перемножить массив из 100.000 чисел на какое-то одно число.. и таких большое число циклов. Т.е. они не так сложно реализуемы на асме, но выигрыш в производительности, я полагаю, будет выше временных затрат.
PM MAIL   Вверх
nerezus
Дата 26.3.2009, 03:29 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Proger10, и за счет чего же будет выигрыш в производительности при перемножении массива на число для C относительно C++?
Кто тебе это сказал?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Proger10
Дата 26.3.2009, 03:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Ну в общем-то я про это и спрашиваю, будет ли smile
Это я в качестве примера привёл возможность использования в такой ситуации асма smile

Вообще я слышал, что С работает быстрее С++. Но честно говоря, понятия не имею почему. Чем он действительно быстрее-то? На чём С выигрывает перед С++?

Это сообщение отредактировал(а) Proger10 - 26.3.2009, 03:37
PM MAIL   Вверх
jonie
Дата 26.3.2009, 08:04 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата

Вообще я слышал, что С работает быстрее С++.
как может работать один язык быстрее другого?

если, конечно, подумать, то да, C++ использует всякие новомодные штуки вроде виртуальных функций (если, конечно, они у вас будут). Но проигрыш на современных процессорах может быть очеь и очень незначительным...

Скорость падает не от компилированного кода, а от кривых алгоритмов и их кривой реализации... так что не заморачивайтесь - пишите на чем угодно.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
GoldFinch
Дата 26.3.2009, 09:27 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



jonie, скорость падает еще и от кривого компилятора
так что с точки зрения быстродействия писать нада не на каком-то языке, а под конкретный компилятор 
PM MAIL ICQ   Вверх
Lazin
Дата 26.3.2009, 10:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата

Есть ли смысл написания на С (не на С++)?
нету

Добавлено через 40 секунд
есть смысл написать это на haskell =)
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 26.3.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Lazin, у haskell'а быстродействие больше чем у С\С++ ? ниверю
PM MAIL ICQ   Вверх
mes
Дата 26.3.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  26.3.2009,  09:15 Найти цитируемый пост)
Lazin, у haskell'а быстродействие больше чем у С\С++ ? ниверю 

я думаю предложение Haskella было не из за преимуществ в скорости (но думаю что он не сильно отстает от Си/Cpp), 
а как более удобный для решения такого ряда задач (н.с.) , так как он  функциональный.

Это сообщение отредактировал(а) mes - 26.3.2009, 10:40


--------------------
PM MAIL WWW   Вверх
Lazin
Дата 26.3.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



зависит от реализации, у GHC быстродействие ниже чем у большинства компиляторов с++, у JHC в среднем не меньше, но он еще сырой
чисто теоретически, производительность кода написанного на haskell, может быть даже выше, чем у с++ кода из-за частичного применения ф-й, например, пишешь ты ф-ю на с++
Код

int SomeCalculation(int x, int y);

при вызове этой ф-ии, всегда будут передаваться параметры в стек, всегда будет происходить полное вычисление ф-ии(если она не подставляемая)... в хаскеле все может быть иначе
Код

SomeCalculation :: Int -> Int -> Int
SomeCalculation x y = ....

что можно представить как 
Код

SomeCalculation :: Int -> (Int -> Int)

ф-ю принимающую один аргумент и возвращающую ф-ю принимающую один аргумент и возвращающую Int
чисто теоритичесски, компилятор, или даже рантайм, может генерировать такие частично примененные ф-ии, вместо одной общей реализации, что может привести к увеличению производительности
PM MAIL Skype GTalk   Вверх
xvr
Дата 26.3.2009, 10:57 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Proger10 @ 26.3.2009,  03:18)
Там просто порой есть много тупых действий smile ну как например - перемножить массив из 100.000 чисел на какое-то одно число.. и таких большое число циклов. Т.е. они не так сложно реализуемы на асме, но выигрыш в производительности, я полагаю, будет выше временных затрат.

Будет проигрыш в производительности  smile Хороший оптимизирующий компилятор сможет сделать такой цикл более производительным, чем тупо написанный на асм. На асм можно написать цикл более производительно, чем сможет сделать компилятор, но для этого надо быть экспертом по performance analysis, а таких считанные единицы. Кроме того, компилятор даже может этот цикл распараллелить (если он умеет), что даст привар на всяких Core Duo и пр.
А С/С++ дадут одинаковую производительность, если не использовать С++ run-time конструкции в узких местах.

PM MAIL   Вверх
kamre
Дата 26.3.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.3.2006

Репутация: 2
Всего: 13



Цитата(Lazin @ 26.3.2009,  10:37)
чисто теоритичесски, компилятор, или даже рантайм, может генерировать такие частично примененные ф-ии, вместо одной общей реализации, что может привести к увеличению производительности

Ну в C++ компилятор также может заинлайнить все вызовы, как, например, при сортировке через std::sort. А в runtime, конечно, уже никак. 

Чтобы в runtime инлайнить функции нужен уже какой-то JIT компилятор. Вот он может, чисто теоретически, проанализировать весь загруженный на тот момент код и заинлайнить вызов виртуальной функции. 

Да и в number crunching вроде не принято пользоваться JIT компиляторами, там в основном Fortran/C/C++.
PM MAIL   Вверх
GoldFinch
Дата 26.3.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



вроде бы это не та задача, где надо оптимизировать в run-time
да и передачи параметров через стек можно избежать, если юзать __fastcall
а на асме можно например оптимизировать то что не оптимизировал компилятор, может распараллеливает он хорошо, зато в других местах генерит очень неоптимальный код, кроме того компиляторы С++ не поддерживают достаточно большое количество полезных инструкций х86

PM MAIL ICQ   Вверх
Lazin
Дата 26.3.2009, 12:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(GoldFinch @  26.3.2009,  12:11 Найти цитируемый пост)
кроме того компиляторы С++ не поддерживают достаточно большое количество полезных инструкций х86

OMFG!!1 ну надо-же, это каких интересно?

Цитата(GoldFinch @  26.3.2009,  12:11 Найти цитируемый пост)
вроде бы это не та задача, где надо оптимизировать в run-time
да и передачи параметров через стек можно избежать, если юзать __fastcall
it depends... во первых, любая задача может выиграть от оптимизации в рантайме, во вторых, помимо оптимизации в рантайме(которую пока еще никто не делает), у компилятора haskell предостаточно средств для оптимизации, так-как переменных нет, mutable state - отсутствует, по типу(!) функции можно определить будет ли эта ф-я изменять состояние чего-либо или нет и так далее...
это просто другой подход к решению проблемы, программируя на с++(си, паскале) ты не столько работаешь над алгоритмом, сколько над его реализацией(в этой переменной у нас будте одно значение, в той - другое, потом мы делаем с ними следующее ... и вон в той переменной оказывается результат); программируя на функциональных языках(а особенно на haskell) используют совершенно другой подход, обычно ФП программа это императивная программа наоборот, мы не определяем как будет вычисляться результат конкретно, вместо этого мы вводим набор правил для получения результата, как конкретно и в какой последовательности это будет реализовано уже не важно smile 
ну и определять вручную как вызывать ту или иную ф-ию, передавать параметры через стэк или регистры, это прошлый век, даже для с++ smile 
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 26.3.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Lazin, это обсуждалось уже много раз, покажи С++ код без асм вставок, который приведет к генерации bswap, fldpi/fldlg2/fld*, и много чего еще
в msvc есть intrinsic'и но далеко не для всех инструкций

Добавлено через 4 минуты
Цитата(Lazin @  26.3.2009,  12:33 Найти цитируемый пост)
так-как переменных нет

на уровне инструкций процессора тоже нет переменных, и практика показывает, что нет способа быстрее способа сложить два произвольных числа чем add reg,reg

PM MAIL ICQ   Вверх
mes
Дата 26.3.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  26.3.2009,  12:28 Найти цитируемый пост)
на уровне инструкций процессора тоже нет переменных, и практика показывает, что нет способа быстрее способа сложить два произвольных числа чем add reg,reg

речь идет о  разнице между (рантайм) константами и переменными в сложных выражениях. Первое легко подается оптимизации.  



--------------------
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.