2010-11-24 2 views
4

CUDA 또는 OpenCL 코드의 알고리즘이 일반 단일 프로세서 코어에 비해 얼마나 빨라 집니까? (알고리즘이 CPU 및 GPU 대상 모두에 대해 작성되고 최적화됨을 고려할 때).CUDA 또는 OpenCL의 CPU 성능 비교 속도를 벤치 마크 할 수 있습니까?

그래픽 카드와 CPU에 달려 있지만 NVIDIA와 Intel i7 프로세서 중 가장 빠른 GPU 중 하나라고합니다.

그리고 알고리즘 유형에 따라 다르다는 것도 알고 있습니다.

엄격한 대답은 필요하지 않지만 다음과 같은 경험이있는 예제가 있습니다 : 배율 부동 소수점을 사용하는 이미지 조작 알고리즘의 경우 및 픽셀 당 10 작업이 처음에는이 하드웨어를 사용하여 5 분이 걸렸습니다.

+2

너무 많이 알려지지 않은 경우 : 빠르며 빠름 .... –

+0

나는 질문을 변경하여 "아니오, 불가능합니다"또는 "예, 이런 종류의 작업을 수행하는 벤치 마크 제품군이 있습니다. 비교 "등 – Roalt

답변

9

귀하의 질문은 지나치게 광범위하며 답변하기가 어렵습니다. 또한 GPU에서는 소수의 알고리즘 (많은 공유 상태를 처리하지 않는 알고리즘) 만 실행 가능합니다.

그러나 나는 당신이 주장에 대해 비판적이 되길 바랍니다. 나는 이미지 프로세싱을하고 있고 그 주제에 관한 기사를 많이 읽었지만 GPU의 경우 입력 데이터를 GPU에 업로드하고 결과를 주 메모리에 다시 다운로드하는 시간은 이 아니며 계산에 포함 된이 아닙니다. 요인.

이 값이 중요하지 않은 경우 (크기가 작거나 두 번째 단계 계산이 더 크기 때문에 결과가 줄어들 경우) 일반적으로 결과와 초기 데이터를 전송해야하는 경우가 있습니다.

업로드/다운로드 시간만으로 메인 CPU가 계산을 수행하는 것보다 길기 때문에 청구 된 플러스를 마이너스로 바꾸는 것을 보았습니다.

다른 GPU 카드의 결과를 결합하는 것과 거의 같은 일이 적용됩니다.

업데이트 최신 GPU는 핑퐁 버퍼를 사용하여 업로드/다운로드하고 동시에 계산할 수있는 것 같습니다. 그러나 경계 조건을 철저히 점검하라는 권고는 여전히 유효합니다. 거기 밖으로 많은 회전이있다.

+1

감사합니다. 업/다운로드에 대해 언급하는 것은 가치가 있습니다. 그리고 그것이 너무 광범위하다는 대답을줍니다. – Roalt

+0

그래, 나는 업/다운로드가 CPU에서의 처리보다 느리다는 것을 확인할 수 있습니다. 하지만 고려해야 할 또 다른 사항은 OpenCL을 CPU 장치에서 사용하여 여러 개의 프로세서 및 벡터 명령어 (SSEx)를 매우 간단하게 사용할 수 있다는 것입니다. OpenCL에서 일부 이미지 처리 기능을 구현하고 CPU에서 실행합니다. (추가 플러스 : CPU에서 OpenCL을 통해 Java에서 SSE 사용) – fho

0

2 배에서 400 배 사이의 수치를 보았습니다. 중급 GPU가 배정도 계산에서 고역 CPU와 경쟁 할 수 없다는 것도 알고 있습니다. 8 코어 Xeon의 MKL은 300 달러 GPU의 CULA 또는 CUBLAS보다 빠릅니다.

OpenCL은 일화에서 CUDA보다 훨씬 느립니다.

+3

수치는 0.1 배에서 400 배까지입니다.GPU는 모든 작업에 적합하지 않으며 잘 최적화 된 알고리즘조차 실제로 느릴 수 있음을 인식하는 것이 중요합니다. (낮은 계산 밀도, 큰 데이터 세트, 낮은 지역 참조, 큰 상호 의존성, 다양한 제어 흐름) . –

+1

OpenCL은 현재 CUDA와 거의 비슷한 수준의 성능을 제공합니다. 정확히 놀랄 일도 아니며 구조적으로 매우 유사하며 심지어 구현이 많이 공유됩니다 (예 : PTX IR). 또한 OpenCL은 기본적으로 CUDA 이상의 성능에 비해 정확함을 선호합니다. – dietr

