Давайте представим, что у нас есть 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 _;
}