От чего зависит время выполнения программы

Вышеприведенное предложение побудило меня поэкспериментировать с фильтрацией плоского изображения. (Спасибо, Ричард). Я включил панель поиска в представлении, используя кнопку «Действие». (Функциональность ловушки панели поиска позволяет генерировать «результаты поиска», отфильтрованные по значению в строке поиска. Это работает только в том случае, если приложение является полнотекстовым индексом).

задан static_cast 20 January 2019 в 13:39

3 ответа

Ничего плохого в коде. Это просто понимание планировщика ОС для выполнения вашей программы, оно постоянно меняется.

ответ дан Muhammad Azam 20 January 2019 в 13:39

Вполне нормально, что время выполнения может меняться, поскольку ваш компьютер, вероятно, выполняет много вещей (включая вашу ОС), а не только этот фрагмент кода, и это повлияет на тактовые частоты.

На компьютере, где потребление обработки очень стабильно, время выполнения должно оставаться аналогичным , хотя.

В вашем коде нет ничего плохого.

КАК ИЗМЕРИТЬ ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ, КОДА, МЕТОДА, ФУНКЦИИ, ЗАПРОСА | C# STOPWATCH | C# ПЛЮШКИ

ответ дан Alonso Mondal 20 January 2019 в 13:39

Это зависит от изменений, которые вы наблюдаете. В современных компьютерах все разработано для статистической оптимизации среднего времени работы. Но многие архитектурные особенности основаны на статистике и в зависимости от начальных условий могут привести к очень разному времени выполнения. Это включает в основном кеши и предсказатели ветвлений.

Нормально иметь вариации около 20-30% во время выполнения. И мы проводили эксперименты на системах без ОС и с таким же поведением.

Вот программа, которая измеряет время с помощью счетчика меток времени (циклов). Можно проверить две простые функции. Один — это просто нулевой вектор, а второй — набор тестов для случайного (но всегда идентичного) вектора.

#include #include #define N 1000000 #define TYPE int #define ZERO 0 static unsigned long long start_timer() ; static unsigned long long stop_timer() ; static double dtime(long long debut, long long fin); #ifdef __i386__ # define RDTSC_DIRTY «%eax», «%ebx», «%ecx», «%edx» #elif __x86_64__ # define RDTSC_DIRTY «%rax», «%rbx», «%rcx», «%rdx» #else # error unknown platform #endif static inline unsigned long long start_timer() < unsigned int hi = 0, lo = 0; asm volatile(«cpuidnt» «rdtscpnt» «mov %%edx, %0nt» «mov %%eax, %1nt» : «=r» (hi), «=r» (lo) :: RDTSC_DIRTY); unsigned long long that = (unsigned long long)((lo) | (unsigned long long)(hi)<<32); return that; >static inline unsigned long long stop_timer() < unsigned int hi = 0, lo = 0; asm volatile(«rdtscpnt» «mov %%edx, %0nt» «mov %%eax, %1nt» «cpuidnt» : «=r» (hi), «=r» (lo) :: RDTSC_DIRTY); unsigned long long that = (unsigned long long)((lo) | (unsigned long long)(hi)<<32); return that; >static inline double dtime(long long start, long long end) < return (double) (end — start) ; >TYPE BF[N] ; long long start, end; double benchtime; void zero() < int i, j, m ; start=start_timer(); for (i=0;ivoid randtest()< int i, j, m ; srandom(100); for (i=0;iRAND_MAX/2) count++; > benchtime=dtime(start, stop_timer()); printf («%gn», benchtime); > void main()

1.09084e + 07 1.14298e + 07 1.07197e + 07 1.26519e + 07 1.32742e + 07 1.37184e + 07 1.54689e + 07 1.36335e + 07 1.20818e + 07 1.12298e + 07

Расчёт времени выполнения программы на python #short

4.30112e + 06 4.37242e + 06 4.28102e + 06 4.51831e + 06 4.45952e + 06 5.77813e + 06 6.33686e + 06 5.44415e + 06 5.67434e + 06 5.90118e + 06

2.4763e + 07 2.77489e + 07 2.78568e + 07 3.3762e + 07 3.56298e + 07 3.66709e + 07 3.22833e + 07 2.68651e + 07 2.88412e + 07 2.92287e + 07

1.00543e + 06 1.15819e + 06 1.00544e + 06 2.74409e + 06 1.17561e + 06 1.40751e + 06 2.41898e + 06 1.65623e + 06 2.19502e + 06 1.59414e + 06

