문제

그것은 공습++제공 근 Fortran 성능.

가 프로그램이 실제로하는 경향이 있는 것보다 빠를 정기적인 C++에 대한 해당 작업?

에 대해 무엇이 다른 HL 언어의 탁월한 런타임 성능이?들었어요 몇 가지 언어 suprassing C++특정 작업을 위해...Objective Caml,Java,D...

나 GC 만들 수 있는 많은 코드 빠르, 기 때문에,그것은 필요성을 제거를 위한 과도한 복사 주변의 스택?(가정 코드 작성을 위한 성능)

나는 호기심--으로 C++꽤 많은 저렴한 금지 전문가 ASM 코딩이다.

도움이 되었습니까?

해결책

Fortran은 순수한 수치 코드의 경우 C ++보다 더 빠르고 거의 항상 더 좋습니다. Fortran이 더 빠른 이유는 여러 가지가 있습니다. 가장 오래된 컴파일링 언어 (컴파일러 최적화에 대한 많은 지식)입니다. 여전히 수치 계산의 언어이므로 많은 컴파일러 공급 업체가 최적화 된 컴파일러를 판매하는 삶을 살고 있습니다. 더 기술적 인 다른 이유도 있습니다. Fortran (적어도 Fortran77)에는 포인터가 없으므로 해당 도메인의 C/C ++ 언어를 괴롭히는 별칭 문제가 없습니다. 많은 고성능 라이브러리는 여전히 (30 년) 역사를 가진 Fortran에서 코딩되어 있습니다. C 또는 C ++는 우수한 배열 구조물을 갖지 않습니다 (C는 너무 낮은 레벨이므로 C ++는 지구상의 컴파일러만큼 많은 배열 라이브러리를 가지고 있으며, 이는 모두 서로 호환되지 않으므로 잘 테스트 된 빠른 코드의 풀을 방지합니다).

다른 팁

Fortran이 C ++보다 빠릅니다. 논의의 문제입니다. 어떤 사람들은 그렇습니다. 어떤 사람들은 아니오라고 말합니다. 나는 그것에 들어 가지 않을 것입니다. 컴파일러, 실행중인 아키텍처, 알고리즘 구현 ... 등에 따라 다릅니다.

