Inessa 29 май 2017, 00:03
Скажите, а какие существуют метрики, чтобы я могла корректно сравнивать проделанные тесты?
Ведь задача оценки выигрыша от проделанной оптимизации многопараметрическая.
В моем исходном варианте на каждой инстанцированной монетке висел свой скрипт, который сам вращал ее без привлечения сторонних вычислительных усилий.
Сейчас же (в приведенном выше скрипте) в памяти необходимо хранить List<Transform> для каждой монетки и совершать с ним различные манипуляции.
Причем операции с доступом к элементам List<> считаются одними из самых медленных операций, что ставит под вопрос использования списков для нужных мне целей.
Я попыталась запустить у себя приведенный выше скрипт.
При этом мне потребовалось заменить
Transform tr = (Instantiate(prefab_coin, pos, Quaternion.identity)).transform;
на
Transform tr = (Instantiate(prefab_coin, pos, Quaternion.identity)) as Transform;
т.к. в скрипте возникла ошибка компиляции.
Я также заменила
trs[i].Rotate(Vector3.up, speed, Space.World);
на
trs[i].Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
т.к. мне нужно проверить самый тяжелый случай, когда вращение происходит по 3-м осям и мне необходимо использовать Time.deltaTime.
После осуществления всех этих манипуляций и запуска скрипта - префаб с монетками инстанцировался - произошло создание заданного количества монеток.
Но список List<> так и оказался незаполненным.
Соответственно в методе Update() у меня ничего не происходит - монетки не вращаются.
Поэтому сделать какие-либо выводы я не могу.
В связи с этим возникает еще несколько дополнительных вопросов.
1. Как исправить ситуации с учетом того, что, возможно, использование List<Transform> - не самый оптимальный вариант?
2. Как все-таки запустить этот тестовый скрипт, чтобы инстанцированные монетки вращались с использованием расчета только одного Transform?
3. Как можно корректно сравнить исходный и модифицированный вариант?
4. Какие метрики производительности для этого нужно использовать?
Насколько я понимаю, необходимо сравнивать не процентное соотношение, заключающееся в том, насколько использование исходного или модифицированного скрипта для расчета вращения монеток грузят процессор.
Нужно понимать насколько загружен процессор в общем для исходного и модифицированного вариантов.
Т.е. возможен, например, случай, когда исходный вариант тратит ресурсы процессора на 50% (условная цифра), а модифицированный вариант - на 75% (тоже условная цифра).
Хотя при этом в исходном варианте процентное соотношение вклада вычислительной нагрузки индивидуально вращающего монетку скрипта в общую нагрузку - 10%, а для модифицированного варианта с групповым вращением монеток - 1%.
Но выигрыша от модифицированного варианта все-равно нет, т.к. накладные расходы на хранение, обработку и манипуляцию данными в списке увеличили общую нагрузку на процессор, съели дополнительную оперативную память и т.д.
Я специально утрировала в данном примере цифры, чтобы была видна не очевидность того, что уменьшение процентного соотношения вклада модифицированного скрипта в общую нагрузку дает выигрыш в общей производительности.
5. Как с помощью такой метрик как FPS корректно провести оценку производительности (вычислительных затрат) при сравнении исходного и модифицированного вариантов скриптов, используемых для вращения монеток?