Страница 1 из 1
Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 18:10
deeffoora
Подскажите что я неправильно понимаю?
Значит, делаю замер скорости участка кода, используя класс StopWatch. При небольшом количестве итераций в цикле (~700) затраченное время 5мс. В статистике ~70 кадров, время на кадр ~ 13 мс. Далее значительно увеличиваю количество итераций в цикле (~40тыс.). Затраченное время 45мс (что тоже удивительно, должно как бы быть в десятки раз больше, а не в десять раз, но вопрос не в этом). А вот в статистике 1,3 кадра, время на кадр ~800мс.
Куда делись ~750мс?
Может таймер врать?
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 18:42
DbIMok
код, скриншоты?
deeffoora писал(а):При небольшом количестве итераций в цикле (~700) затраченное время 5мс
цикл у вас в одном кадре? тогда при чем тут статистика с количеством кадров и временем на кадр? если не в одном, то что вы измеряете?
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 19:49
deeffoora
Перебор двумерного массива в каждом кадре
Используется csharp
var c = new TSUtility.CodeTimer("time");// Вкл. таймера
int index = 0;
float weight = int.MaxValue;
for (int i = 0; i <= DJMatrix.GetUpperBound(0); i++)
{
float current_weight = 0;
for (int j = 0; j <= DJMatrix.GetUpperBound(1); j++)
if (ListUnits[j].activeSelf)
current_weight += weight_matrix[DJMatrix[i, j].i, DJMatrix[i, j].j];
if (current_weight < weight)
{
weight = current_weight;
index = i;
}
}
c.Dispose();//Выкл. таймера
Скрины.
В первом варианте замера размер массива 5040х7. Таймер намерял на участок кода 5 - 6мс.
https://yadi.sk/i/hZvCweCNrsKspВо втором варианте замера размер массива 40320х8. Таймер намерял на участок кода 55 - 60мс.
https://yadi.sk/i/2HGMwfLPrsKqZТо есть, в десять раз увеличилось время обработки. Это логично. А вот если обратить внимание на STAT, то тут разница в рендеринге кадров в семьдесят раз!
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 19:57
DbIMok
на Stats внимание не обращайте
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 20:34
deeffoora
Да, я бы и рад. Но у меня напрочь замораживается юнити. Камерой не могу двинуть. Такое впечатление, что там не один кадр в секунду, а 0,01. Завершаю юнити только через диспетчер задач, в итоге.
Изначально я хотел размазать эти процедуры в корутинах, так как они кушают много, как видно. Решил попрофилировать, чтоб понять какими порциями размазывать, чтоб не мешать в кадрах выполняться первостепенным задачам. И натолкнулся на такое непредсказуемое поведение.
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 21:18
Cr0c
КМК, из-за разницы производительности компов эту штуку надо динамически вычислять на тестовом прогоне с хаком от оптимизации компилятора.
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 21:23
DbIMok
задача похожа на чисто вычислительную, не связанную с элементами движка. значит ее можно вынести в отдельный поток.
Re: Замеры скорости выполнения участка кода
Добавлено:
20 май 2016, 22:21
deeffoora
Да, вы правы. Это чисто вычислительная задача. Вычисляются некие подмножества множеств. Можно и в потоке это делать. И, по-поводу динамического вычисления порций, тоже верно. Это сделаю как профилирование по корутинам пойдет нормально. Пока коряжится, но постепенно чего-то уже вырисовывается.
Re: Замеры скорости выполнения участка кода
Добавлено:
21 май 2016, 09:28
Cr0c
Корутины в основном потоке работают же, а отдельный поток разгрузит основной, что повысит фпс даже при высокой нагрузке.
Re: Замеры скорости выполнения участка кода
Добавлено:
16 июн 2016, 12:31
jetyb
Всяких там выделений\освобождений памяти между кадрами нет?
Массив DJMatrix не пересоздается?
Кстати, вертикальную синхронизацию для строгости замеров отключили?