Поиск подстроки в строке

Возникла идея реализовать поиск подстроки в строке( с помощью Cuda), для этого выбрал алгоритм Бойера-Мура, 2 из 3 его идей(поиск совпавшего суффикса и стоп символов) распаралелятся легко(я так думаю), теперь вопрос как лучше поступить с поиском в обратном порядке на CPU возложить или как?
И ещё вопрос какой максимальный объем вычислительной мощности допускается использовать в потоке(допускается ли использовать цикли, какое количество операций можно делать..), чем это всё ограничивается. Просто поток это же мелкозернистый параллелизм , а насколько мелкий не удалось найти, буду очень благодарен за помощь, при удачном завершении программы выложу её код..

Forums: 

циклы допускаются (как и

циклы допускаются (как и почти все элементы языков С\С++),
макс. размер кернела: 2 млн. инструкций.
есть еще ограничения на размеры используемой памяти (shared - 16Кб и constant - 64Кб) на блок потоков.
но я так понял что мануал вы не до конца освоили, и то что я написал выше для вас будет не до конца ясно.

помимо этого есть чисто хардварные ограничения: объем глобальной памяти, пропускная способность шины, частота процессоров.

спасибо muxa, я это знаю

спасибо muxa, я это знаю может не правильно задал вопрос, но к примеру в одном потоке не логично будет запускать какое-то сложное вычисление(например шифрование данных AES 1024) его логично распределить на несколько потоков, мой вопрос был в том до какой степени производить деление на атомарные операции, ясное дело что в потоке лучше делать какие-то очень простые операции(+,-,*,/..), но если это невозможно например алгоритм только последовательный как тогда быть и насколько этот(алгоритм, фрагмент алгоритма) должен быть простым чтобы его можно было в потоке обработать, а не на проце?

"сложность" алгоритма тут ни

"сложность" алгоритма тут ни при чем.
как я уже сказал если алгоритм можно выразить на С, то с большой долей вероятности его можно реализовать на CUDA.
а скорость выполнения будет зависеть от того как вы распараллелите выполнение.

>>ясное дело что в потоке лучше делать какие-то очень простые операции(+,-,*,/..)
не совсем. чем больше математики (в т. ч. сложной, типа: sin, log, sqrt...) тем лучше все это переносится на CUDA (при условии возможности распараллелить алгоритм). здесь "лучше" = "производительнее".

>>насколько этот(алгоритм, фрагмент алгоритма) должен быть простым чтобы его можно было в потоке обработать, а не на проце
ограничения (о которых я писал в своем первом комментарии) тем не менее можно обойти.
например, если ваш CUDA-алгоритм использует много процессорных регистров и/или shared памяти, то можно изменить конфигурацию запуска кернела, уменьшив кол-во потоков в блоке, ибо ограничения выставляются целиком на блок.

Жду кода очень. Так как мне

Жду кода очень.
Так как мне он очень нужен.
Не могу правится с распаралеливанием.