문제

지난번 점심 시간에 친구와 신경망(NN)에 대해 논의하고 있었는데 친구는 Java로 작성된 NN의 성능이 C++로 작성된 NN의 성능과 비슷할 것이라고 주장했습니다.나는 '적시' 컴파일러 기술을 사용하면 Java가 매우 잘할 수 있다는 것을 알고 있지만 어쨌든 나는 그것을 구입하지 않습니다.이 문제를 밝혀줄 경험이 있는 사람이 있습니까? 이 페이지 그 주제에 관해 내가 읽은 정도입니다.

도움이 되었습니까?

해결책

핫스팟 JIT는 이제 코드를 생성할 수 있습니다. 더 빠르게 C++보다.그 이유는 런타임 경험적 최적화 때문입니다.

예를 들어, 특정 루프가 99%의 시간 동안 "false" 분기를 사용하고 이에 따라 기계어 명령을 재정렬하는 것을 볼 수 있습니다.

이에 대한 기사가 많이 있습니다.모든 세부 사항을 알고 싶다면 읽어보세요. Sun의 우수한 백서.더 비공식적인 정보를 원하시면, 이거 한번 해봐.

다른 팁

Hotspot JIT와 프로필 기반 최적화 최적화 C++ 간의 비교에 관심이 있습니다.

Hotspot JIT(및 런타임 프로필 최적화 JIT 컴파일러)에서 내가 본 문제는 통계를 유지하고 코드를 수정해야 한다는 것입니다.이로 인해 코드가 더 빠르게 실행되는 경우가 있지만 대부분의 상황에서 프로필 최적화 JIT 컴파일러가 잘 최적화된 C 또는 C++ 코드보다 더 빠르게 실행될지는 의문입니다.(물론 제가 틀렸을 수도 있습니다.)

어쨌든, 일반적으로 당신은 작성된 것과 동일한 언어를 사용하여 더 큰 프로젝트에 개입하게 될 것입니다.아니면 동료의 지식 기반을 활용하게 될 것입니다.아니면 대상으로 삼고 있는 플랫폼의 영향을 받게 될 것입니다(대상으로 삼는 아키텍처에서 JVM을 사용할 수 있습니까?).드문 경우지만 완전한 자유를 누리고 두 언어에 모두 익숙하다면 사용 가능한 도구와 비교해 보세요.이것이 무엇이 최선인지 결정하는 유일한 방법입니다.

가능한 유일한 대답은 다음과 같습니다.프로토타입을 만들어 직접 측정해 보세요.내 경험에 관심이 있다면 Java와 C#은 내가 하고 있는 작업에 비해 항상 C++보다 훨씬 느렸습니다. 주로 높은 메모리 소비 때문이라고 생각합니다.물론 완전히 다른 결론에 도달할 수도 있습니다.

이것은 엄밀히 말하면 C++ 대 Java 성능에 관한 것은 아니지만 그럼에도 불구하고 그 점에서는 흥미롭습니다.ㅏ 종이 가비지 수집 환경에서 실행되는 프로그램의 성능에 대해 설명합니다.

과도한 가비지 수집이 문제가 되는 경우, 사용되지 않은 변동률이 높은 개체를 언제든지 재사용할 수 있습니다.

새 개체를 만들기 전에 이를 사용하여 재활용 개체에 대한 SoftReferences 대기열을 유지하는 팩토리를 만듭니다.그런 다음 이러한 개체를 사용하는 코드에서 재활용을 위해 해당 개체를 팩토리에 명시적으로 반환합니다.

아마도 C++일 것입니다. 하지만 시작 시간이 느린 것 외에는 차이점을 거의 느끼지 못할 것입니다.그러나 Java를 사용하면 개발 속도가 빨라지고 유지 관리가 쉬워집니다.

전체적인 계획에서 CUDA 또는 전용 하드웨어로 이동하면 몇 배의 성능 향상을 얻을 수 있는 5%의 성능 차이에 대해 토론하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top