![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.06.2013
Сообщений: 14
|
![]()
Выполняю задачу, требуется произвести вычисления, настолько быстро, насколько это позволяют ресурсы системы, пусть даже в ущерб всем остальным процессам.
При анализе производительности обратил внимание на следующую особенность. Как правило участки кода выполняются за более-менее одинаковое время, однако, периодически происходят непонятные мне задержки, достаточно длительные. Я попытался сделать упрощенную модель программы, чтобы показать, то, что я имею в виду. В программе итеративный процесс, на каждой итерации длинный внутренний цикл, имитирующий вычисления. Далее, на каждом цикле запоминаем время окончания вычисления. После этого находим продолжительность каждой итерации. Находим среднее время итерации. После чего ищем итерации, продолжительность которых более чем в три раза выше средней и выводим их. Если посмотреть на продолжительность итераций, то в большинстве случаев они практически одинаковые (порядка 70 мкс в моем случае).Но есть итерации,которые более чем в 8 раз больше среднего. Следует отметить также, что процессор во время выполнения программы загружается где-то процентов на 13%. Т.е. свободных ресурсов процессора - "выше крыши", процессор используется неэффективно, и программа может быть выполнена гораздо быстрее.Пробовал увеличивать приоритет процесса и потока до максимальных - эффекта практически нет. Вопросы: 1. Из-за чего происходят большие периодические задержки в выполнении программы, и как от них избавится ? 2. Почему процессорное время используется неэффективно, как задействовать все ресурсы процессора для выполнения программы ? Код:
|
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]() Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 25.06.2013
Сообщений: 14
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
1. Из-за чего происходят большие периодические задержки в выполнении программы, и как от них избавится ?
--- Да никак, это сборщик мусора включается в работу. Хотя можно попробовать аллоцировать меньше объектов, тогда работы для GC будет куда меньше. 2. Почему процессорное время используется неэффективно, как задействовать все ресурсы процессора для выполнения программы ? --- Выполнять в несколько потоков, тогда больше ядер будет задействовано. Мелкие советы: 1) При создании списка ЗАРАНЕЕ укажите его размер, он вам известен. Это предотвратит многократное копирование данных внутреннего масива в листе и создание новых массивов (см. внутреннее устройство List<T>) Код:
2) "sw.ElapsedTicks * 0.1" - глупое умножение, пустая трата времени. Оно ничего не дает, а выполняется на каждой итерации 3) Все тесты должны выполняться в собранной в режиме Release программе со всеми включенными оптимизациями, и ни в коем случае не в режиме отладки в VS. 4) Самое важное: посмотрите хорошую лекцию о том, как ПРАВИЛЬНО выполнять оценку производительности приложений. https://www.youtube.com/watch?v=RL21wPsiy3o и почитайте про методы оптимизации http://habrahabr.ru/post/165729/
Благодарить в репутацию. Проклинать — туда же
![]() Последний раз редактировалось Luuzuk; 21.12.2015 в 13:10. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 25.06.2013
Сообщений: 14
|
![]()
Да, спасибо. Эту статью я тоже читал ранее. Вот, в частности в этой статье написано, что слишком много потоков это может быть тоже вредно из-за временных затрат на переключения контекста. Кто-нибудь сталкивался с такой проблемой ?
|
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]() Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 25.06.2013
Сообщений: 14
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
при курсе 1 к 1 обычно все норм. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при выполнении программы | crymchanin | Общие вопросы C/C++ | 8 | 30.01.2013 15:37 |
ошибка при выполнении программы | ST@LKER | Общие вопросы C/C++ | 8 | 03.12.2011 22:38 |
Ошибка при выполнении программы | Гурам | Общие вопросы Delphi | 1 | 18.11.2010 18:53 |
При выполнении программы ошибка. | Cyber | Помощь студентам | 12 | 02.10.2010 17:16 |
Ошибки при выполнении программы | grustniy | Общие вопросы Delphi | 2 | 04.09.2010 07:19 |