과학 코드 성능의 기본 구조는 무엇입니까?


11

하드웨어 및 소프트웨어 구성이 다른 두 대의 컴퓨터를 고려하십시오. 각 플랫폼에서 정확히 동일한 직렬 Navier-Stokes 코드를 실행할 때 각각 컴퓨터 1과 2에 대해 하나의 반복을 실행하는 데 x와 y 시간이 걸립니다. 이 경우 는 컴퓨터 1과 컴퓨터 2 사이의 반복 시간 차이입니다.Δ=xy

의 크기에 영향을 줄 수있는 것은 무엇입니까 ? 명백한 후보 중 하나는 CPU이며, 나의 주요 질문은 CPU 간의 하드웨어 차이와 동일한 순서로 Δ 에 영향을 줄 수있는 다른 요소가 있는지 여부입니다 .ΔΔ


4
물론 는 단지 하나의 샘플입니다. 또한 문제 크기와 구조에 Δ 가 어떻게 영향을 미치는지 조사해야합니다 . 둘째, 코드를 프로파일 링하고 xy 를 다른 기여의 합 으로 나누고 hw 및 sw 구성과 관련하여 코드의 다른 부분의 성능을 분석 하려고 제안 합니다. ΔΔxy
Stefano M

4
캐쉬 라인 미스 . 그것이 가장 먼저 고려해야 할 사항입니다. 메모리는 많은 알고리즘의 병목 요인입니다.
사슴 사냥꾼

답변:


13

이 목록은 거의 완성되지 않았지만, 크기가 가능한 요인의 규모에 대한 힌트를 제공하기를 바랍니다. 선택한 플랫폼의 소스에서 코드를 컴파일한다고 가정합니다.

소프트웨어

  • 표준 라이브러리 성능
  • 린 Alg. 라이브러리 성능 (소프트웨어가 외부 라이브러리에 링크 된 경우)
  • 컴파일러 선택
  • 컴파일러 최적화
  • 컴파일러 플래그
  • 백그라운드 프로세스 (OS가 다른 경우 크게 다를 수 있음)

하드웨어

CPU

  • 시계 속도
  • 아키텍처 (같은 명령어는 다른 아키텍처에서 다른 횟수의 사이클이 걸릴 수 있음)
  • 캐시 크기
  • 캐시 지연
  • SIMD (단일 명령, 다중 데이터) 기능

기억

  • 채널 수
  • 속도

HDD

  • 읽기 / 쓰기 속도 (주로 결과를 쓰는 데만 중요하므로 NS 솔버를 위해 파일에 출력을 쓰는 빈도에 따라 다르지만 이미지 처리와 같은 작업을 수행하는 다른 프로그램에는 중요 할 수 있음)

이것은 서로 다른 제조업체가 칩을 시장에 내놓기 위해 포함하는 작은 트릭과 기능을 무시하는 것입니다. 가장 큰 것은 많은 희소 선형 대수 라이브러리가 메모리에 묶여 있다는 것입니다. 희소 행렬 곱셈을 수행하려면 많은 실제 플롭없이 많은 데이터가 이동합니다.


코어 수와 SIMD 기능을 모두 CPU에 추가하겠습니다.
Pedro

@Pedro 직렬 솔버가 문제라고 말한 이후 코어를 제거했지만 SIMD를 추가 할 것입니다. 감사.
Godric Seer

1
@GodricSeer 하나의 컴퓨터에서 컴파일 한 다음 실행했습니다. 그런 다음 동일한 컴파일 된 실행 파일을 사용하여 두 번째 컴퓨터에서 실행했습니다. 귀하의 설명에 따르면 두 번째 컴퓨터의 소스에서 다시 컴파일하는 것이 좋습니다. 그 경우입니까?
Isopycnal Oscillation

1
@IsopycnalOscillation 특정 머신에서 / 특정 머신을 컴파일 할 때 gcc / gfortran 옵션 -march=native또는 icc / ifort 옵션 -xHOST을 사용하여 기본 아키텍처에 맞는 최적화를 적용 할 수 있습니다.
Pedro

1
여기서 핵심은 컴퓨터 성능이 1 차원적인 수량이 아니라는 것입니다. 동일한 제조업체 (예 : 인텔)의 프로세서 칩이 장착 된 컴퓨터의 경우에도 Godric이 위에 열거 한 모든 요소의 상대적인 균형은 상당히 다를 수 있습니다. 결과적으로 벤치 마크에 따라 두 프로세서에 대해 서로 다른 성능 비율을 보여줄 수 있습니다. 실질적인 문제로, 대부분의 최신 컴퓨터는 과학적인 컴퓨팅 워크로드를 지원하기 위해 메모리 대역폭이 심각하게 부족하며 이는 종종 병목 현상입니다.
Brian Borchers

2

x/yxy

둘째, 귀하의 질문은 소프트웨어의 차이점을 구체적으로 배제합니다. 필자의 경험에 따르면 신중한 조정에 대한 성능 보상은 큰 요인이 될 수 있으므로 하드웨어 문제를 고려하는 동안 소프트웨어 문제를 잊지 마십시오. 결국, 하드웨어는 사용자가 제공 한 명령 만 실행할 수 있으며, 더 적게 주면 더 빨리 완료됩니다.

이것을 너무 많이 확장하지는 않지만 주어진 문제에 대해 해결할 수있는 무한한 프로그램이 있습니다. 이 중 일부는 다른 모든 것보다 시간이 덜 걸리며 이는 하한입니다. 프로그램 이주의 깊게 조정되지 않은 경우이 하한 또는 그 근처에 있다고 가정하지 마십시오 .

이 링크는 내가 사용하는 정통 방법에 대해 자세히 설명합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.