Zum Inhalt springen
Unity Burst-Beschleunigung: Beispielcode für direkten Aufruf

Unity Burst-Beschleunigung: Beispielcode für direkten Aufruf

2024-11-05 06:20

Es gibt nur wenige Burst-Dokumentationen und Beispiele. Neben der Job-basierten Aufrufmethode kann Burst auch direkt aufgerufen werden.

Hier ist ein Beispielcode, der UV-Koordinaten für alle Vertices einer Kugel generiert. Die Verwendung von Burst beschleunigt dies um etwa 50%.

using System.Runtime.CompilerServices;
using Unity.Burst;
using Unity.Mathematics;

[BurstCompile]
public static class ParallelMethods
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    [BurstCompile]
    public static unsafe void GenUVs([NoAlias] in float3* vertices, [NoAlias] float2* uvs,
        int count)
    {
        for (var i = 0; i < count; i += 1)
        {
            // Unity.Burst.CompilerServices.Loop.ExpectVectorized(); Ungültig

            var p = vertices[i];
            var longitude = math.atan2(p.z, p.x);
            var latitude = math.asin(p.y);
            uvs[i].x = longitude / math.PI2 + 0.5f;
            uvs[i].y = latitude / math.PI + 0.5f;
        }
    }

Die direkte Aufrufmethode ist wie folgt:

void Update()
{
    UVs = new Vector2[vertices.Length];
    unsafe
    {
        fixed (Vector3* vts = vertices)
        {
            fixed (Vector2* uvs = UVs)
            {
                ParallelMethods.GenUVs((float3*)vts, (float2*)uvs, vertices.Length);
            }
        }
    }
}

Das [NoAlias] Attribut teilt Burst mit, dass dieser Zeiger keinen Überlapp mit anderen Zeigern hat und daher sicher vektorisiert werden kann. Bei Verwendung von NativeArray wird dies automatisch erkannt und ist nicht nötig. Da hier eigene Zeiger verwendet werden, ist es ratsam, es hinzuzufügen.

Die Generierung vektorisierter Codes durch Burst unterliegt vielen Einschränkungen und die Parallelisierungsmenge ist gering. Es wird empfohlen, stattdessen Compute Shader zu verwenden, was eine weitere Beschleunigung um 50% ermöglichen kann.

Zuletzt bearbeitet
hugo-builder
hugo-builder · · 自动翻译 about.md 2... · 248520b
Weitere Mitwirkende
...