1

OpenCL에 대한이 video introduction은 첫 번째 또는 두 번째 에피소드 (내가 기억하지 못하는)에서 질문에 대한 좋은 대답을 제공한다고 생각합니다. 제 생각에 그것은 첫 번째 에피소드의 끝 부분에 있었던 것 같습니다.

일반적으로 문제를 "병렬 처리"할 수있는 정도에 따라 다릅니다. 그래픽 카드에 데이터를 복사하는 데 시간이 걸리기 때문에 문제 크기 자체도 하나의 요소입니다.

1

귀하의 질문은 일반적으로 답변하기가 어렵습니다. 정확하거나 공평한 답변을 제공하기 어렵게 만드는 여러 가지 변수가 있습니다.

특히 알고리즘의 선택 2) 하드웨어의 상대적 성능 3) 컴파일러 최적화 능력 4) 구현 언어 선택 5) 알고리즘 구현 효율 5) 모두를 비교하고 있습니다.

예를 들어 GPU와 CPU에서 서로 다른 알고리즘이 바람직 할 수 있습니다. GPU로 또는 GPU와의 데이터 전송은 타이밍에서도 고려되어야합니다.

AMD는 CPU 및 GPU에서 실행되는 OpenCL 코드에 대해 OpenCL 성능에서 사례 연구 (실제로는 여러 개)를 수행합니다. Here은 희소 행렬 벡터 곱셈에 대한 성능 결과가있는 행렬입니다.

0

Oak Ridge National Lab과 Georgia Tech의 SHOC (Scalable Heterogeneous Computing)라는 새로운 벤치 마크 슈트에는 OpenCL과 CUDA 구현이 포함되어 있습니다. 스위트 룸은 http://bit.ly/shocmarx에서 다운로드 할 수 있습니다. 즐겨.

1

이것은 알고리즘과 구현이 얼마나 효율적인지에 달려 있습니다.

전반적으로 GPU가 CPU보다 계산 능력이 뛰어나다는 것이 합리적입니다. 따라서 상위 경계는 상단 GPU의 이론적 인 GFlops 등급을 상단 CPU로 나누는 것입니다. 이론적 인 메모리 대역폭에 대해서도 비슷한 계산을 할 수 있습니다.

예를 들어, GTX580의 경우 1581.1 GFlops와 i7 980XE의 경우 107.55 GFLOPS입니다. GTX580의 정격은 단 정밀도입니다. 페르미 클래스 비 테슬라가 배정 밀도 등급을 얻으려면 4 배로 줄여야한다고 생각합니다. 따라서이 경우 대략 4 배가 될 것입니다. 당신이 더 잘 할 (또는 훨씬 더 큰 속도 향상을 주장 결과를 참조) 이유에

주의 사항 : 데이터가 카드에 한 번

  1. GPU는 CPU보다 메모리 대역폭을 가지고있다. 가끔 메모리 바인딩 알고리즘은 GPU에서 잘 수행 할 수 있습니다.

  2. 너가 광고 한 대역폭보다는 잘하는시키는시킬 수있는 캐시 (짜임새 기억 등등)의 똑똑한 사용.

  3. Marco가 말했듯이 전송 시간은 포함되지 않았습니다. 필자는 개인적으로 항상 그러한 작업을 내 작업에 포함 시켰기 때문에 모든 데이터가 GPU에 들어있는 반복 알고리즘에서 가장 큰 속도 향상을 보았습니다 (저는 중급 CPU에서 300 배 이상을 중개 GPU로 여기에서 개인적으로 얻었습니다).

  4. 사과를 주황색으로 비교합니다. 최상위 GPU와 저급 CPU를 비교하는 것은 본질적으로 불공정합니다. 반박은 하이 엔드 CPU가 하이 엔드 GPU보다 훨씬 많은 비용이 든다는 것입니다. GFlops/$ 또는 GFlops/Watt 비교를하면 GPU에 훨씬 유리하게 보일 수 있습니다.

0
__kernel void vecAdd(__global float* results) 
{ 
    int id = get_global_id(0); 
} 

이 커널 코드는 10 밀리 초에 새로운 60 $ R7-240 GPU에 16M 스레드를 생성 할 수 있습니다.

이것은 10 나노초 단위로 16 개의 스레드 생성 또는 컨텍스트 스위치와 동일합니다. 140 $ FX-8150 8 코어 CPU 타이밍이란 무엇입니까? 코어 당 50 나노초당 1 스레드입니다.

이 커널에 추가 된 모든 명령은 분기를 만들기 전까지 GPU에 유리합니다.