포트란 가지고 있습니다 C보다 큰 장점은 이러한 알고리즘을 구현하는 데 걸리는 시간입니다. 그리고 그것은 모든 종류의 수치 컴퓨팅에 매우 적합합니다. 나는 c에 대한 몇 가지 명백한 장점을 언급 할 것이다.

  • 1 기반 배열 인덱싱 (더 큰 모델을 구현할 때 엄청나게 도움이되면 생각할 필요가 없지만 공식은 번역됩니다
  • 전원 운영자가 있습니다 (**) (하나님, 권력 기능이 할 것이라는 생각은 누구의 생각입니까? 운영자 대신?!)
  • 그것은 현재 시장에서 모든 언어의 다차원 배열에 대한 최상의 지원이라고 말하고 싶습니다. A(1,2) 수학과 마찬가지로
  • 루프를 피하는 것은 말할 것도없이 - A = B*C는 배열을 곱합니다 (거의 MATLAB 구문과 같습니다. 컴파일 된 속도)
  • 그것은 병렬 처리 기능이 있습니다 언어로 (이 표준에 대한 새로운 표준을 확인하십시오)
  • C, Python과 같은 언어와 매우 쉽게 연결할 수 있으므로 Fortran에서 무거운 계산을 할 수 있습니다.
  • 완전히 뒤로 호환됩니다 (전체 F77이 F90의 하위 집합이기 때문에) 따라서 전체 세기의 코딩이 귀하의 처분에 있습니다.
  • 매우 휴대가 가능합니다 (이것은 일부 컴파일러 확장에는 효과가 없지만 일반적으로 매력처럼 작동합니다).
  • 문제 지향적 해결 커뮤니티 (Fortran 사용자는 일반적으로 CS가 아니라 수학, Phy, 엔지니어 ... 프로그래밍이없는 사람들이 아니라 지식의 지식이있는 문제 해결 경험 당신의 문제는 매우 도움이 될 수 있습니다)

지금 내 머리 꼭대기에서 다른 것을 생각할 수 없으므로해야 할 것입니다.

Blitz ++가 경쟁하는 것은 Fortran 언어가 아니라 Fortran Math 라이브러리에 들어가는 사람 중심의 일입니다. 언어는 어느 정도 도움이됩니다. 이전 언어는 컴파일러를 최적화하는 데 더 많은 시간이 걸렸습니다 (그리고 직면하자 C ++는 가장 복잡한 언어 중 하나입니다). 반면에, 높은 수준의 C ++ 라이브러리는 Blitz ++ 그리고 ublas 상대적으로 낮은 수준의 Fortran 코드보다 의도를 더 명확하게 진술 할 수 있으며 완전히 새로운 클래스의 컴파일 타임 최적화를 허용합니다.

그러나 항상 도서관을 효과적으로 사용하면 개발자가 언어에 대해 잘 알고 있어야합니다. 그리고 수학. 세 가지 중 하나를 개선하여 일반적으로 더 빠른 코드를 얻을 수 있습니다 ...

Fortan은 일반적으로 언어가 배열을 구현하는 방법으로 인해 배열 처리를 위해 C ++보다 일반적으로 더 빠릅니다. Fortran은 배열 요소의 별칭을 허용하지 않는 반면 C ++는 수행합니다. 이로 인해 Fortran 컴파일러 작업이 더 쉬워집니다. 또한 Fortran은 거의 50 년 동안 작업해온 매우 성숙한 수학 라이브러리를 많이 가지고 있습니다.

이것은 컴파일러, 프로그래머, GC가 있고 너무 많이 다를 수 있는지에 따라 다릅니다. 기계 코드에 직접 컴파일 된 경우 대부분의 시간에 해석 된 것보다 성능이 향상 될 것으로 예상되지만 어쨌든 ASM 속도를 갖기 전에 최적화가 유한이 있습니다.

누군가 Fortran이 약간 더 빠르다고 말하면 어쨌든 새로운 프로젝트를 코딩 하시겠습니까?

C ++의 것은 하드웨어 수준에 매우 가깝다는 것입니다. 실제로 하드웨어 수준 (어셈블리 블록을 통해)에서 프로그래밍 할 수 있습니다. 일반적으로 C ++ 컴파일러는 최적화에 꽤 잘 작동합니다 (큰 속도 부스트의 경우 다른 CPP 파일간에 함수를 인화 할 수 있도록 "링크 타임 코드 생성"을 활성화하지만 하드웨어를 알고 노하우가있는 경우 , 어셈블리에 더 빠르게 작동하는 몇 가지 기능을 작성할 수 있습니다 (때로는 컴파일러를 이길 수는 없습니다).

또한 자체 메모리 관리자 (다른 고급 언어가 허용하지 않는 것)를 구현할 수 있으므로 특정 작업에 대해 사용자 정의 할 수 있습니다 (아마도 대부분의 할당은 32 바이트 이하일 수 있습니다. O (1) 시간에 할당/거래 할 수있는 32 바이트 버퍼 목록 만 있으면됩니다. 컴파일러와 사용중인 하드웨어를 완전히 이해하는 한 C ++가 다른 언어를 이길 수 있다고 생각합니다. 그것의 대부분은 다른 무엇보다 사용하는 알고리즘에 달려 있습니다.

이 페이지를로드 할 때 홀수 관리 XML 파서를 사용해야합니다. :)

우리는 지속적으로 프로파일 코드와 이득이 일관되게 있습니다 (그리고 이것은 순진한 C ++가 아니며 BOO와 함께 현대적인 C ++입니다). 그것은 CLR 구현을 최소 2 배, 종종 5 배 이상으로 포장합니다. 약 20 배 더 빠르지 만 여전히 좋은 인스턴스를 찾아 모든 시스템을 제거 할 수있는 Java Days보다 조금 더 좋습니다.

관리되는 데브가 얻지 못하는 한 가지는 하드웨어 아키텍처가 VM 및 객체 뿌리 무리의 스케일링에 반대한다는 것입니다. 당신은 그것을 믿고, 매달리고, 브라우저를 발사하고 실버 라이트와 같은 '얇은'VM으로 가야합니다. 당신은 그것이 얼마나 느리고 CPU 배가 고프지 않을 것입니다.

두 가지, 모든 성능에 대한 데이터베이스 앱의 킥, 예 관리 대 네이티브 DB.

몇 분 전에 이것을 썼습니다.

C ++ 문자열 메모리 관리

일반적으로 알고리즘은 언어가 아닙니다.

이 야구장 내에서 컴파일러 최적화는 일반적으로 대부분의 어셈블리 코더보다 더 나은 코드를 생성 할 수 있습니다.

조기 최적화는 모든 악의 근원입니다

이것은 모든 사람이 앵무새를 할 수있는 "공통 지식"일지 모르지만, 아마도 맞기 때문에 제출할 수 있습니다. 나는 그 반대의 구체적인 증거를 기다리고있다.

D는 실제 응용 분야에서 C ++보다 빠를 수 있습니다. 대부분 쓰레기 수집이 있으면 스마트 포인터를 사용할 때 RAII 및 기준 계수의 오버 헤드를 피할 수 있기 때문입니다. 사소한 수명이없는 많은 양의 작은 물체를 할당하는 프로그램의 경우 쓰레기 수집은 C ++ 스타일 메모리 관리보다 빠를 수 있습니다. 또한 D의 내장 배열을 사용하면 컴파일러가 이해하지 못하는 C ++의 STL 벡터보다 컴파일러가 더 나은 최적화를 수행 할 수 있습니다. 또한 D2는 불변의 데이터와 순수한 기능 주석을 지원하며, 최근 버전의 DMD2는 최적화합니다. D의 제작자 인 Walter Bright는 D와 C ++ 모두에서 JavaScript 통역사를 썼으며, 그에 따르면 D 버전은 더 빠릅니다.

그것은 모두 컴파일러에 따라 다르고, 예를 들어 스탈린 스케일 컴파일러를 사용하고, 데비안 마이크로 벤치 마크 스위트의 거의 모든 언어를 능가하지만 컴파일 시간에 대해 언급합니까?

아니요, 나는 벤치 마크 (최대 노력 수준에서 모든 최적화)를 위해 컴파일하는 것 (이전에 스탈린을 사용하지 않았습니다)은 가장 작은 코드를 제외하고는 유쾌한 시간이 걸립니다.

는 경우에는 코드 쓰지 않는 성능 다음 C#보다 빠르게 C++.

필요 면책 조항: 모두 벤치마크가 악이다.

여기에는 벤치마킹 찬성하여 C++.

위의 두 가지의 링크 보여 우리가 찾을 수 있는 경우 C++보다 빠른 C#고 그 반대입니다.

의 성능을 컴파일한 언어를 쓸모없는 개념:중요한 것은 품질의 컴파일러,즉 무엇을 최적화할 수 있 적용됩니다.예를 들어,자주지 인텔 C++컴파일러 생산이 더 수행하는 코드보다 g++.그래서 당신은 어떻게 당신의 성능을 측정하는 C++?

는 언어를 의미에 와서 얼마나 쉬운지를 위한 프로그래머를 얻을 컴파일러를 만드는 최적의 출력 합니다.예를 들어,그것은 종종 쉽게 병렬화하는 프로그램 코드 C 코드보다 이유입니다,프로그램은 여전히 많이 사용되는 고성능 계산(예를 들어 기후 시뮬레이션).


으로 질문에 응답의 일부 언급한 어셈블러:같은 사실 여기에,그냥 다른 언어를 컴파일하고 따라서 본래부터'빨리'.의 차이를 어셈블러와 기타 언어로 프로그래머는 이상적으로는 절대 프로그램에 대한 지식-에 대한 모든 책임의 최적화를 위임 대신 그들 중 일부는'바보'컴파일러입니다.

예를 들어 함수 호출에 어셈블러를 사용할 수 있습 등을 인수를 전달하지 않을 만들 필요가 불필요한 스 프레임지만,컴파일러는 좋은 이것을 할 수 있습니다(생각하는 인라인 또는 fastcall).의 단점을 사용하여 어셈블러가는 더 나을 수행하는 알고리즘을 구현하기 어렵게(생각하고 선형 대 검색바이너리 검색,해시 테이블 조회,...).

C ++보다 훨씬 더 잘하는 것은 대부분 컴파일러가 프로그래머의 의미를 이해하도록하는 것입니다. 이에 대한 예는 모든 언어의 컴파일러가 코드 영역이 입력과 무관하고 컴파일 타임에 결과 값을 계산하는 인스턴스 일 수 있습니다.

이에 대한 또 다른 예는 C#이 단순히 고성능 코드를 생성하는 방법입니다. 컴파일러는 특정한 주문이 무엇을 의미하는지 알고 있고 동일한 프로그램의 C ++로의 음역이 불필요한 Alloc/을 초래하는 가장 높은 성능을 생성하는 구현을 영리하게 사용할 수 있기 때문입니다. 컴파일러 가이 코드가 제공하는 특정 사례 대신 일반적인 경우를 처리하기 때문에 사이클 (템플릿에 의해 숨겨진) 삭제 (템플릿에 의해 숨겨진).

마지막 예는 더 이상 이국적이지 않은 이국적인 하드웨어를 위해 설계된 C의 Brook/Cuda 적응에있을 수 있습니다. 이 언어는 컴파일중인 von-neuman 하드웨어에 매핑되는 정확한 프리미티브 (커널 기능)를 지원합니다.

이것이 관리 브라우저를 사용하는 이유입니까? 더 빠르기 때문입니다. 또는 더 빠르기 때문에 OS를 관리합니다. 아니, 매달려, 그것은 SQL 데이터베이스입니다. 잠깐, 그것은 당신이 플레이하는 게임이어야합니다. 중지, 숫자 코드가 있어야합니다. Java Adn Csharp는 솔직히 쓸모가 없습니다. BTW, 당신은 루트 언어를 슬래그하기 위해 VM이 작성된 내용을 확인하고 느리다고 말해야합니다.

얼마나 오해이지만, 우리 모두가 웃을 수 있도록 빠른 관리 앱을 보여주세요. 대? 오픈 오피스?

C#보다 훨씬 더 빠르게 C++-C#에서 내가 쓸 수 있는 XML 파서 및 데이터 프로세서에 열 번째 데 걸리는 시간은 저에게 그것을 쓰는 C++.

오,당신을 의미 실행 속도가?

더라도,그 시간이 걸릴 경우의 첫 번째 줄에서 작성된 코드의 끝에 첫 번째 실행 코드의 C#은 여전히 아마보다 빠르게 C++.

이것은 매우 흥미로운 문서 변환에 대해진 C++프로그램 C#과 노력이 필요하게 C++보다 빠르게 수 있습니다.

그래서,당신은 발전 속도로 계정을 거의 아무것도 친 C++.

확인하여 주소 tht OP 의 런타임만 아니라 성능 요구 사항: 그것은 언어는,그것의 구현 언어 을 결정하는 런타임 성능이 저하됩니다.내가 쓸 수 있는 C++컴파일러를 생산하는 코드가 가장 느린 상상할 수 있지만,그것은 여전히 C++.그것은 또한 이론적으로 작성이 가능하 컴파일러를 위한 Java 대상으로 하는 IA32 지침보다는 자바 VM 을 바이트 코드를 주는 런타임 속도 향상.

의 성능 코드에 따라 달라집니다 맞는 사이에 힘의 언어와의 요구 사항 코드입니다.예를 들어,프로그램은 메모리를 많이 할당/할당 취소 심하게 수행에 순진 C++프로그램(즉기본값을 사용하는 메모리 할당자)이후 C++메모리 할당 전략이 너무 일반화되는 반면,C#'s GC 기반으로 할당자를 수행할 수 있는 더 나은(로 위 링크를 표시).문자열 조작이 느리에서는 C++지만 빠른에서 같은 언어 php,perl,etc.

아 ... 좋은 오래된 질문 - 어떤 컴파일러가 더 빠른 코드를 만드는가?

  1. 코드에서만 콜 스택 하단에서 많은 시간을 보내는 것, 즉 매트릭스 반전 등 기능 호출이 포함되지 않은 핫스팟 등.

  2. (1에 의해 암시됨) 컴파일러가 실제로 보는 코드에서만 중요합니다. 프로그램 카운터가 구축하지 않는 제 3 자 라이브러리에서 모든 시간을 보내면 중요하지 않습니다.

  3. 문제가되는 코드에서는 컴파일러가 ASM을 더 잘 만드는 모든 것이 내려지며, 이는 소스 코드가 얼마나 똑똑하거나 어리석게 쓰여지는 기능입니다.

이러한 모든 변수를 사용하면 좋은 컴파일러를 구별하기가 어렵습니다.

그러나 말했듯이, 컴파일 할 Fortran 코드가 많이 있다면 다시 작성하지 마십시오.

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