2014-12-12 3 views
0

C에서 BLAS 매트릭스 연산을 사용하여 하이퍼 스레딩을 사용하여 CPU를 벤치마킹하는 동안 하이퍼 스레딩을 사용할 때 함수의 런타임을 거의 정확히 두 배로 관찰했습니다. 내가 예상 한 것은 순서가 잘못된 실행이나 다른 최적화로 인해 일종의 속도 향상이었습니다.gettimeofday 및 기타 시간 측정에 대한 하이퍼 스레딩 효과

gettimeofday를 사용하여 런타임을 추정합니다. 관찰을 평가하기 위해 하이퍼 스레딩 환경 (데비안 리눅스 32 비트)에서의 gettimeofday의 안정성에 대한 생각을 가지고 있거나 제 기대치 (아마도 잘못된 것일 수도 있습니다)에 대해 알고 싶습니다.

업데이트 : 벤치 마크 응용 프로그램을 두 번 실행하여 하나의 하이퍼 스레딩 코어에 각각 선호도를 설정한다는 사실을 잊어 버렸습니다. 예를 들어 gemm은 두 번 병렬로 실행됩니다.

+0

코드와 데이터가 BLAS와 같은 것들이 설계/최적화 된 캐시 (L1 특히 L2에서도 가능)에 적합하다면 해당 코드를 실행하면 대부분의 파이프 라인 설치 및 거품이 부족합니다 하이퍼 스레딩이 다른 스레드의 명령을 스케쥴링하는데, 이것은 하이퍼 스레딩을 거의 무효로 만듭니다. – twalberg

답변

2

아주 작은 시간 간격을 측정하지 않는 한 gettimeofday()을 사용하여 불일치를 설명하는지 의심 스럽습니다.

요즘까지 하이퍼 스레딩을 사용하면 단일 스레드 BLAS 계산의 성능을 향상시킬 수있을 것으로 기대하지 않습니다. 단일 스레드는 한 번에 하나의 프로세서 만 사용하므로 하이퍼 스레딩에 의해 제공되는 추가 논리 프로세서는 도움이되지 않습니다.

잘 조정 된 BLAS는 메모리 액세스 시간을 줄이기 위해 CPU의 데이터 캐시를 잘 사용합니다. 그러나 동일한 실제 CPU의 다른 논리 프로세서가 다른 프로세스를 실행하는 경우 발생할 수있는 것처럼 필요한 데이터가 캐시에서 제거되는 경우 많은 도움이되지 않습니다. 가볍게로드 된 시스템이라 할지라도 OS는 모든 사용 가능한 (논리적 인) 프로세서에서 항상 일정을 잡을 수있는 충분한 작업을 수행 할 것입니다.

+0

죄송합니다, blas 함수를 병렬로 실행하고 있음을 언급하는 것을 잊었습니다. – bknux

+1

당신은 요점을 놓치고 있습니다. BLAS 자체는 단일 스레드이므로 개별 계산에서 추가 코어를 사용할 수있는 이점이 없습니다 (물리적 또는 논리적 여부에 관계없이). 반면에, 각각의 캐시 사용은 동일한 물리적 CPU에서 실행되는 다른 BLAS 계산이 거기에서 실행되는 임의의 비 관련 계산과 마찬가지로 불리한 영향을받습니다. –

관련 문제