문제

CPU / GPU FLOPS 성능을 계산하려고하지만 제대로 수행하고 있는지 확실하지 않습니다. .

다음이 있다고 가정 해 보겠습니다.

  • Kaby Lake CPU (클럭 : 2.8GHz, 코어 : 4, 스레드 : 8)
  • Pascal GPU (클럭 : 1.3GHz, 코어 : 768).

이 Wiki 페이지 에서는 Kaby Lake CPU가 32 개의 FLOPS (단일 정밀도 FP32) 및 Pascal 카드는 2 개의 FLOPS (단일 정밀도 FP32)를 계산합니다. 즉, 다음 공식을 사용하여 총 FLOPS 성능을 계산할 수 있습니다.

CPU :

TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS 

GPU :

TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS 

질문

  1. [해결됨] 내가 본 대부분의 가이드 (예 : 이 가이드) 공식에서 물리적 코어를 사용하고 있습니다. 이해가 안되는 것은 대신 스레드 (논리적 코어)를 사용하지 않습니까? 부동 소수점 계산 성능을 두 배로 높이기 위해 스레드가 특별히 생성되지 않았습니까? 그렇다면 왜이를 무시합니까?

  2. [SOLVED] 내가 올바르게 수행하고 있습니까? FLOPS를 계산할 수있는 신뢰할 수있는 단일 소스를 찾을 수 없습니다. 인터넷의 모든 정보가 모순됩니다. i7 7700HQ Kaby Lake CPU의 경우 위의 공식이 358 GFLOPS를 제공하지만 FLOPS 값이 29 GFLOPS 만큼 낮은 것을 발견했습니다. 무엇을 믿어야할지 모르겠습니다.

  3. Node.js / Python / C ++에 모든 플랫폼을 반환하는 크로스 플랫폼 (Win, Mac, Linux) 라이브러리가 있습니까? 셰이딩 코어, 클럭, 사용 가능한 명령 세트 (또는 FP32, FP64 FLOPS 값)와 같은 GPU 통계를 사용하여 최대 이론적 성능을 직접 계산할 수 있습니까? CPU / GPU에서 FLOPS 통계를 직접 가져올 수 없다는 것은 매우 우스꽝 스럽습니다. 가치를 얻으려면 위키 페이지를 다운로드하고 구문 분석해야합니다. C ++를 사용하는 경우에도 코어 수와 같은 기본 Nvidia GPU 정보에 액세스하려면 2GB CUDA 툴킷을 다운로드해야합니다 (실제로 앱을 만드는 것이 불가능합니다). 아무도 2GB 앱을 다운로드하지 않기 때문에 다른 사용자도 사용할 수 있습니다.

댓글

  • 부분 답변으로 I " 스레드 "라고 부르는 것은 코어가 한 번에 두 개의 스레드처럼 보이는 것을 호스팅 할 수있는 트릭입니다 (하이퍼 -스레딩) 실제 하나의 실제 물리적 코어만으로 계산할 수 있습니다. 인텔이이 작업을 수행 한 방법에 대한 세부 사항에 대해서는 완전히 확신 할 수 없지만 파이프 라인에 구멍을 채우는 것과 관련이 있다고 생각합니다. 이것은 원칙적으로 발생하지 않습니다. 무거운 것을 컴퓨팅하고 있지만 데스크톱 OS에 대한 더 많은 일반적인 사용 사례의 경우 이것은 의미가 있습니다. unted.
  • @KyleMandli 설명을 해주셔서 감사합니다. 그게 타당하다고 생각합니다
  • 제안 된 계산의 한 부분은 주파수입니다. 현대 하드웨어에는 주파수가 없음 이라는 것을 알고 있다고 가정합니다. 작동 주파수는 온도 및 전력 소비량 (예 : 대부분의 GPU), 명령어 세트 사용 및 사용률 (예 : 대부분의 x86 CPU) 및 언급 된 모든 요인에 따라 달라집니다.
  • 사용자 ' 모든 곳에서 MHz를 GHz로 대체해야합니다.
  • ' 단일 " 실제 " 성능. 예를 들어 Volta GPU에서 큰 행렬을 곱할 때 내 " 실제 " 성능은 이론상 90 탑 / 초에 가깝습니다. 한편 resnet-50을 훈련 시키면 ' 초당 20 탑과 비슷합니다- medium.com/@yaroslavvb/ …

