Страница 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 не пересоздается?

Кстати, вертикальную синхронизацию для строгости замеров отключили?