Производительность C ++ / Java для нейронных сетей? - PullRequest
5 голосов
/ 15 сентября 2008

Я обсуждал нейронные сети (NN) с другом на обеде на днях, и он заявил, что производительность NN, написанного на Java, будет аналогична производительности, написанной на C ++. Я знаю, что с помощью методов «как раз вовремя» Java может работать очень хорошо, но почему-то я просто не куплюсь на это. У кого-нибудь есть опыт, который бы пролил свет на эту проблему? Эта страница - степень моего прочтения по теме.

Ответы [ 7 ]

10 голосов
/ 15 сентября 2008

Hotspot JIT теперь может генерировать код быстрее , чем C ++. Причина - эмпирическая оптимизация во время выполнения.

Например, он может видеть, что определенный цикл занимает «ложную» ветвь 99% времени и соответственно переупорядочивает инструкции машинного кода.

Есть много статей об этом. Если вам нужны все подробности, прочитайте Превосходный технический документ Sun . Для более неофициальной информации, попробуйте этот .

2 голосов
/ 15 сентября 2008

Единственный возможный ответ: сделайте прототип и измерьте для себя. Если мой опыт и представляет какой-либо интерес, то Java и C # всегда были намного медленнее, чем C ++, для той работы, которую я выполнял, - я полагаю, в основном из-за высокого потребления памяти. Конечно, вы можете прийти к совершенно другому выводу.

2 голосов
/ 15 сентября 2008

Мне было бы интересно сравнить между Hotspot JIT и оптимизированной по профилям оптимизацией C ++.

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

В любом случае, как правило, вы будете зависеть от более крупного проекта, используя тот же язык, на котором он написан. Или вы будете зависеть от базы знаний ваших коллег. Или вы будете зависеть от платформы, на которую вы нацеливаетесь (JVM доступна на архитектуре, на которую вы нацелены?). В редком случае у вас есть полная свобода, и вы знакомы с обоими языками, сделайте некоторые сравнения с инструментами, которые есть в вашем распоряжении. Это действительно единственный способ определить, что лучше.

0 голосов
/ 14 июня 2011

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

0 голосов
/ 19 июля 2009

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

0 голосов
/ 15 сентября 2008

Если вас беспокоит чрезмерная сборка мусора, вы всегда можете повторно использовать неиспользуемые объекты с высоким уровнем оттока.

Создание фабрики, которая хранит очередь SoftReferences для переработанных объектов, используя их до создания новых объектов. Затем в коде, который использует эти объекты, явным образом верните эти объекты на фабрику для переработки.

0 голосов
/ 15 сентября 2008

Это не совсем связано с производительностью C ++ и Java, но тем не менее интересно: A paper о производительности программ, работающих в среде сборки мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...