2017-04-13 58 views
-2

卸下倍數我應該從這個篩子代碼,這是在內核調用刪除的倍數,但我不知道如果我做正確。每次我進入超過2000更大的價值,它給了我這個錯誤:在內核呼籲更好的性能

Prime Sieve v1.0 [CUDA]
computing prime numbers up to but not including 20000000
========= Program hit error 9 on CUDA API call to cudaLaunch
========= Saved host backtrace up to driver entry point at error
========= Host Frame:/usr/lib64/nvidia/libcuda.so [0x2eeda3]
========= Host Frame:./sieve_cuda [0x3b27e]
========= Host Frame:./sieve_cuda [0x2e34]
========= Host Frame:/lib64/libc.so.6 (__libc_start_main + 0xfd)
[0x1ed1d]
========= Host Frame:./sieve_cuda [0x2639]

這是我爲內核調用代碼:

static __global__ void SieveComputeKernel(const long top, bool array[]) 
{ 
    const int idx = threadIdx.x + blockIdx.x * blockDim.x; 
    if ((idx >= 2) && (idx * idx < top)) 
    { 
      int j = idx * idx; 
      while (j < top) 
      { 
      array[j] = false; 
      j += idx; 
     } 


    } 
    // ... //todo: remove multiples here 

} 

這是我的內核調用:

SieveComputeKernel<<<(sqrt_top + ThreadsPerBlock - 1)/ThreadsPerBlock, 
    ThreadsPerBlock>>>(top, array_d); 

其中ThreadsPerBlock是256和頂部是數字「2000000」。

任何人都可以幫助我嗎?

+3

錯誤9上發射是無效的啓動配置。值爲20000000時,您的第一個內核啓動參數是20000000/256,它是78125,並且大於65535,這是cc2.0設備的限制。如果您使用的是cc3.0或更高版本的設備,請針對您設備的計算功能進行編譯,並且您可能能夠解決此問題。 –

+0

是的,就是這樣 –

回答

1

上推出錯誤9是無效的啓動配置。 (您可以在the runtime API documentation或者在頭文件driver_types.h發現這一點)。

在2000萬的值,你的第一個內核啓動參數是二百五十六分之二千萬是78125,是大於65535,對於CC2.0設備的限制。

如果您使用的是cc3.0或更高版本的設備,然後針對您設備的計算能力進行編譯(例如nvcc -arch=sm_30 ...),並且您可能能夠解決此問題。 (這顯然是的情況下,基於所述評價。)