这是家庭作业,但由于标签被弃用我我指出这一点在这里...字符串匹配GPU CUDA错误
我使用CUDA,做了模式的strightforward匹配处理作业在一个字符串中。该文本文件包含1,000,000个字符(所有相同字符,但最后一个不同)和一个大小为100的模式(再次是所有相同的字符,最后一个字符不同),所以该模式应该位于文本。
我试图让它与10个线程一起工作,所以我设置了算法的起点。
blocksize设置为10,000,startPoint变量是线程ID(0-9)。
int i,j,k,lastI;
i=startPoint*blockSize;
j=0;
k=startPoint*blockSize; //may be -1...
int end;
end = ((startPoint+1) * blockSize) - patternLength; //may be -1
//*testchar = dev_textData[((startPoint+1) * blockSize) -1];
*testchar = dev_pattData[patternLength-1];
*testchar = dev_textData[textLength-1];
//*testchar = dev_textData[i+blockSize-1];
//*result = end;
//return;
while (i<=end && j<patternLength)
{
if (dev_textData[k] == dev_pattData[j]) //going out of bounds at the j i think...
{
k++;
j++;
}
else
{
i++;
k=i;
j=0;
}
}
if (j == patternLength)
{
*result = i;
*testchar = 'f';
}
else
{
*result = -1;
首先这里的程序似乎错误,用CUDA错误30,未知错误(我认为这是一个段错误也许?),但是当我改变
if (dev_textData[k] == dev_pattData[j])
到
if (dev_textData[k] == dev_pattData[j-1])
错误消失,但是因为我匹配最后一个字符算法无法正常工作。
我似乎无法弄清楚为什么j-1因为while循环边界而有所作为。
任何帮助/建议/指针将不胜感激。
谢谢
我不认为cuda错误30将是正常的seg故障。如果你用'cuda-memcheck'运行你的代码,你能发现失败案例中的任何东西('dev_pattData [j]')吗? –
有没有一个简单的方法来从VS程序做到这一点?我可以从发布的exe文件中生成吗? – user1089599
是的,你可以在Windows机器上做到这一点。你确实需要使用生成的可执行文件(而不是在VS中运行你的代码)。你可能不得不四处寻找'cuda-memcheck.exe'的安装位置,但Windows搜索应该能够为你找到它。 –