Как вы можете видеть, как правило, изменение времени составляет не менее 30%, но когда речь идет о предсказателях переходов, он может быть намного больше. И это происходит либо в оптимизированном, либо в неоптимизированном коде.

Вы не можете считать, что выполнение является чем-то детерминированным в современных архитектурах. Существуют вариации, связанные с выбором архитектурного дизайна, которые по крайней мере так же важны, как и эффекты ОС. И это является большой трудностью, когда речь идет о реальном времени.

Читайте также:
Проблемы при загрузке программы в память

Источник: legkovopros.ru

Большая Энциклопедия Нефти и Газа

Время выполнения программы проще всего установить опытным путем, поскольку обратная перемотка ленты при записи обычно приводит в системе к большим накладным расходам по закрытию и открытию файлов. Иногда эта ситуация может быть использована для проверки системного диска. [4]

Время выполнения программы устанавливается оператором с учетом общего объема переписываемых массивов. [5]

Время выполнения программы устанавливается оператором в зависимости от числа вводимых и распечатываемых массивов. [6]

Время выполнения программы устанавливается оператором с учетом общего объема переписываемых массивов. [7]

Время выполнения программы устанавливается оператором в зависимости от числа вводимых и распечатываемых массивов. [8]

Время выполнения программы Image составляет всего несколько секунд. [9]

Время выполнения программы Image составляет всего несколько секунд, поэтому рекомендуется выполнять ее достаточно часто. [10]

Время выполнения программы Image составляет всего несколько секунд. [11]

Время выполнения программы Image составляет всего несколько секунд, поэтому рекомендуется выполнять, ее достаточно часто. [12]

Во время выполнения программы пользуйтесь диалоговым окном Evaluate / Modify, чтобы временно изменять значение переменной. Это позволит вам увидеть, как влияют на поведение программы различные значения без многократной перекомпиляции кода. [13]

Во время выполнения программы во всех регистрах индицируется число оставшихся до окончания опыта частиц. Появление нулей во всех регистрах индикатора означает выполнение анализирующей части программы. [14]

Во время выполнения программы запись представляется в памяти непрерывным блоком. Если запись не содержит элементов, описание которых включает фразу USAGE IS COMPUTATIONAL, то эту область памяти можно рассматривать просто как длинную цепочку литер; имена простых элементов и групп выступают как имена различных подцепочек внутри области. Подробно эти вопросы рассматриваются в разд. [15]

Источник: www.ngpedia.ru

1.5. Время выполнения программ

В процессе решения прикладных задач выбор подходящего алгоритма вызывает определенные трудности. В самом деле, на чем основывать свой выбор, если алгоритм должен удовлетворять следующим противоречащим друг другу требованиям:

1) быть простым для понимания, перевода в программный код и отладки;

2) эффективно использовать компьютерные ресурсы и выполняться по возможности быстро.

Если написанная программа должна выполняться только несколько раз, то первое требование наиболее важно. Стоимость рабочего времени программиста обычно значительно превышает стоимость машинного времени выполнения программы, поэтому стоимость программы оптимизируется по стоимости написания (а не выполнения) программы. Если мы имеем дело с задачей, решение которой требует значительных вычислительных затрат, то стоимость выполнения программы может превысить стоимость написания программы, особенно если программа должна выполняться многократно. Поэтому с финансовой точки зрения более предпочтительным может стать сложный комплексный алгоритм (в надежде, что результирующая программа будет выполняться существенно быстрее, чем более простая программа). Но и в этой ситуации разумнее сначала реализовать простой алгоритм, чтобы определить, как должна себя вести более сложная программа.

При построении сложной программной системы желательно реализовать ее простой прототип, на котором можно провести необходимые измерения и смоделировать ее поведение в целом, прежде чем приступать к разработке окончательного варианта. Таким образом, программисты должны быть осведомлены не только о методах построения быстрых программ, но и знать, когдаихследуетприменить(желательносминимальнымиусилиями).

1. Общие сведения об алгоритмах

Измерение времени выполнения программ

На время выполнения программы влияют следующие факторы:

1. Ввод исходной информации в программу.

2. Качество скомпилированного кода исполняемой программы.

3. Машинные инструкции (естественные и ускоряющие), используемые для выполнения программы.

4. Временная сложность алгоритма соответствующей программы 1 . Поскольку время выполнения программы зависит от ввода исходных

данных, его можно определить как функцию от исходных данных. Но зачастую время выполнения программы зависит не от самих исходных данных, а от их «размера».

