如何确定我应该用于金属顶点计算的线程组和线程大小

时间:2017-12-26 22:38:40

标签: objective-c swift xcode metal

我是Metal计算机的新手,我正在尝试围绕线程和组的概念。问题是,大多数(如果不是全部)示例都使用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. 

我大致知道如何编写内核函数但我不知道如何为它分配线程和线程组,因为我不知道如何为这种情况计算潜在的最佳数量。

1 个答案:

答案 0 :(得分:0)

您可以根据需要分配线程和线程组,即以对您的逻辑最有意义的任何方式使用它们。

确定最佳线程数和组数是多少,可能会有点反复试验。但是,一个好的起点是每个要计算的独特事物使用一个线程。

在你的情况下,每个f(point1, point2, [floats])的一个线程似乎是合理的(这样一个线程会将四个点写入输出缓冲区)。但是你对函数f()并没有非常具体,所以也许用不同的方式来分配线程更有意义。我没有足够的信息来提出好的建议。

(注意: 是对单个组中可以使用的线程数的限制。这取决于设备。因此,如果您需要更多线程,则必须将它们拆分分成多个小组。)