2013-10-27 150 views
0

加速我的cuda內核時遇到問題。它看起來內核工作單線程。每個線程都在等待之前的線程。它不能並行工作。Cuda內核工作非常緩慢

這裏是我的內核(我修改對CUDA內核庫LibTom)

__global__ void kernel(char* BiExponent, int lines) 
{ 


    const int threadID = blockIdx.x * blockDim.x + threadIdx.x; 

    if(threadID<1000){ 


     mp_int BiNumber; //various from LibTom 
     mp_int RNumber; 
     mp_int ANumber; 
     mp_int MNumber; 
     mp_int TempNumber; 
     mp_init_device(&RNumber); 
     mp_init_device(&ANumber); 
     mp_init_device(&MNumber); 
     mp_init_device(&TempNumber); 
     mp_init_device(&BiNumber); 
     mp_read_radix_device(&RNumber, "100648686727131257488671170806992645347098870006145705670894593595064198763504906829344253213869592972491529868272101131220921074193778137252965944155929765587582637231372264910012095142603377767870875822235936330880194126549443874542394830706956638044950273189050162374717380508672959124318834975983480937576",10); 
     mp_read_radix_device(&ANumber, "39805067790951086730573861588172121787196543962580983242598202413750011891252460890446709601730030154661775311984755147556289281733978635511703976267279217024606927800989962204783456250825578178354787716873876536014210063984216741307040544888447847197648475195752689213083224036785420625437224428658490304276",10); 
     mp_read_radix_device(&MNumber, "129135516335051440235803237491679224882957576030599162234748304648924718545589827797866156951847154321645009878340207570056281485244329202363518578978799475118300745910542939512857296428327440920812107991347416747733387762031164387998805210106456861835748765549471962882426089437101578019500113090139371006775",10); 
     mp_read_radix_device(&TempNumber, "0",10); 
     char* cstr = new char[YDIM]; 
      for(int i=0; i<YDIM; i++){ 
       cstr[i] = BiExponent[(threadID*YDIM)+i]; 
      } 
     mp_read_radix_device(&BiNumber,cstr ,10); 
     mp_exptmod_device(&ANumber, &BiNumber, &MNumber,&TempNumber); //TEMP = (A^Bi)mod M 
     if(mp_cmp_device(&RNumber,&TempNumber)==MP_EQ){ // IF(TEMP==R) 
      printf("TRUE\n"); 
     } 
     mp_clear_device(&BiNumber); 
     mp_clear_device(&RNumber); 
     mp_clear_device(&MNumber); 
     mp_clear_device(&ANumber); 
     mp_clear_device(&TempNumber); 
     delete [] cstr;  
     //  printf("x = %d\n", threadID); 


    }} 

開始內核主持人:

kernel <<< 1024, 1 >>> (dev_Bi2dChar, lines); 

操作運行的1000個號碼:80。這是非常緩慢的,我不知道它是什麼時候的錯誤。 :/我需要一些提示,我應該如何加速這些應用程序。
kernel <<< 1024, 1 >>>

這真的是你想要的東西:

回答

1

您在使用時產生1個線程的1024塊?我建議用1024個線程創建1個塊:
kernel <<< 1, 1024 >>>

+0

'內核<<<1,1024> >>或<<<2,512> >>,<<<8,128> >>,...'不工作(/kernel.cu:4545碼= 30(cudaErrorUnknown)) –

+0

什麼是您的顯卡型號? – lolando

+0

我的卡是NVIDIA GeForce GT555M –