1 min read
25 Sep

Давайте представим, что у нас есть 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 _;
}
Comments
* The email will not be published on the website.