<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; rdtsc</title>
	<atom:link href="http://web.snauka.ru/issues/tag/rdtsc/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Методы измерения времени работы программы</title>
		<link>https://web.snauka.ru/issues/2017/05/83188</link>
		<comments>https://web.snauka.ru/issues/2017/05/83188#comments</comments>
		<pubDate>Mon, 29 May 2017 08:14:51 +0000</pubDate>
		<dc:creator>Лохматов Степан Юрьевич</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[clock_get_time]]></category>
		<category><![CDATA[rdtsc]]></category>
		<category><![CDATA[методы измерения]]></category>
		<category><![CDATA[программа]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2017/05/83188</guid>
		<description><![CDATA[Методология и способы измерений Одним из главных способов проверки характеристик программного и аппаратного обеспечения касательно быстродействия является измерение времени прикладной программы или ее составных частей. Подобная проверка целесообразна для нахождения мест в программе или ее алгоритме, которым необходима оптимизация, а также помогает судить о реальных производительных качествах компьютера. На время работы программы влияют различные факторы: [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: black;"><strong>Методология и способы измерений</strong><br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Одним из главных способов проверки характеристик программного и аппаратного обеспечения касательно быстродействия является измерение времени прикладной программы или ее составных частей.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Подобная проверка целесообразна для нахождения мест в программе или ее алгоритме, которым необходима оптимизация, а также помогает судить о реальных производительных качествах компьютера. На время работы программы влияют различные факторы: характеристики программы, ОС компьютера, работающие процессы и пр.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Для выявления интересующих характеристик существуют некоторые приемы, которые позволяют снизить воздействие нежелательных факторов. Время выполнения тестируемой программы определяется по показаниям таймера (в начале выполнения и после завершения программы). Стоит отметить, что замер времени всегда происходит с некоторой погрешностью.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Теперь подробно рассмотрим способы снижения влияния подобных нежелательных факторов.<br />
</span></p>
<ol>
<li>
<div style="text-align: justify;"><span style="color: black;"><em>Многократное измерение.</em> Время выполнения программы измеряется несколько раз. Обычно, из-за влияния сторонних факторов, измерения отличаются, а время работы самой программы не изменяется. Наиболее точным из всех полученных измерений будет являться минимальное значение.<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;"><em>Исключение из измерения стадий инициализации и завершения.</em> Если необходимо измерить время выполнения некоторой части кода, то будет рационально вынести весь код, предшествующий вызову этой части, за первый замер времени, а следующий замер провести сразу после завершения работы программы.<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;"><em>Снижение влияния кода функции измерения времени.</em> Код снятия показаний таймера выполняется не мгновенно, т.е. в измеряемый интервал времени частично попадает и время его исполнения, такое влияние следует уменьшить. Для этого достаточно снимать временные показания в начале и в конце работы измеряемого фрагмента, а не постоянно. А также следить за тем, чтобы время работы функции, измеряющей время, было меньше измеряемого интервала.<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;"><em>Снижение влияния посторонних процессов.</em> Часто процессор загружен другими процессами. В таких случаях рационально использовать таймер времени выполнения процесса.<br />
</span></div>
</li>
</ol>
<p style="text-align: justify;"><span style="color: black;">В данной работе выбран метод многократного измерения. ВС имеет несколько различных таймеров, которые отражают течение времени с разных аспектов. Следует различать следующие таймеры:<br />
</span></p>
<p><span style="text-align: justify;">1) Таймер системного времени – аппаратный счетчик, отражающий течение времени с позиции ВС. Совпадает с реальным временем. Системное время одинаково для всех работающих на компьютере программ. Значение временного интервала, который измерен таким таймером, включает в себя кроме времени выполнения процесса замера еще и другие процессы. Функции для получения системного времени:</span></p>
<ul style="margin-left: 53pt;">
<li>
<div style="text-align: justify;"><span style="color: black;">ОС Windows: time(); GetTickCount(); GetSystemTime(); clock() (системное время, которое прошло с запуска процесса).<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;">ОС Linux: clock_gettime(); time(); times(); gettimeofday().<br />
</span></div>
</li>
</ul>
<p><span style="text-align: justify;">2) Счетчик тактов процессора – аппаратный счетчик, величина которого возрастает на каждом такте процессора. Позволяет с наибольшей точностью замерять малые промежутки времени. Данный счетчик стоит использовать для измерения интервалов времени, которые меньше кванта времени, выделенного процессу ОС. Специальные команды процессора для получения значения счетчика тактов:</span></p>
<ul style="margin-left: 53pt;">
<li>
<div style="text-align: justify;"><span style="color: black;">Alpha: rpcc;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;">PowerPC: mftbu, mftb;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;">x86/x86-64: rdtsc;<br />
</span></div>
</li>
<li>
<div style="text-align: justify;"><span style="color: black;">Itanium: ar.itc.<br />
</span></div>
</li>
</ul>
<p style="text-align: center;"><span style="color: black;"><strong>Библиотечная функция clock_gettime</strong><br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Для получения значения системного таймера в ОС Linux/UNIX используется библиотечная функция clock_gettime. Данная функция с параметром CLOCK_MONOTONIC_RAW записывает значение системного таймера в структуру struct timespec, которая состоит из двух полей &#8211; tv_sec и tv_nsec, задающих значение секунд и наносекунд, прошедших с некоторого момента времени. В примере записывается значение таймера перед выполнением фрагмента кода и после него. Разница показаний в секундах выводится на экран. Кроме того, функция дает возможность получать значения и с других таймеров.<br />
</span></p>
<p><img class="aligncenter" src="https://web.snauka.ru/wp-content/uploads/2017/05/052917_0811_1.png" alt="" /></p>
<p style="text-align: center;"><span style="color: black;">Листинг 1: clock_gettime<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;"><span><em>Точность:</em> Обычно в ОС Windows составляет 55 мс (55 </span><span>∗</span><span> 10−3 с), в ОС GNU Linux/UNIX &#8211; 1 нс (1 </span><span>∗</span><span> 10−9 с).<br />
</span></span></p>
<p style="text-align: justify;"><span style="color: black;"><em>Достоинство:</em> является переносимой, т.е. функция доступна пользователю независимо от аппаратного обеспечения.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;"><em>Недостатки:</em> сравнительно низкая точность, и измеренный интервал включает время выполнения и других процессов, работавших в измеряемый период.<br />
</span></p>
<p style="text-align: center;"><span style="color: black;"><strong>Машинная команда rdtsc</strong><br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Машинная команда rdtsc (Read Time Stamp Counter) берет показания счетчика тактов в виде 64-разрядного беззнакового целого числа, которое равно количеству тактов, прошедших с момента запуска процессора. Делением количества тактов на тактовую частоту процессора получается время в секундах. В этом примере используется ассемблерная вставка команды процессора rdtsc, результат выполнения который записывается в объединение (union) ticks.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Разница данных счётчика тактов преобразовывается в секунды в зависимости от тактовой частоты.<br />
</span></p>
<p><img class="aligncenter" src="https://web.snauka.ru/wp-content/uploads/2017/05/052917_0811_2.png" alt="" /></p>
<p style="text-align: center;"><span style="color: black;">Листинг 2: rdtsc<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;"><em>Точность:</em> один такт.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;"><em>Достоинство:</em> максимально точность измерения времени.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;"><em>Недостатки:</em> привязка к архитектуре x86. Затруднительно преобразование в секунды в процессорах с динамическим изменением частоты.<br />
</span></p>
<p style="text-align: center;"><span style="color: black;"><strong> Тестирование</strong><br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Тестирование данных таймеров было произведено на алгоритме, представляющим из себя сложение двух чисел, повторяющееся 1000000 раз. Для уменьшения влияния посторонних факторов на результаты, измерения будет проведены 100 раз.<br />
</span></p>
<p style="text-align: justify;"><span style="color: black;">Эксперименты проводились на персональной ЭВМ с процессором Intel Core i3-2625M CPU с тактовой частотой 1.3 ГГц. Полученные результаты изображены на графике.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2017/05/052917_0811_3.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2017/05/83188/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
