卸下倍數我應該從這個篩子代碼,這是在內核調用刪除的倍數,但我不知道如果我做正確。每次我進入超過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」。
任何人都可以幫助我嗎?
錯誤9上發射是無效的啓動配置。值爲20000000時,您的第一個內核啓動參數是20000000/256,它是78125,並且大於65535,這是cc2.0設備的限制。如果您使用的是cc3.0或更高版本的設備,請針對您設備的計算功能進行編譯,並且您可能能夠解決此問題。 –
是的,就是這樣 –