В этом отношении хорошим примером являются задачи сортировки , которые мы подробно рассмотрим в главе 3. В задачах сортировки в качестве входных данных выступает список элементов, подлежащих сортировке, а в качестве выходного результата – те же самые элементы, отсортированные в порядке возрастания или убывания. Например, входной список 2, 1, 3, 1, 5, 8 будет преобразован в выходной список 1, 1, 2, 3, 5, 8 (в данном случае список отсортирован в порядке возрастания). Естественной мерой объема входной информации для программы сортировки будет число элементов, подлежащих сортировке, или, другими словами, длина входного списка. В общем случае длина входных данных – подходящая мера объема входной информации, и если не будет оговорено иное, то в качестве меры объема входной информации будем далее понимать именно длину входных данных.

Читайте также:
Перезайти в программу как пишется

Обычно говорят, что время выполнения программы имеет порядок Т ( п ) от входных данных размера п. Например, некая программа имеет время выполнения Т ( п ) = сп 2 , где с – константа. Единица измерения Т ( п ) точно не определена, но мы будем понимать Т ( п ) как количество инструкций, выполняемых на идеализированном компьютере.

Для многих программ время выполнения действительно является функцией входных данных, а не их размера. В этой ситуации определяем Т ( п ) как время выполнения в наихудшем случае, т. е. как максимум времени выполнения по всем входным данным размера п. Также будем рассматривать Т cр ( n ) как среднее (в статистическом смысле) время выполнения по всем входным данным размера п. Хотя Т ср ( п ) является достаточно объективной мерой времени выполнения, часто нельзя предполагать (или

1 Под термином «временная сложность алгоритма» понимается время выполнения алгоритма, измеряемое в шагах (инструкциях алгоритма), которые необходимо выполнить алгоритму для достижения запланированного результата. В качестве синонима для этого термина часто используют выражение «время выполнения алгоритма». В этой связи необходимо различать «время выполнения алгоритма» и «время выполнения программы».

Алгоритмы и структуры данных ( CDIO )

обосновать) равнозначность всех входных данных. На практике среднее время выполнения найти сложнее, чем наихудшее время выполнения, так как математически это трудноразрешимая задача и, кроме того, зачастую не имеет простого определения понятие «средних» входных данных. Поэтому в основном будем использовать наихудшее время выполнения как меру временной сложности алгоритмов, но не будем забывать и о среднем времени выполнения там, где это возможно.

Теперь сделаем замечание о втором и третьем факторах, влияющих на время выполнения программ: о компиляторе, используемом для компиляции программы, и машине, на которой выполняется программа. Эти факторы влияют на то, что для измерения времени выполнения Т ( п ) нельзя применить стандартные единицы измерения, такие как секунды или миллисекунды. Поэтому можно только делать заключения, подобные «время выполнения такого-то алгоритма пропорционально n 2 ». Константы пропорциональности также нельзя точно определить, поскольку они зависят от компилятора, компьютера и других факторов.

Для описания скорости роста функций используется O -символика. Например, когда мы говорим, что время выполнения Т ( п ) некоторой программы имеет порядок O ( n 2 ) (читается « о большое от n в квадрате» или просто « о от n в квадрате»), то подразумевается, что существуют положительные константы с и n 0 такие, что для всех n , больших или равных n 0 , выполняется неравенство Т ( п ) ≤ сп 2 .

Например, предположим, что Т (0) = 1, T (l) = 4 и в общем случае T ( n ) = ( n + 1) 2 . Тогда T ( n ) имеет порядок O ( n 2 ): если положить п 0 = 1 и с = 4, то легко показать, что для n ≥ 1 будет выполняться неравенство ( n + 1) 2 ≤ 4 n 2 . Отметим, что нельзя положить n 0 = 0, так как T (0) = 1 и, следовательно, это значение при любой константе с больше с 0 2 = 0.

Подчеркнем: мы предполагаем, что все функции времени выполнения определены на множестве неотрицательных целых чисел и их значения также неотрицательны, но необязательно целые. Будем говорить, что T ( n ) имеет порядок O ( f ( n )), если существуют константы с и n 0 такие, что для всех n ≥ n 0 выполняется неравенство Т ( п ) ≤ cf ( n ). Для программ, у которых время выполнения имеет порядок O ( f ( n )), говорят, что они имеют порядок (или степень) роста f ( n ).

Рассмотрим еще один пример. Функция T ( n ) = 3 n 3 + 2 n 2 имеет степень роста O ( n 3 ). Чтобы это показать, надо положить n 0 = 0 и с = 5, так как легко увидеть, что для всех целых n ≥ 0 выполняется неравенство 3 n 3 + 2 n 2 ≤ 5 n 3 . Можно, конечно, сказать, что Т ( п ) имеет порядок O ( n 4 ), но это более слабое утверждение, чем то, что T ( n ) имеет порядок роста O ( n 3 ).

