我想了解使用CUDA在GPU上执行以下操作的一般方法。
我有一个算法可能看起来像这样:
void DoStuff(int[,] inputMatrix, int[,] outputMatrix)
{
forloop {
forloop {
if (something) {
DoStuffA(inputMatrix,a,b,c,outputMatrix)
}
else {
DoStuffB(inputMatrix,a,b,c,outputMatrix)
}
}
}
}
DoStuffA和DoStuffB是CUDA示例具有的简单可并行化的函数(例如执行矩阵行操作)。
我想做的是知道如何将主要算法“DoStuff”放到GPU上,然后在需要时调用DoStuffA和DoStuffB(它们并行执行)。即外部循环部分是单线程的,但是内部调用不是。
我看到的示例从一开始就似乎是多线程的。我假设有一种方法可以从外界调用单个基于GPU的方法,并让它自己控制所有并行位?
最佳答案
它取决于数据在for循环中相互之间的关系,但我大致会
这样,最大的问题是调用每个内核的开销。如果您的输入数据很大,那也不会太糟糕。