私はCUDAで単純な素朴な文字列検索に取り組んでいます。大きなファイルのCUDA文字列検索、間違った結果
CUDAの新機能です。それは細かい小さなファイル(aprox〜1メガバイト)を動作させます。私は(メモ帳でCtrl + Aキー、Ctrl + C数回++)、これらのファイルが大きく行った後、私のプログラムの結果は
grep -o text file_name | wc -l
より(1 +程度%)高いそれは非常に単純な関数であるので、私はしないでくださいこれを引き起こす原因を知っている。私はより大きなファイル(〜500MB)で動作する必要があります。
カーネルコード(gpuCount
が__device__ int global variable
です):私はちょうどそれをホストして印刷するには、結果をコピーし、この後
int blocks = 1, threads = fileSize;
if (fileSize > 1024)
{
blocks = (fileSize/1024) + 1;
threads = 1024;
}
clock_t cpu_start = clock();
// kernel call
stringSearchGpu<<<blocks, threads>>>(cudaBuffer, strlen(buffer), cudaInput, strlen(input));
cudaDeviceSynchronize();
:
__global__ void stringSearchGpu(char *data, int dataLength, char *input, int inputLength){
int id = blockDim.x*blockIdx.x + threadIdx.x;
if (id < dataLength)
{
int fMatch = 1;
for (int j = 0; j < inputLength; j++)
{
if (data[id + j] != input[j]) fMatch = 0;
}
if (fMatch)
{
atomicAdd(&gpuCount, 1);
}
}
}
これは、main関数でカーネルを呼び出しています。
誰でもこの手伝いできますか?
おかげで、このMiroslavProcházkaポスト@私の元の問題 –
変更した、完全なコードで助けにはなりませんでした。 – zindarod
https://pastebin.com/3ubxXVhP –