2010-08-09 4 views
3

C로 작성된 직렬 (비 병렬) 응용 프로그램이 있습니다. 인텔 스레딩 구성 요소를 사용하여 수정하고 다시 작성했습니다. 쿼드 코어 머신 인 AMD Phenom II 머신에서이 병렬 버전을 실행할 때 Amdahl의 법칙과 충돌하는 4 배 이상의 성능 향상을 얻었습니다. 아무도 나에게 이런 일이 일어나는 이유를 줄 수 있니?멀티 코어 응용 프로그램의 성능 향상 문제

감사합니다. Rakesh.

+1

응용 프로그램이 일반적으로 CPU 바인딩 또는 IO 바인딩입니까? 입출력 제한이있는 경우 다른 입출력을 위해 대기중인 프로세스를 스왑 할 수 있으므로 정상적인 것보다 더 많은 시간을 절약 할 수 있습니다. – Amber

답변

4

프로그램을 다시 작성하면 더 효율적으로 만들 수 있습니다. Amdahl의 법칙은 병렬 처리로 인한 속도 향상의 양을 제한하는 것이지 코드를 향상시켜 코드를 얼마나 빨리 작성할 수있는지가 아닙니다.

네 개의 procs를 모두 사용할 수 있기 때문에 4 배속 캐시의 효과를 실현할 수 있습니다. 또는 컴퓨터에서 실행중인 다른 프로세스와 경합을 덜 일으킬 수도 있습니다. 또는 실수로 잘못 예측 된 지점을 수정했습니다.

TL/DR : 발생합니다.

1

아무도 내게 왜 이런 일이 일어나는 이유가있을 수 있습니까?

단어 캐시.

각 코어에는 고유 한 L1 캐시가 있으므로 더 많은 코어를 사용하면 단순히 재생중인 캐시의 양이 늘어나 더 많은 데이터를 처리 할 위치에 가깝게 가져올 수 있습니다. 이것만으로도 성능을 크게 향상시킬 수 있습니다 (단일 코어에서 더 큰 캐시를 사용하는 것처럼). 효과적인 병렬 처리로 거의 선형의 속도 향상과 결합하면 전반적으로 초고속 성능이 향상됩니다.

2

"슈퍼 선형 속도 향상"이라고하며 여러 가지 이유로 발생할 수 있습니다. 가장 일반적인 근본 원인은 아마도 캐시 동작 일 수 있습니다. 일반적으로 초고속 스피드 업이 발생하면 순차 버전을보다 효율적으로 만들 수 있다는 단서가 있습니다.

예를 들어 코어 중 일부가 L2 캐시 (요즘에는 공통 아키텍처)를 공유하는 프로세서가 있고 알고리즘이 대규모 데이터 구조를 여러 번 통과한다고 가정 해 보겠습니다. 순회를 순차적으로 수행하면 각 순회는 L2 캐시로 데이터를 새로 가져와야하지만, 순회를 병렬로 수행하면 순회가 실행되는 한 많은 수의 누락을 피할 수 있습니다 단계 (단계를 벗어나는 것이 여기에 예측할 수없는 성능의 좋은 원천입니다). 순차적 인 verison을보다 효율적으로 만들려면 traversal을 인터리빙하여 지역성을 향상시킬 수 있습니다.