Итак, у меня есть этот метод, который требует применения большого количества преобразований на изображении. В целом мне нужно несколько разных операций, применяемых к тем же данным. В моем коде процессора я делаю все эти преобразования в одном цикле, но мне было интересно, как наилучшим образом применить его в cuda.Лучший способ обработки большого алгоритма на Cuda
Таким образом, в CPU У меня есть
loop 1
loop 2
loop 3
DO A LOT OF SMALL BUT INDEPENDENT OPERATIONS
end
end
end
Я использую резьбу на внешней петле с OpenMP и алгоритм ускоряется почти раз число потоков, поэтому очень paralelizable. Тем не менее, для очень больших изображений это может занять много времени, поэтому я решил, что могу использовать Cuda.
Так мне удалось избавиться от внешних петель: петля 1 и петля 2 и заменить каждый такт с один Cuda поток, но теперь я не уверен, что это лучший дизайн
Например, я пытался делать это
cuda_kernel{
loop 3
DO A LOT OF SMALL BUT INDEPENDENT OPERATIONS
end
}
Некоторые из этих операций имеют ветвление, а другие нет. Мой вопрос, если вы думаете, что лучше всего на Cuda, чтобы сделать это вместо
cuda_kernel 1{
loop 3
DO JUST FIRST OPERATION
end
}
cuda_kernel 2{
loop 3
DO JUST SECOND OPERATION
end
}
ETC
В этом случае каждое ядро будет значительно упрощается, но один будет называться после того, как другой последовательно и петля 3 будет повторяться для каждой операции.
Итак, что бы вы посоветовали рассчитать все сразу или сделать каждое ядро отдельно?
«Ядро вызова очень дорогостоящее с точки зрения времени выполнения»? На платформах, которые я использую, это около 10-15 микросекунд. – talonmies
Человек, 10-15 микросекунд все еще огромный (хотя я уверен в этом числе). Если вы думаете о тактовых частотах ядра 800 МГц, то 10us походит на 8000 тактов. Это много. Особенно, если ваше выполнение ядра занимает не так много времени, вы будете доминировать в вызовах ядра, чего не должно быть. – Bichoy
На самом деле ядра будут вызываться только один раз, поэтому я не слишком беспокоюсь об этом, будет 32 разных ядра, я могу полностью избавиться от цикла 2. Но цикл 3 в ядрах будет выполняться много раз, а не один раз, если я использую большое ядро. Поэтому мой вопрос, который, по вашему мнению, будет более эффективным. – Atirag