我即将着手将我编写的程序转换为 CUDA,以希望提高处理速度。
现在显然我的旧程序一个接一个地执行了许多函数,我在主程序中将这些函数分开并按顺序调用每个函数。
void main ()
{
*initialization of variables*
function1()
function2()
function3()
print result;
}
这些函数本质上是串行的,因为函数 2 取决于函数 1 的结果。
好的,所以现在我想将这些函数转换为内核,并并行运行函数中的任务。
是否像以并行方式重写每个函数一样简单,然后在我的主程序中,一个接一个地调用每个内核?这比它需要的慢吗?例如,我可以让我的 GPU 直接执行下一个并行操作,而无需返回 CPU 来初始化下一个内核吗?
显然,我会将所有运行时变量保留在 GPU 内存上以限制正在进行的数据传输量,所以我是否应该担心内核调用之间的时间?
我希望这个问题很清楚,如果没有,请让我详细说明。谢谢。
这是一个额外的问题,以便我可以检查我的理智。最终这个程序的输入是一个视频文件,通过不同的函数,每一帧都会产生一个结果。我的计划是一次抓取多个帧(比如 8 个唯一帧),然后将我拥有的块总数除以这 8 个帧,然后块中的多个线程将对图像数据执行更多并行操作,例如向量加法,傅里叶变换等。
这是解决问题的正确方法吗?