int idx = blockDim.x*blockIdx.x + threadIdx.x;
if (idx <N-M)
{
for (int i = 0 ; i < M; i++)
{
t = (d*t + txt[idx + i])%q;
}
if ( p == t )
{
for (j = 0; j < M; j ++)
{
if (txt[idx+j] != pat[j])
break;
}
if (j == M)
{
cuPrintf("Pattern found at index %d \n", idx);
}
}
...............................................
}
Я обрабатываю файл в 20 мб.
Почему то я не могу запустить больше 2048 потоков, и это в сумме, не
важно на скольки блоках.
Видеокарта поддерживает 1024*1024*16 потоков и 65536*65536*65536
блоков.
И еще, код работает только в том случае, если вместо точек(в
коде),ставить какой либо cuРrintf.
А если не ставить, то от чего не пашет, не могу разобраться почему.
Заранее спасибо за помощь.
29 мая 2012 г., 2:40 пользователь Aspexs <alekse...@gmail.com> написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу CUDA.CS.MSU.SU.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу cudac...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу cudacsmsusu...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/cudacsmsusu?hl=ru.
>
Полный код нужен не за тем, чтобы на него полюбоваться, а чтобы его
запустить и увидеть ошибки, на которые Вы указываете :) Поэтому прошу
Вас представить такой тест, который будет 1) сразу полностью
собираться 2) воспроизводить ошибку.
Скорее всего ошибка в самом ядре. Можно было бы сказать точнее, если
бы Вы привели код ошибки. В Вашем коде статус ошибок CUDA-вызовов
вообще не проверяется, это очень плохая практика работы и очень
хороший способ надолго зависнуть на решении непонятных проблем.
- Д.
29 мая 2012 г., 11:29 пользователь Aspexs <alekse...@gmail.com> написал:
aspexs.cu(117): error: no operator "-=" matches these operands
operand types are: fpos_t -= int
29 мая 2012 г., 15:10 пользователь Aspexs <alekse...@gmail.com> написал: