Мы хотим выполнить несколько итераций (jobCount) и внутри каждой итерации еще по 128 итерации. Внутри всего этого мы хотим посчитать сумму из NativeArray input и положить в массив NativeArray arrSum:
for (int j = 0; j < jobCount; ++j) {
for (int i = 0; i < 128; ++i) {
var sum = arrSum[i];
sum += input[(j * 128) + i];
arrSum[i] = sum;
}
} Как видно из примера, массив input намного больше, чем arrSum. Мы думаем-думаем и решаем оптимизировать наш код. Получается примерно следующее:
for (int i = 0; i < 128; ++i) {
var sum = arrSum[i];
for (int j = 0; j < jobCount; ++j) {
sum += input[(j * 128) + i];
}
arrSum[i] = sum;
} Т.е. мы поменяли местами, т.к. и ежу понятно, что чем меньше мы обращаемся к массиву, тем быстрее должно работать.
Пример на самом деле плохой, но показывает нам, что нужно проверять код в Burst Inspector.
И да, первый вариант векторизуется и будет работать быстрее.