답변

GFLOP 비율을 계산할 수 있습니다. 하지만 오늘날의 하드웨어에서는 숫자가 무의미합니다.

  • 부동 소수점 연산에는 다양한 수의 클록 사이클이 필요합니다. 일반적으로 덧셈은 곱셈보다 저렴하지만 일반적으로 각각 28 억 사이클 중 하나 이상의 클럭 사이클이 필요합니다.

  • 하이퍼 스레딩을 사용하면 두 개의 스레드가 하나의 코어에서 실행되지만 코어는 여전히 하나의 부동 소수점 추가 단위이므로 두 스레드는 동시에 부동 소수점 추가를 실행할 수 없습니다.

  • 부동 소수점 연산은 에너지가 부족하고 에너지는 열로 변환됩니다. 많은 FLOP을 수행하면 프로세서가 과열되고 클럭 주파수가 낮아집니다.

  • 올바른 지침을 사용하면 이러한 작업을 개별적으로 수행하는 것보다 더 빠르게 곱하기와 더하기를 만드는 부동 소수점 곱하기 (FMA) 작업을 수행 할 수 있습니다.

    p>

  • 마찬가지로 SIMD 명령어를 사용하면 코어가 동시에 여러 데이터 조각에 대해 동일한 작업을 수행 할 수 있습니다. 예를 들어 4 쌍의 부동 소수점 숫자를 더하여 4 개의 FLOP을 생성합니다. 동시에. 그러나 이것은 알고리즘이 두 번째 추가의 첫 번째 추가 결과를 사용하는 대신 실제로 이것이 발생하도록 요구하는 문제가 필요합니다. 결과적으로 SIMD 명령어는 일부 알고리즘을 실행할 수있는 속도에만 기여하지만 다른 알고리즘은 실행하지 않습니다.

  • 가장 중요한 것은 일반적으로 메모리에서 데이터에 대한 작업을 수행하고 싶지만 주 메모리에서 프로세서로 데이터를 이동하는 것은 실제로 데이터에 대한 작업을 수행하는 것보다 훨씬 더 오래 걸립니다. 따라서 일반적으로 실제 응용 프로그램에서 프로세서의 이론적 부동 소수점 성능의 작은 부분조차 보지 못합니다. 일반적으로 이론적 최고 성능의 10 % 미만입니다.

즉, 최고 성능을 계산하는 것은 일종의 무의미한 비즈니스가되었습니다. 프로세서의 실제 성능과는 큰 관련이 없습니다.

댓글

  • 또한 SIMD 부동 소수점 단위가 이론적 최고 성능을 향상시킬 수있는 방법에 대해 논의 할 수도 있습니다.
  • 입력 해 주셔서 감사합니다. 이러한 점을 이해하고 고급 지침을 이해합니다. 집합은 부동 소수점 성능에 영향을 미칩니다. 지금은 이론상 최대 값을 고수 할 것입니다. ' 지금은 이론상 최대 값을 고수 할 것입니다. 그 당시의 실제 FLOPS 성능에 가까운 공식이 있었으면합니다. CPU가 특정 함수를 계산하는 데 필요합니다.
  • @AlekseyHoffman 공식은없고 측정뿐입니다. div id = “fd68a555a6″>

TOP 500 목록이 이론상 최고 성능이 아닌 실제 성능 측정을 기반으로하는 이유입니다.

  • @BrianBorchers 예, 좋습니다.
  • 답변

    Yoy는 러시아어로 읽을 수 있습니다.- FLOPS 계산 방법 .

    GHz는 FLOPS를 표시하지 않습니다. 동일한 GHz를 사용하는 한 프로세서는 동일한 GHz를 사용하는 다른 프로세서보다 훨씬 빠를 수 있습니다.

    P.S. GPU-s " rx 590 " 및 매우 오래된 " r7 250x "는 거의 동일한 GHz입니다. 하지만 … 이것은 그들의 성능을 비교하는 데는 맞지 않습니다.)

    댓글

    • 안녕하세요 scicomp에 오신 것을 환영합니다! stackexchange에서는 자체 포함 된 게시물을 갖는 것이 좋습니다 ( 여기 참조). 게시물을 개선하려면 기사의 핵심 정보로 답변을 수정 해보세요.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다