과학 코드 성능의 기본 구조는 무엇입니까? 각 플랫폼에서 정확히

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

Δ=xy

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

Δ

Δ



답변

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

소프트웨어

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

하드웨어

CPU

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

기억

  • 채널 수
  • 속도

HDD

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

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


답변

x/y

xy

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

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

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


답변