0
int num = 0;
char tmp_string[32000];

if(l_length * lsize > 32000){
    if (l_length * lsize % 32000 == 0) {
        num = l_length * lsize / 32000;
    } else{
        num = l_length * lsize / 32000 + 1;
    }
    ...
    if ( (l_length * lsize) % num == 0) {
        size = l_length * lsize / num;
    } else{
        size = l_length * lsize / num + 1;
    }
} else {
    num = 1;
    size = l_length * lsize;
}

for (y = 0; y < num; y++) {
    if (size % lsize == 0) {
        tmp_size = size / lsize;
    } else {
        tmp_size = size / lsize + 1;
    }
    .....find the matched pattern code.....
}
.....find the matched pattern between divided string.....

此代码是在字符串中查找匹配模式的一部分。(KMP 算法)

我想一次只使用 32000 字节的字符串。

因此,如果字符串的大小大于 32000,我将它们拆分并计算“num”,即循环数。(例如,当大小为 64000 时,我必须运行该函数两次才能搜索整个字符串)

lsize 是线程号(实际使用openCL),l_length 是每个线程将搜索的分割字符串的大小。

问题是必须不搜索某些字符串,因为在分割功能期间丢失了大小。(例如,size = l_length*lsize/num && tmp_size = size/lsize)

我试图更改代码,但找不到每个线程的适当长度。(另一种用于查找分割字符串之间模式的代码已经存在。)

我该如何解决?

4

0 回答 0