Может кто-нибудь объяснить незнакомый код, который, кажется, измеряет время выполнения - PullRequest
0 голосов
/ 07 января 2010
[user@host][~] 6> cc -xO4 timing.c -o timing
[user@host][~] 6> ./timing
Total run time: 0
[user@host][~] 6>

Может кто-нибудь сказать мне, что делает этот фрагмент кода и где он используется? Я полагаю, из командной строки.

Также кажется, что кто-то тестирует программу .c на время выполнения. Но почему общее время выполнения 0? Я тоже не знаком с этой командой -xO4.

Мне также показали этот пример, где время выполнения не равно 0. Очевидно, -xO4 что-то делает или ...?

[user@host][~] 6> cc timing.c -o timing
[user@host][~] 6> ./timing
Total run time: 3520000
[user@host][~] 6>

Ответы [ 5 ]

2 голосов
/ 07 января 2010

первая строка компилирует программу c. Вторая строка запускает его. Я предполагаю, что для запуска требуется меньше секунды, поэтому указанное время округляется до нуля.

1 голос
/ 07 января 2010

Просто на ключе -XO4, цитата :

-xO4

Выполняет развертывание цикла, избегает создание кадров стека, когда это возможно, и автоматически встроенные функции содержится в том же файле, а также оптимизация сделана уровнями 2 и 3. Обратите внимание, что этот уровень оптимизации может вызвать следы стека от ADB и DBX быть неправильным.

хотя это немного зависит от целевого процессора. Т.е. это для процессора SPARC и выше для x86.

0 голосов
/ 07 января 2010

Если вопрос звучит так: «Если times.c скомпилирован с -xO4, почему время выполнения меняется с 3520000 на 0?», То ответ таков: -x04 выполняет оптимизацию *, которая заставляет синхронизацию работать быстрее, чем если бы были построены без флага. Мы не знаем, какие единицы используются во время выполнения. Если это миллисекунды, то ваше ускорение составляет от 1 часа до менее миллисекунды. Это немного удивительно.

* (см. пост Абеля для уточнения деталей.)

0 голосов
/ 07 января 2010

Хорошо, есть несколько объяснений вашего вопроса после того, как вы отредактировали его, чтобы показать второе выполнение, без аргумента командной строки -x04.

Первое объяснение, которое я могу придумать, состоит в том, что аргумент -x04, который @ Abel проделал хорошую работу по документированию здесь , разворачивает настолько большую часть кода, что некоторые основные накладные расходы в цикле исчезают полностью. Скорее всего, некоторый код зацикливания полностью исчезает.

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

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

0 голосов
/ 07 января 2010

Первая строка компилирует C-программу из исходного файла хронирования .c в исполняемый файл, называемый синхронизацией. -XO4 - это флаг, передаваемый компилятору. Это зависит от платформы / компилятора, но выглядит как вариант для оптимизации уровня 4. Вторая строка выполняет код. Вы можете узнать, сколько времени занимает «таймер» для выполнения программы «время».

time ./timer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...