カーネルコール内のこのシーブコードから倍数を削除するはずですが、正しく実行しているかどうかわかりません。私が20000000よりも大きい値を入力するたびに、それは私に、このエラーを与える:より良いパフォーマンスのためにカーネルコールで倍数を削除する
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で、topはその番号 "2000000"です。
誰でも私に助けてくれますか?
エラー9の起動時は無効な起動設定です。 20000000という値では、最初のカーネル起動パラメータは20000000/256で、78125であり、cc2.0デバイスの上限である65535よりも大きくなっています。 cc3.0以降のデバイスを使用している場合、デバイスのコンピューティング機能をコンパイルすると、この問題が発生する可能性があります。 –
うん、それだった –