2017-11-05 9 views
0

OpenCL 순차 프로그램과 동일한 알고리즘으로 구성된 병렬 프로그램이 있습니다. 필자는 실행 시간 결과를 순차적으로 133000 밀리 초, 병렬로 17 밀리 초로 계산했습니다. 그래서 내가 133000/17 인 스피드를 계산할 때 7823을 스피드 업으로 얻습니다. 가능한 많은 속도를 낼 수 있을까요?Open CL speedup이 7000을 초과했습니다.

+0

프로그램이 수행하는 작업은 무엇입니까? 질문에 일부 코드 (예 : [MCVE])를 표시하십시오. ** 개선을 위해 ** 질문 **을 수정하십시오. –

+1

그건 정말 큰데 ... 제대로 완료되면 두 출력을 신중하게 비교 했습니까? –

+1

또한 질문에 어떻게 코드를 컴파일했는지 설명하십시오. 더 많은 세부 사항 (일부 코드, 컴파일 명령, 벤치마킹 프로토콜, 실제 하드웨어 및 컴파일러)이 없으면 질문이 너무 광범위합니다. 제발 ** ** 당신의 질문을 개선 ** –

답변

0

이러한 속도 향상은 발생할 수있는 (그러나 아주 큰 것, 나에게, 7823의 속도 향상은 의심스러운하지만 완전히 불가능 보이는, 예를 들어, these slidesthat을 참조하십시오 100 배 요인이 더 합리적인 것 같다.). 값 비싼 그래픽 카드는 몇 테라 플롭에서 작동 할 수 있다는 소문이 있습니다. 단일 코어는 기가 플롭스 만 제공합니다. 일부 특정 프로그램은 GPGPU에서 CPU보다 느리게 실행될 수 있습니다.

CPU 코드를 벤치 마크 할 때 컴파일러에서 최적화를 활성화해야합니다 (예 : gcc -O2GCC 이상으로 컴파일). 최적화 (예 : gcc -O0)가 없으면 CPU 성능이 느립니다 (예 : gcc -O0gcc -O2으로 얻은 이진수 사이의 3 배수 인수가 일반적 임).

BTW, cache 고려 사항은 CPU 성능에 중요한 요소입니다. 이를 고려하지 않고 숫자로 된 CPU 코드를 작성하면 매우 느릴 수 있습니다 (이상한 경우에는 locality of reference이 잘못되었습니다).

0

커널 함수에 문제가있어 실행되지 않은 경우 시간 결과가 정확하지 않습니다.