답변:
이론적 피크 FLOP / s는 다음과 같이 제공됩니다. 코어 수는 쉽습니다. 이론적으로 평균 주파수는 일정량의 터보 부스트 (Intel) 또는 터보 코어 (AMD)를 고려해야하지만 작동 주파수는 좋은 하한입니다. 사이클 당 작업은 아키텍처에 따라 다르며 찾기 어려울 수 있습니다 (SandyBridge 및 IvyBridge의 경우 8, 슬라이드 26 참조 ). 이 스택 오버플로 질문 의 주제이며 , 여기에는 많은 현대 아키텍처의 숫자가 포함됩니다.
머신의 CPU 모델 및 공급 업체를 알아야합니다. 그런 다음 공급 업체 웹 사이트 (또는 Wikipedia)에서 클럭 속도, 칩 / 소켓 수, 칩당 코어 수, 사이클 당 부동 소수점 연산 수 및 해당 연산의 벡터 너비를 찾을 수 있습니다. . 그런 다음 단순히 곱하면됩니다.
예를 들어, 내가 일하는 Stampede 의 Intel Xeon E5-2680 "Sandy Bridge"프로세서를 예로 들어 보겠습니다 . 사양은 다음과 같습니다.
이들을 곱하면 시스템의 가속되지 않은 부분에 345.6 GF / 노드 또는 2.2 PF가 제공됩니다.
우리는 일반적으로 배정도 (64 비트) 연산의 관점에서 생각합니다. 왜냐하면 대부분의 사용자에게 필요한 정밀도이기 때문입니다. 그러나 원하는 경우 단 정밀도로 계산을 다시 실행할 수 있습니다. 이것은 일반적으로 4 DP Flops / inst 대신 8 SP Flops / instruction과 같은 마지막 요소 만 변경하지만 실제로는 크게 다를 수 있습니다. 예를 들어, 구형 GPU는 DP 속도의 약 1/8로 DP를 수행했습니다. 시스템의 숫자를 인용 한 경우, 사람들이 그렇지 않다고 가정하기 때문에 배정 밀도가 아닌 경우 사용한 숫자를 명시해야합니다.
또한 칩이 FMA (fused multiply-add) 명령어를 지원하고 최대 속도로 처리 할 수있는 경우, 하드웨어 성능 카운터가 하나의 명령어로만 계산할 수 있지만 대부분의 사람들은이를 2 개의 부동 소수점 연산으로 계산합니다.
마지막으로, 시스템에 존재할 수있는 가속기 (GPU 또는 Xeon Phi 등)에 대해서도이 작업을 수행하고 이론적 총계를 얻기 위해 CPU 성능에 해당 성능을 추가 할 수 있습니다.
이론적 가치를 요구 한 것으로 알고 있지만 실제 코드, LINPACK을 통해 거의 항상 액세스 할 수 없으므로 매우 큰 행렬에 대해 DGEMM을 실행 (최적화) 할 수 있습니다. 이 방법을 선호하는 이유는 특정 프로세서의 단점을 드러내 이론적으로 피크 플롭 값을 달성하지 못하기 때문입니다.
예를 들어, NVIDIA GPU는 현재 동일한 파이프 라인에서 정수 및 부동 소수점 연산을 수행합니다. 즉, 정수 계산 을하지 않으면 이론상 피크 플롭 / 초만 얻을 수 있습니다. . 배열 인덱싱 및 다른 형태의 데이터 액세스는 어딘가에 정수 산술이 필요하기 때문에 어떤 코드도 NVIDIA GPU에서 이론적 인 피크 플롭을 달성 할 수 없습니다. 대부분의 경우 상한으로 ~ 80 %가 표시됩니다. 정수 및 부동 소수점 연산을 동시에 실행하는 CPU의 경우 이는 문제가 아닙니다.
Intel Knights Corner 및 Blue Gene / Q와 같은 일부 GPU와 유사한 멀티 코어 프로세서에서는 유사한 파이프 라인 문제에 대해 기존 CPU보다 피크 플롭을 달성하기가 더 어렵습니다. ).