Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top