2009-10-31 10 views
6

최근 집에있는 PC를 쿼드 코어 CPU와 64 비트 OS로 업그레이드했습니다. 나는 C/C++에 대한 이전의 경험을 가지고 있으며, 64 비트 CPU 성능을 시험해보기 위해 정말 가려워하고 있습니다. 32 비트 단일 코어 코드에서 제대로 작동하지 않는 몇 가지 간단한 작업을 수행하여 64 비트 멀티 코어 기능을 보여주는 "Hello World"유형 프로그램은 무엇입니까?좋은 멀티 코어 64 비트 "Hello World"프로그램이란 무엇입니까?

저는이 새로운 CPU가 극한의 경우 C/C++ 코드의 성능에 어떤 영향을 줄 수 있는지에 대해 "느낌"을 갖기 위해 노력하고 있습니다.

+3

거의 'cout << "Hello World"<< endl; – Jherico

답변

2

OpenMP는 C++에서 멀티 코어 프로그래밍을 사용하는 쉬운 방법입니다. 위키 백과 예제는 프로세서 집약적 인 기능을 실제로 수행하지는 않지만, '독립적 인'기능을 독립적 인 장기 실행 기능으로 대체 할 수 있습니다.

OpenMP

는 지금까지 64 비트로, 당신의 성능 향상이 많이 몇 군데에서 온 것입니다.

모든 데이터 요소가 더 넓기 때문에 처리량이 증가하므로 프로세서는 주어진 클록주기 동안 더 많은 데이터를 처리 할 수 ​​있습니다. Exchange Server의 일부 Microsoft 벤치 마크를 살펴보면 처리량 증가가 놀랍기 때문에 64 비트 만 지원하도록 변경되었습니다.

64 비트 아키텍처에는 많은 수의 레지스터가 있으며 대부분의 함수 매개 변수가 있고 반환 값은 레지스터를 사용하여 전달할 수 있기 때문에 더 많은 레지스터가 사용됩니다.

일부 calling conventions이있는 x86 ABI에서 하나 또는 두 개의 매개 변수가 레지스터를 통해 전달 될 수 있고 나머지는 스택에 푸시되어야합니다. cdecl과 같은 공통 호출 규칙을 사용하면 단일 매개 변수 또는 반환 값이 레지스터에 저장되지 않습니다. 스택이 메인 메모리에 있기 때문에 성능이 크게 향상 될 수 있습니다.

1

raytracing이나 단백질 폴딩과 같은 독립적 인 방식으로 큰 숫자 나 큰 영역의 메모리에서 연산이 많은 연산을 수행하는 것이 좋습니다.

명심해야 할 중요한 사실은 64 비트 또는 멀티 코어 프로세서는 싱글 코어 프로세서가 할 수없는 것을 실제로 할 수 없다는 것입니다. 본질적으로 더 빠르고 더 큰 숫자로 처리 할 수 ​​있습니다.

1

얼마나 많은 서로 다른 병렬 처리 모델이 있고 각각 다른 작업에 어떻게 적용되는지를 고려할 때 질문에 대한 만족스러운 대답은 없습니다. 그것은 모두 에 달려 있습니다. 결국은 결국하고 싶습니다. 원하는 모델에 맞춰 모델을 선택해야합니다 (이전 제약 조건과 모순되지 않는 경우 message-passing을 시도해보십시오. 다른 모델에 비해 훨씬 쉽습니다).

나는이 말에서 Jherico의 혀로하는 답변이 옳다고 말했을 것이다. "hello world"와 같은 단순한 작업의 경우 최상의 모델은 전혀 병렬 처리가 아닙니다.

관련 문제