所以我有这个方法需要在图像上应用很多变换。总的来说,我需要对相同数据应用几个不同的操作。在我的 CPU 代码上,我在同一个循环中执行所有这些转换,但我想知道在 cuda 中应用它的最佳方法。
所以在 CPU 我有
loop 1
loop 2
loop 3
DO A LOT OF SMALL BUT INDEPENDENT OPERATIONS
end
end
end
我使用 openmp 在最外层循环上使用线程,该算法的加速速度几乎是线程数的几倍,因此它非常可并行化。尽管如此,对于非常大的图像,它仍然需要很长时间,所以我想我可以使用 Cuda。
所以我设法摆脱了最外面的循环:循环 1 和循环 2 并用一个 cuda 线程替换每个 cicle 但现在我不确定什么是更好的设计
例如,我尝试这样做
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。
那么,您会建议一次计算所有内容还是单独执行每个内核?