Скорость работы программ
От: Niovol  
Дата: 31.10.07 09:43
Оценка:
Меня в последнее время мало устраивает С++
Почитал про немерле, возможно, это один из вариантов.
Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ. В частности
1. Нейронные сети. Тут, разумеется, от скорости выполнения много зависит. Если отличие от программы на С++ порядка нескольких процентов, то это не страшно. А вот если в 2 раза дольше — это уже плохо.
2. Трехмерные игры. Тут уже интуитивно чувствую, что игра на немерле будет требовать значительно больших ресурсов компьютера, а это всегда критично.
Прошу знающих людей подсказать, как будет влиять переход с с++ на немерле на производительность.
Re: Скорость работы программ
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 01.11.07 06:48
Оценка:
Чего-то все затаились.
Думаю, скорость Nemerle аналогична C#. А разница между С++ и C# на моих тестах варьировалась от 5% до 100% (т.е. в 2 раза). Учитывая известные сравнения в инете, можно считать, что в среднем разница 30-50%. Все зависит от задачи, поэтому попробуйте просто реализовать кусок, который будет чаще всего исполняться (логику одного нейрона, например) и провести замеры.
Re: Скорость работы программ
От: hi_octane Беларусь  
Дата: 01.11.07 08:32
Оценка:
N>Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ. В частности
N>1. Нейронные сети. Тут, разумеется, от скорости выполнения много зависит. Если отличие от программы на С++ порядка нескольких процентов, то это не страшно. А вот если в 2 раза дольше — это уже плохо.

Я писал когда-то и нейросети и метод конечных элементов на C#. Если аккуратно подходить к операциям которые в циклах гоняются, и стараться в таких местах использовать ref/out параметры, вместо передачи double по значению -- вполне нормальная скорость. Может напрячь отсутствие long double (правда большинство всё равно не в курсе что long double и в обычном MS C++ сходу не заиспользуешь, подставит втихую обычный double и всё). Вообще возьми профайлер, найди самый узкий участок в существующей реализации, и попытайся воспроизвести его на C# -- всё лучше чем начитаться кучи советов на форуме.

N>2. Трехмерные игры. Тут уже интуитивно чувствую, что игра на немерле будет требовать значительно больших ресурсов компьютера, а это всегда критично.

N>Прошу знающих людей подсказать, как будет влиять переход с с++ на немерле на производительность.

Если пишешь новейший хардкорный мегашутер, или собираешься, в перспективе, портировать всё на PS3, то лучше пиши на С++. А для десктопа и Xbox 360 вполне можно писать на .NET (неважно C# или Nemerle). Есть и достаточно большое число существующих движков написанных, как правило, на C#: http://www.thezbuffer.com/categories/engines.aspx -- посмотри на производительность и фичастость, думаю устроит (часто движки доступны в сорцах). Да, многие движки, писанные под Managed DirectX (MDX) формально получаются устаревшими. На сегодня в мире .NET game programming рулит уже XNA. Производительность, правда, от этого осталась, имхо, прежней.
Re[2]: Скорость работы программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.07 12:23
Оценка: :)
Здравствуйте, D. Mon, Вы писали:

DM>Чего-то все затаились.


Просто эта тема уже изжевана вдоль и поперек. Достала она.

DM>Думаю, скорость Nemerle аналогична C#. А разница между С++ и C# на моих тестах варьировалась от 5% до 100% (т.е. в 2 раза). Учитывая известные сравнения в инете, можно считать, что в среднем разница 30-50%. Все зависит от задачи, поэтому попробуйте просто реализовать кусок, который будет чаще всего исполняться (логику одного нейрона, например) и провести замеры.


Ответ тут прост. На дотнете можно писать приложения ничем не уступающие по производительности тем что написаны на С++ и скомпилированы скажем MS VC++. Только нужно думать о производительнольности, понимать что делаешь, и уметь пользоваться профайлером. Сравнивать же конерктеный рантайм (.NET CLR) и язык программирования вообще нельзя, это все равно что сравнивать теплое с мягким. Скажем Борлондовские компиляторы сливают дотнету по черному.

В прочем, как и в С++, так и в дотнете в целом, и в Nemerle (как и в C#) в частности есть подводные камни способные снизить производительность. Их нужно знать и нужно уметь их обходить (использовать более эффективные решения).

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

ЗЫ

В общем, скорость дотнета (а скорость Немерле в основном определяется именно ею) — это вопрос веры. Кто-то делает на нем высокопроизводительный софт, а кто-то верит, что это невозможно в принципе.

В конце концов, требующие "битовыжимания" или работы на уровне ассемблера конкретного процессора подзадач обычно очень мало и их легко можно вынести в библиотеку.

Вот где дотнет действительно проигрывает — это в объеме требуемой памяти. Дотнетному приложению требуется от 1.3 до двух раз больше памяти, так как он основан на GC, а GC работает быстро только при наличии "запаса" по памяти.

ЗЗЫ

Сразу хочу предупредить... Перейти на Немреле с С++ просто так не удастся. Это будет соправождаться измененеием сознания, и если такой переход пройдет на 100%, то с вероятностью 99% могу гарантировать, что многое, что вас волновало когда вы программировани на С++ вас уже волновать небудет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Скорость работы программ
От: nikov США http://www.linkedin.com/in/nikov
Дата: 01.11.07 13:25
Оценка:
Здравствуйте, Niovol, Вы писали:

N>Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ.


На некоторых видах задач .NBT будет побыстрее приложение на С++ с самописным управлением памятью (на форуме .NET несколько раз пробегали бенчмарки). В сложных системах, написанных на неуправляемом коде во избежание ошибок управления памятью приходится вставлять дополнительные механизмы и прослойки (например, dog tag-и), увеличивающие нагрузку на память и процессор. С другой стороны, GC (и всякие сопутствующие техники, вроде escape analysis) постоянно совершенствуются.
Надо сказать, что текущая версия компилятора Nemerle местами выдает неоптимизированный код. Но исходники компилятора открыты и всегда под рукой, и если Вы обнаружите узкое место, всегда можно будет заняться оптимизацией.
Re: Скорость работы программ
От: blumenkraft  
Дата: 06.11.07 10:36
Оценка:
Здравствуйте, Niovol, Вы писали:

N>Меня в последнее время мало устраивает С++

N>Почитал про немерле, возможно, это один из вариантов.
N>Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ. В частности
N>1. Нейронные сети. Тут, разумеется, от скорости выполнения много зависит. Если отличие от программы на С++ порядка нескольких процентов, то это не страшно. А вот если в 2 раза дольше — это уже плохо.
N>2. Трехмерные игры. Тут уже интуитивно чувствую, что игра на немерле будет требовать значительно больших ресурсов компьютера, а это всегда критично.
N>Прошу знающих людей подсказать, как будет влиять переход с с++ на немерле на производительность.

Я сам писал нейронные сети на с#. В мой практике, их очень легко "зарубить" если начать писать их с помощью объектной модели (классы, интерфейсы, и т.д.), но намного проще, если представить что вычисление нейронной сети — это всего лишь операция умножения двух матриц, которая может быть взята их хорошей, оптимизированной библиотеки (к пр. Atlas BLAS) или же подсчитана на GPU (см. http://www.shaderx2.com/shaderx.PDF).

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.