하드웨어 및 소프트웨어 구성이 다른 두 대의 컴퓨터를 고려하십시오. 각 플랫폼에서 정확히 동일한 직렬 Navier-Stokes 코드를 실행할 때 각각 컴퓨터 1과 2에 대해 하나의 반복을 실행하는 데 x와 y 시간이 걸립니다. 이 경우 는 컴퓨터 1과 컴퓨터 2 사이의 반복 시간 차이입니다.
의 크기에 영향을 줄 수있는 것은 무엇입니까 ? 명백한 후보 중 하나는 CPU이며, 나의 주요 질문은 CPU 간의 하드웨어 차이와 동일한 순서로 Δ 에 영향을 줄 수있는 다른 요소가 있는지 여부입니다 .
답변
이 목록은 거의 완성되지 않았지만, 크기가 가능한 요인의 규모에 대한 힌트를 제공하기를 바랍니다. 선택한 플랫폼의 소스에서 코드를 컴파일한다고 가정합니다.
소프트웨어
- 표준 라이브러리 성능
- 린 Alg. 라이브러리 성능 (소프트웨어가 외부 라이브러리에 링크 된 경우)
- 컴파일러 선택
- 컴파일러 최적화
- 컴파일러 플래그
- 백그라운드 프로세스 (OS가 다른 경우 크게 다를 수 있음)
하드웨어
CPU
- 시계 속도
- 아키텍처 (같은 명령어는 다른 아키텍처에서 다른 횟수의 사이클이 걸릴 수 있음)
- 캐시 크기
- 캐시 지연
- SIMD (단일 명령, 다중 데이터) 기능
기억
- 채널 수
- 속도
HDD
- 읽기 / 쓰기 속도 (주로 결과를 쓰는 데만 중요하므로 NS 솔버를 위해 파일에 출력을 쓰는 빈도에 따라 다르지만 이미지 처리와 같은 작업을 수행하는 다른 프로그램에는 중요 할 수 있음)
이것은 서로 다른 제조업체가 칩을 시장에 내놓기 위해 포함하는 작은 트릭과 기능을 무시하는 것입니다. 가장 큰 것은 많은 희소 선형 대수 라이브러리가 메모리에 묶여 있다는 것입니다. 희소 행렬 곱셈을 수행하려면 많은 실제 플롭없이 많은 데이터가 이동합니다.
답변
둘째, 귀하의 질문은 소프트웨어의 차이점을 구체적으로 배제합니다. 필자의 경험에 따르면 신중한 조정에 대한 성능 보상은 큰 요인이 될 수 있으므로 하드웨어 문제를 고려하는 동안 소프트웨어 문제를 잊지 마십시오. 결국, 하드웨어는 사용자가 제공 한 명령 만 실행할 수 있으며, 더 적게 주면 더 빨리 완료됩니다.
이것을 너무 많이 확장하지는 않지만 주어진 문제에 대해 해결할 수있는 무한한 프로그램이 있습니다. 이 중 일부는 다른 모든 것보다 시간이 덜 걸리며 이는 하한입니다. 프로그램 이주의 깊게 조정되지 않은 경우이 하한 또는 그 근처에 있다고 가정하지 마십시오 .