문제

나는 흥미를 알고 있는 경우 일반적인 알고리즘(정렬,검색,그래프 등) 포팅되었 OpenCL(또는 GPU language),그리고 어떻게 성능과 비교하여 동일한 알고리즘에 의해 실행됩니다.저는 특별히 관심있는 결과에서(번호).

감사합니다!

도움이 되었습니까?

해결책

거기 있습니다 꽤 많은 샘플 Nvidia의 웹 사이트에서 이런 종류의 것. 분류와 같은 일부는 효율적인 병렬 처리를위한 특수 알고리즘이 필요하며 단일 코어의 비 스레드 알고리즘만큼 효율적이지 않을 수 있습니다.

다른 팁

GPU는 소규모 작업 세트를 매우 잘 수행하고 고도로 병렬화하도록 설계된 고도로 전문화 된 하드웨어입니다. 이것은 기본적으로 산술 (특히 단일 정밀 플로팅 포인트 수학입니다. 최신 GPU는 이중 정밀도로 잘 작동합니다). 따라서 특정 알고리즘에만 적합합니다. 정렬이 해당 범주에 적합한 지 확실하지 않습니다 (일반적으로 일반적으로).

보다 일반적인 예는 금융 상품 가격, 대량의 매트릭스 수학 및 심지어는 암호화 패배 (무자비한 힘에 의해). 그것은 말하면서, 나는 발견했다 하이브리드 알고리즘을 사용한 빠른 병렬 GPU 분류.

일반적으로 인용 된 또 다른 예는입니다 nvidia gpu에서 seti@home을 실행합니다 그러나 그것은 사과를 오렌지와 비교하고 있습니다. GPU의 작업 단위는 CPU가 일반적으로하는 것과 비교하여 다르고 매우 제한적입니다.

살펴보십시오 추력:

스러스트는 C ++ 표준 템플릿 라이브러리 (STL)와 유사한 인터페이스가있는 병렬 알고리즘의 CUDA 라이브러리입니다. Thrust는 개발자 생산성을 크게 향상시키는 GPU 프로그래밍을위한 유연한 고급 인터페이스를 제공합니다.

GPGPU에 인용 된 성능 수에 대해 조심하십시오. 많은 사람들이 CPU에서 GPU로 입력 데이터를 가져 오는 데 필요한 전송 시간과 출력 데이터를 다시 가져 오는 데 필요한 전송 시간을 고려하지 않는 인상적인 숫자를 게시하는 것을 좋아합니다.

이미지 크기 조정해야 하는 일반적인은 많은 웹사이트에 받아들이는 이미지 업로드되어 있습니다.

크기 조정 2600ish x2000ish2 메가바이트 jpeg 이미지(을 512×512)했 23.5 밀리초 C#에서는 절대 가장 낮은 품질의 옵션과 가장 가까운 이웃 샘플링입니다.사용하는 기능이었다 graphics.DrawImage() 기반으로 하나입니다.CPU 사용량 또%21.5.

점점"rgba 바이트 배열의"추출 C#측에게 보내는 GPU 및 크기 조정에 GPU 얻는 결과로 이미지했다 6.3 밀리초 및 CPU 사용되었%12.7.이와 함께%55 저렴 gpu 으로 320 코어 있습니다.

만 3.73X 속도 합니다.

을 제한하는 요인은 여기에 보내고,추출한 20MB rgb 데이터(jpeg 이 2 메가바이트!) 을 의미합니다.는 시간이 많이 소요되는 부분은 거의 90%의의 총 시간은 포함하여 C#측 바이트 배열로 추출!그래서 나는 양 있는 것에 대해 30X 고속화에서 최소하는 경우 추출 부분에서 할 수 있습니다 GPU too.

30X 이 나쁘지 않다.

할 수 있는 다음 파이프라인을 추출하는 계층으로 크기를 조절층을 숨기는 메모리로 복사 대기 시간을 더 많은 속도!이 될 수 있습 40X-50X.

다음의 질을 증가하는 샘플링(와 같은 바이 큐빅을 대신의 가장 가까운 이웃 사람),당신은 더 많은 이점에 GPU 측.추가 5x5Gaussian 필터가 추가 유 0.77milliseonds.CPU 얻을 것이 몇 가지 더 높은 시간에 최고의하는 경우에는 특히,Gaussian 필요한 매개 변수보다는 다른 C#.Net 구현합니다.


는 경우에도 만족스럽지 않은 속도 비율은,오프로드 GPU 고 무료로"중핵"CPU 에서는 여전히 유리를 위한 추진상 작동하는 서버입니다.

지금 추가 사실의 GPU 전력 소비 수준(30W 대 125W 이 예에서),이것은 훨씬 더 유리하다.


CPU 를 거기에서 승리

 C[i]=A[i]+B[i]

벤치마크하면서 실행에 최적화된 코드고 당신은 여전히 오프로드 반의 배열을 GPU 및 완료 빠르게 사용하여 CPU+GPU 에서 동일한 시간입니다.


GPU 가 내장되지 않을 위한 비 균일한 작동합니다.Gpu 깊은 파이프라인 그렇게 서 있는 후 실속 분기 때문에,너무 오래 걸립니다.또한 SIMD 형 하드웨어 힘을 같은 일에 모든 작업 항목에습니다.할 때 항목은 다른 것보다는 그룹,그것은 잃는 트랙을 추가합에 거품 전체 SIMD 파이프라인 또는 단순히 다른 사람을 기다리는 동기화점이다.그래서 brancing 모두에 영향을 미치는 깊고 넓은 파이프라인 분야 그것도보다 느리게 CPU 에 완벽하게 혼란 조건입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top