Читайте также:
Кто работает в программе барс

1. Общие сведения об алгоритмах

В качестве следующего примера докажем, что функция 3 n не может

иметь порядок O (2 n ). Предположим, что существуют константы с и п 0 такие, что для всех n ≥ n 0 выполняется неравенство 3 n ≤ с 2 n . Тогда с ≥ (3 / 2) n для всех n ≥ n 0 . Но (3 / 2) n принимает любое, как угодно большое, значение при достаточно большом п, поэтому не существует такой константы с , которая могла бы мажорировать (3 / 2) n для всех n .

Когда мы говорим, что Т ( п ) имеет степень роста O ( f ( n )), то подразумевается, что f ( n ) является верхней границей скорости роста Т ( п). Чтобы указать нижнюю границу скорости роста Т ( п ), используется обозначение: Т ( п ) есть Ω( g ( n )) (читается «омега-большое от g ( n )» или просто «омега от g ( n )»), это подразумевает существование такой константы с , что беско-

нечно часто (для бесконечного числа значений п ) выполняется неравенство

T ( n ) ≥ cg ( n ) 1 .

Например, для проверки того, что Т ( п ) = п 3 + 2 п 2 есть Ω( n 3 ), достаточно положить с = 1. Тогда Т ( п ) ≥ сп 3 для п = 0, 1, …

Для другого примера положим, что Т ( п ) = п для нечетных п > 1 и Т ( п ) = п / 100 – для четных п ≥ 0. Для доказательства того, что Т ( п ) есть Ω( n 2 ), достаточно положить с = 1 / 100 и рассмотреть множество четных чисел n = 0, 2, 4, 6, …

Ограниченность показателя степени роста

Итак, мы предполагаем, что программы можно оценить с помощью функций времени выполнения, пренебрегая при этом константами пропорциональности. С этой точки зрения программа с временем выполнения O ( п 2 ), например, лучше программы с временем выполнения O ( n 3 ). Константы пропорциональности зависят не только от используемых компилятора и компьютера, но и от свойств самой программы. Пусть при определенной комбинации компилятор-компьютер одна программа выполняется за 100 n 2 миллисекунд, а вторая – за 5 n 3 миллисекунд. Может ли вторая программа быть предпочтительнее, чем первая?

1 Отметим асимметрию в определениях О — и Ω-символики. Такая асимметрия бывает полезной, когда алгоритм работает быстро на достаточно большом подмножестве, но не на всем множестве входных данных. Например, есть алгоритмы, которые работают значительно быстрее, если длина входных данных является простым числом, а не (к примеру) четным числом. В этом случае невозможно получить хорошую нижнюю границу времени выполнения, справедливую для всех n ≥ n 0 .

Алгоритмы и структуры данных ( CDIO )

менем выполнения O ( n 3 ). Однако при возрастании п отношение времени выполнения 5 n 3 / 100 n 2 = n / 20 также растет. Поэтому при больших п программа с временем выполнения O ( n 2 ) становится предпочтительнее программы с временем выполнения O ( n 3 ). Если даже при сравнительно небольших n , когда время выполнения обеих программ примерно одинаково, выбор лучшей программы представляет определенные затруднения, то естественно для большей надежности сделать выбор в пользу программы с меньшей степенью роста.

Другая причина, заставляющая отдавать предпочтение программам с наименьшей степенью роста времени выполнения, заключается в том, что чем меньше степень роста, тем больше размер задачи, которую можно решить на компьютере. Другими словами, если увеличивается скорость вычислений компьютера, то растет также и размер задач, решаемых на компьютере. Однако незначительное увеличение скорости вычислений компьютера приводит только к небольшому увеличению размера задач, решаемых в течение фиксированного промежутка времени, исключением из этого правила являются программы с низкой степенью роста, как O ( n )

На рис. 1.1 показаны функции времени выполнения (измеренные в секундах) для четырех программ с различной временной сложностью для одного и того же сочетания «компилятор-компьютер».

Рис. 1.1. Функции времени выполнения четырех программ

Предположим, что можно использовать 1000 секунд (примерно 17минут) машинного времени для решения задачи. Какой максимальный

1. Общие сведения об алгоритмах

размер задачи, решаемой за это время? За 10 секунд каждый из четырех алгоритмов может решить задачи примерно одинакового размера, как показано во втором столбце табл. 1.1.

Эффект от 10-кратного увеличения быстродействия компьютера

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru