我是金属计算的新手,并试图围绕线程和群体的概念缠住我的思想。问题在于,大多数示例(如果不是全部)使用2D纹理作为一个示例,这完全不是我要做的。我正在尝试创建一个计算函数,该功能在一个缓冲区中取2点和几个浮子,并计算4个点并将其放在另一个缓冲区中:
: |--------Buffer1------| |-------Buffer2-----------|
f(point1, point2, [floats])=point1, point2, point3, point4
f is a function essentially involving some linear algebra with some multiplication
and addition. The most costly part being a sqrt operation used to normalize
the vector between point1 and point2. No branches in code.
我大致知道如何编写内核函数,但是我不知道如何为其分配线程和线程组,因为我不知道如何计算这种情况的潜在最佳量。
您可以根据需要分配线程和线程组,即以任何方式使用它们最有意义的逻辑。
弄清楚最佳线程和组是多少,可能是反复试验的。但是,一个很好的起点是要使用要计算的独特物品使用一个线程。
在您的情况下,每个f(point1, point2, [floats])
的一个线程似乎合理(这样一个线程将向输出缓冲区写4点)。但是您对您的函数f()
并不是很具体,因此也许分配线程的另一种方法更有意义。我没有足够的信息来提出一个很好的建议。
(注意:是 一个限制了您可以在一个组中使用多少线程。这取决于设备。因此,如果您需要更多的线程,则必须将它们拆分为分为多组。)