![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 06.01.2016
Сообщений: 4
|
![]()
Есть например некая быстрая функция, время ее выполнения порядка 10нс.
И есть таймер с разрешением 1000нс. Нужно измерить достаточно точно время выполнения той функции (скажем с дискретом 1 нс). Самое простое - это конечно же в цикле вызвать функцию, а потом общее время цикла поделить на количество вызовов. Но есть два ограничения: 1. в цикле эту функцию вызывать нельзя. 2. мерить от начала до конца цикла тоже нельзя. Есть подсказка: использовать статистику. Задачку задал начальник (ну он как коллега, просто опыта больше по с/с++), чтоб на праздники не скучно было. Я уже голову сломал. При этом изначально мы с ним прорабатывали вопросы измерения временных задержек, что то типа этого: Код:
В голове крутится задачка изерить короткое расстояние длинной палкой, из школы что-ли, или я уже придумываю... Последний раз редактировалось Stilet; 06.01.2016 в 18:41. |
![]() |
![]() |
![]() |
#2 | ||
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Цитата:
Цитата:
в целом, если можно выполнять тестовую процедуру последовательно с другой процедурой, время выполнения которой можно изменять. измерить время выполнения двух процедур, для достаточно большого набора конфигураций "другой процедуры". прменить метод наименьших квадратов и узнать таким образом время выполнения тестовой процедуры. |
||
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Я уже сколько раз эту функцию приводил.
Код:
Код:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 06.01.2016 в 19:57. |
![]() |
![]() |
![]() |
#4 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]()
а на какой платформе будет работать программа? я имею в виду многозадачность.
Цитата:
Код:
Код:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
min@y™. Теореме Пифагора уже более 2000 лет. И что, это говнокод? Вопрос не в том, на чём и как написан, а в том, что работает эффективно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
#6 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Если считаешь, что ядра делят задачу на их количество, то сильно ошибаешься. Каждому ядру, присваивается поток, который оно (ядро) и обрабатывает. Да, каждый поток, может прерываться супервизором Винды, но не в том коде, который я привёл. Я сильно не вникал в сам процесс, но экспериментально, один и тот-же массив в 100 элементов, сортируется примерно за одно и то-же время. Разница в 1 микросекунду. Это много меньше, чем квант, который выделяет винда на обработку очередного потока. Говорю, не особо вникал, но похоже код, который я привёл (он не мой), свой участок делает привелегированным. Т.е. Винда не может его прервать.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
#8 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#9 | |
Регистрация: 06.01.2016
Сообщений: 4
|
![]() Цитата:
Упрощенно: Вызвал свою функцию, затем nanosleep(1960). Померил время - получил 1000нс. Хорошо, значит надо больше 1960 в nanosleep сувать. Вызвал свою функцию, затем nanosleep(1970). Померил время - получил 2000нс. О, значит моя функция где-то 30нс выполняется. Надеюсь понятно изложил мысль. Вот только nanosleep, usleep и тому подобное не точное время работают, и нет уверенности, что nanosleep(1970) ровно на 1970нс остановит программу, может и на 2343нс уснет... По поводу платформы. Конечный код нацелен на линукс х64. Но сегодня проект собирал дома под линукс х32, а также под вин7 х64. По замерам времени у меня получается, что два вызова подряд функции Код:
Но в условиях задачи вообще абстрактный таймер с дискретом 1000нс... |
|
![]() |
![]() |
![]() |
#10 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Измерение времени выполнения процедуры | Silverstone | Помощь студентам | 5 | 18.03.2012 22:02 |
Профилирование (Измерение времени работы программы) | megakatapuz | Общие вопросы C/C++ | 0 | 06.01.2010 23:04 |
Измерение времени выполнения цикла | Alexcomeback | Общие вопросы C/C++ | 10 | 25.04.2009 16:58 |
Измерение времени нажатия клавиши клавиатуры | buka_14 | Помощь студентам | 6 | 13.04.2009 13:18 |
Измерение времени в c# | byte916 | Помощь студентам | 4 | 06.03.2009 21:18 |