2012-03-23 6 views
1

의 OpenCL 1.1을 사용하여 소수를 찾기위한 program 다음과 같은 기준을 주었다GPU뿐만 아니라 CPU에서도 거의 동일한 사용자 시간을 사용하는 프로그램 실행?

장치 : CPU

실시간 : 약. 3 초 Usertime : approx. 32 초

장치 : GPU

실시간 - 약. 37 초 Usertime - approx. 32 초

GPU로 실행하는 사용자 시간이 CPU의 사용자 시간보다 적지 않은 이유는 무엇입니까? 데이터/작업 병렬화가 발생하지 않습니까?

시스템 사양 : 두 개의 ATI 라데온 5970 그래픽 카드 + 인텔 코어 i7 프로세서 (12 개 코어)

+0

i7에 12 개의 코어가 있습니까? 난 당신이 6 코어 (12 스레드)까지 얻을 수 있다고 생각, –

답변

1

커널이 오히려 비효율적이며 64 비트에 CentOS 5.3 시스템은 당신이 생각하는 아래 조정 된 일이있다. 컴퓨터가 더 잘 돌아가는 이유는 ...

  1. 알고리즘을 사용하면 작업 항목의 실행 시간이 달라집니다. 테스트 된 숫자가 커질수록 더 오래 걸릴 것입니다. gpu의 작업 그룹은 모든 항목이 완료 될 때까지 완료되지 않고 일부 하드웨어는 마지막 항목이 완료 될 때까지 유휴 상태로 남습니다. cpu에서는 커널 항목을 반복하는 루프처럼 동작하므로 각 항목을 계산하는 데 필요한주기의 차이가 성능에 큰 영향을 미치지 않습니다.
  2. 'A'는 커널에서 사용하지 않습니다. 사용하지 않으면 복사해서는 안됩니다. 당신이 A [i]를 테스트하기를 원하는 것처럼 보입니다.

나는 GPU가 FFT 기반의 소수 계산이나 체 알고리즘에서 훨씬 뛰어나다 고 생각합니다.

{ 
    int t; 
    int i = get_global_id(0); 
    int end = sqrt(i); 

    if(i%2){ 
     B[i] = 0; 
    }else{ 
     B[i] = 1; //assuming only that it should be non-zero 
    } 
    for (t = 3; (t<=end)&&(B[i] > 0) ; t+=2) { 
     if (i % t == 0) { 
      B[ i ] = 0; 
     } 
    } 
} 
관련 문제