Меня в последнее время мало устраивает С++
Почитал про немерле, возможно, это один из вариантов.
Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ. В частности
1. Нейронные сети. Тут, разумеется, от скорости выполнения много зависит. Если отличие от программы на С++ порядка нескольких процентов, то это не страшно. А вот если в 2 раза дольше — это уже плохо.
2. Трехмерные игры. Тут уже интуитивно чувствую, что игра на немерле будет требовать значительно больших ресурсов компьютера, а это всегда критично.
Прошу знающих людей подсказать, как будет влиять переход с с++ на немерле на производительность.
Чего-то все затаились.
Думаю, скорость Nemerle аналогична C#. А разница между С++ и C# на моих тестах варьировалась от 5% до 100% (т.е. в 2 раза). Учитывая известные сравнения в инете, можно считать, что в среднем разница 30-50%. Все зависит от задачи, поэтому попробуйте просто реализовать кусок, который будет чаще всего исполняться (логику одного нейрона, например) и провести замеры.
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. Производительность, правда, от этого осталась, имхо, прежней.
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Niovol, Вы писали:
N>Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ.
На некоторых видах задач .NBT будет побыстрее приложение на С++ с самописным управлением памятью (на форуме .NET несколько раз пробегали бенчмарки). В сложных системах, написанных на неуправляемом коде во избежание ошибок управления памятью приходится вставлять дополнительные механизмы и прослойки (например, dog tag-и), увеличивающие нагрузку на память и процессор. С другой стороны, GC (и всякие сопутствующие техники, вроде escape analysis) постоянно совершенствуются.
Надо сказать, что текущая версия компилятора Nemerle местами выдает неоптимизированный код. Но исходники компилятора открыты и всегда под рукой, и если Вы обнаружите узкое место, всегда можно будет заняться оптимизацией.
Здравствуйте, Niovol, Вы писали:
N>Меня в последнее время мало устраивает С++ N>Почитал про немерле, возможно, это один из вариантов. N>Меня волнует то, что он на базе .NET, не знаю, насколько это хорошо или плохо. Меня интересует скорость выполнения программ. В частности N>1. Нейронные сети. Тут, разумеется, от скорости выполнения много зависит. Если отличие от программы на С++ порядка нескольких процентов, то это не страшно. А вот если в 2 раза дольше — это уже плохо. N>2. Трехмерные игры. Тут уже интуитивно чувствую, что игра на немерле будет требовать значительно больших ресурсов компьютера, а это всегда критично. N>Прошу знающих людей подсказать, как будет влиять переход с с++ на немерле на производительность.
Я сам писал нейронные сети на с#. В мой практике, их очень легко "зарубить" если начать писать их с помощью объектной модели (классы, интерфейсы, и т.д.), но намного проще, если представить что вычисление нейронной сети — это всего лишь операция умножения двух матриц, которая может быть взята их хорошей, оптимизированной библиотеки (к пр. Atlas BLAS) или же подсчитана на GPU (см. http://www.shaderx2.com/shaderx.PDF).