Давайте представим, что у нас есть 2 структуры:
public struct V3 { public float3 x; } public struct V4 { public float4 x; }
А теперь напишем джобу, которая перекладывает данные из одного массива в другой:
[BurstCompile] public struct MyJob : IJob { [ReadOnly] public NativeArray<V3/V4> source; public NativeArray<V3/V4> dest; public void Execute() { for (int i = 0; i < source.Length; ++i) { dest[i] = source[i]; } } }
Какой вариант джобы будет работать быстрее? Логика подсказывает нам, что V3, т.к. данных копировать нужно меньше, да и вообще размер будет намного меньше. Давайте разберемся же, что там получается на выходе: Для V3 варианта мы должны скопировать структуру значение за значением, т.е. 3 раза.
Для V4 варианта мы вроде должны скопировать 4 значения. Но тут вламывается векторизация и выходит, что вариант V4 будет работать примерно на треть быстрее, чем вариант V3. Но не расстраивайтесь, можно все исправить: (да, можно исправить разными способами)
public struct V3 { public float3 x; public float _; }
1 min read
0 Comments