2012-08-11 3 views
5

나는 내 자신의 CUDA 커널을 프로그래밍했다. CPU 코드와 비교할 때 커널 코드는 CPU보다 10 배 빠릅니다.CUDA 성능을 평가하는 방법은 무엇입니까?

하지만 실험에 대한 질문이 있습니다.

모든 GPU 코어, 적절한 공유 메모리 사용, 적절한 등록 횟수, 충분한 점유 공간을 사용하여 내 프로그램이 완벽하게 최적화되어 있습니까?

커널 코드의 성능을 어떻게 평가할 수 있습니까?

이론적으로 어떻게 CUDA의 최대 처리량을 계산할 수 있습니까?

나는 CPU의 GFLOPS와 GPU의 GFLOPS와 GFLOPS 속도를 비교할 때 그 이론적 인 결과가 투명합니까?

미리 감사드립니다.

답변

5

내 GPU 코어, 적절한 공유 메모리 사용, 적절한 레지스터 수, 충분한 점유 공간을 사용하여 내 프로그램이 완벽하게 최적화되어 있습니까?

이 내용을 확인하려면 CUDA 프로파일 러 중 하나를 사용하십시오. How Do You Profile & Optimize CUDA Kernels?

어떻게 이론적으로 CUDA의 최대 처리량을 계산할 수 있습니까?

위의 계산은 아키텍처와 약간 다르며 잘못 이해되기 쉽습니다. 칩의 사양에서 숫자를 확인하는 것이 좋습니다. 위키피디아의 테이블은 this one, for the GTX500 cards입니다. 예를 들어, 표에서 볼 수 있듯이 GTX580의 이론적 최대 대역폭은 192.4GB/s이고 계산 처리량은 1581.1GFLOP입니다.

맞습니까? CPU의 GFLOPS와 GPU의 GFLOPS와 GFLOPS를 비교하면 속도가 그 이론적 인 투명한 성능입니까?

GPU의 이론적 피크 GFLOP 수를 CPU의 해당 숫자와 직접 비교할 수 있는지 질문하고 있습니다. 이 숫자를 비교할 때 고려해야 할 몇 가지 사항을

  • 이전 GPU는 배정 밀도 (DP) 부동 소수점 만 단 정밀도 (SP)를 지원하지 않았다.

  • DP를 지원하는 GPU는 SP와 비교하여 성능이 크게 저하됩니다. 위에서 인용 한 GFLOP 번호는 SP를위한 것입니다. 반면에 CPU에 대해 인용 된 숫자는 종종 DP 용이며 CPU에서 SP와 DP의 성능 간에는 차이가 적습니다.

  • CPU 지수는 SIMD (단일 명령어, 다중 데이터) 벡터화 명령어를 사용할 때만 달성 할 수있는 속도 일 수 있으며 일반적으로 이론적 인 최대 값에 접근 할 수있는 알고리즘을 작성하는 것은 매우 어렵습니다. 어셈블리에서). 가끔씩 CPU 따옴표는 다양한 유형의 명령어를 통해 사용할 수있는 모든 컴퓨팅 리소스를 결합한 것으로서, 동시에 모두 활용할 수있는 프로그램을 작성하는 것은 사실상 불가능합니다.

  • GPU에 대해 인용 된 요율은 GPU를 포화시킬 수있는 충분한 병렬 작업이 있고 알고리즘이 대역폭에 연결되어 있지 않다고 가정합니다.

+0

감사합니다. Roger. 귀하의 의견은 나를 위해 좋은 것입니다. –

+0

추가 질문이 있습니다. 가정하자 CPU : 2.8GHz의 1 개 코어 GPU : 1.6GHz의 384 코어 (GTX 560 티 사양)이 예에서 , CPU의 예상 성능은 2.8GHz의 X 1 개 코어 = 2.8GHz의 · 코어 GPU의 예상 성능은 0.8GHz x 384 코어 = 307.2GHz * 코어 이 계산은 유효합니까? –

+2

GHz 단위로 성능을 측정 할 수 없습니다. 이론적 인 성능을 찾으려면 각 클럭 사이클에서 CPU/GPU가 수행 할 수있는 작업을 찾아야합니다. 앞서 언급 한 고려 사항은 얻을 수있는 성과에 영향을 미칩니다. 예를 들어 인텔 샌디 브릿지의 성능을 살펴보면 명령 당 8 회의 SP 작업을 수행 할 수있는 AVX라는 명령 세트가 있다는 것을 고려해야합니다. –

3

선호되는 성능 측정은 경과 시간입니다. GFLOP은 비교 방법으로 사용될 수 있지만 명령어 세트, 컴파일러 코드 생성 및 FLOP 계산 방법의 차이로 인해 컴파일러와 아키텍처를 비교하는 것이 종종 어렵습니다.

가장 좋은 방법은 응용 프로그램의 성능을 시간 측정하는 것입니다. CUDA 코드의 경우 출시 당 발생할 모든 코드의 시간을 정해야합니다. 여기에는 메모리 복사본과 동기화가 포함됩니다.

Nsight Visual Studio Edition과 Visual Profiler는 각 작업을 가장 정확하게 측정합니다. Nsight Visual Studio Edition은 이론적 인 대역폭 및 각 장치에 대한 FLOP 값을 제공합니다. 또한 달성 된 FLOPs 실험을 사용하여 단 정밀도와 배정도 모두에 대해 FLOP 수를 캡처 할 수 있습니다.

+0

경과 시간을 사용하여 CPU 및 GPU의 성능을 확인합니다. 제 질문은 그들의 차이점은 CPU와 GPU 사이의 10 배입니다. 그러나 10 배 (속도)가 최고의 성능이라고 말할 수 있습니까? 예, 그렇다면 왜? 아니오면, 왜? 그게 내 질문이다. –

관련 문제