Ich bin sehr neu in Metal Computing und versuche, meine Gedanken um die Konzepte von Threads und Gruppen zu wickeln. Das Problem ist, dass die meisten, wenn nicht alle Beispiele, eine 2D-Textur als Beispiel verwenden, was absolut nicht das ist, was ich versuche zu tun. Ich versuche, eine Rechenfunktion zu erstellen, die in einem Puffer in 2 Punkten und ein paar Schwimmer nimmt und berechnet 4 Punkte und legt sie in einem anderen Puffer so:Wie bestimmt man die Thread-Gruppe und die Thread-Größe, die ich für Metal Vertex Compute verwenden sollte
|--------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.
Ich weiß ungefähr, wie die Kernel-Funktion zu schreiben, aber ich Ich habe keine Ahnung, wie man ihm Threads und Thread-Gruppen zuweist, weil ich nicht weiß, wie man eine potentiell optimale Menge für dieses Szenario berechnet.
Meistens müssen Sie sich nicht um Thread-Gruppen kümmern. Verwenden Sie einfach den Algorithmus, den Apple im Artikel [Berechnen von Threadgroup- und Grid-Größen] (https://developer.apple.com/documentation/metal/compute_processing/calculating_threadgroup_and_grid_sizes) anzeigt. Für den Fall, dass Sie einen 1D-Puffer verarbeiten müssen, betrachten Sie die "texture.height" aus den Beispielen als 1. –