Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Многопоточность - исследование длительности квантов времени  [new]
rgreat
Member

Откуда:
Сообщений: 6022
misha mike,

Это да, но в целом точности в пару мс добиться вполне можно. Большую часть времени.

Сообщение было отредактировано: 5 июн 20, 17:33
5 июн 20, 17:35    [22146525]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5745
misha mike
динамическое изменение частоты процессора сделает такой "таймер" неюзабельным..
Не:
barmaley57
Высокоточный таймер реализован в отдельной микросхеме, его частота одна и та же практически на всех новых машинах и составляет порядка 3 580 000 отсчетов в секунду. Частота не зависит от каких-либо факторов и задается при старте машины.
8 июн 20, 12:49    [22147404]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
tunknown
Member

Откуда:
Сообщений: 759
DmSer
В программе необходимо указать количество запускаемых потоков, а в диспетчере задач выполнить привязку процесса к одному ядру.
Пытались ли вы изучить, как влияет на общее время исполнения наличие переброса потоков между ядрами и его отключение, т.е. привязка к одному ядру? Когда поток переносится на другое ядро, то это должно бы приводить к уменьшению эффективности кеша конкретного ядра.
9 июн 20, 11:36    [22147898]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1125
tunknown,

Нет, не пытался. Предполагаю, что разница будет не существенной, скорее всего её не удастся определить.
9 июн 20, 13:40    [22148064]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
tunknown
Member

Откуда:
Сообщений: 759
DmSer
Нет, не пытался.
Жалко. Мало у кого есть соответствующий (почти)серверный процессор.

DmSer
Предполагаю, что разница будет не существенной, скорее всего её не удастся определить.
Возможно, это больше зависит от алгоритма, чем от процессора. Однако, думаю, что в случае сравнения, например, 128L1+256L2 vs 192L1+1024L2 более мощный процессор понесёт большие потери от поведения шедулера, размывающего нагрузку.
9 июн 20, 14:59    [22148116]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1125
tunknown
DmSer
Нет, не пытался.
Жалко. Мало у кого есть соответствующий (почти)серверный процессор.


Повеселили, спасибо! :)
9 июн 20, 17:01    [22148194]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1125
У меня утилита Руссиновича ClockResпоказывает на обоих компах Current timer interval = 1.000 ms, хотя никаких асек на компе не стоит. Кто так выставляет - не знаю.
Предполагаю, что в данный момент такая же ситуация у большинства пользователей.
А если так, что в большинстве случаев функция Sleep работает с точностью 1 мс.
Кстати, на размер кванта текущее разрешение системного таймера походу не влияет.
21 июн 20, 11:04    [22154459]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
Kazantsev Alexey
Member

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

Я посмотрел на Win7 и 10, на обеих, после загрузки, интервал равен: 15.625. После запуска Delphi XE2 интервал устанавливается в 0.977. А вот 10.4 интервал уже не меняет, он остаётся дефолтным.
21 июн 20, 12:35    [22154499]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2326
Если правильно помню, MS VS в единицу устанавливает
21 июн 20, 12:37    [22154501]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26658
DmSer
хотя никаких асек на компе не стоит.

white_nigger
Если правильно помню, MS VS в единицу устанавливает

Многие майкрософтские поделки меняют интервал. В т.ч. даже анимационные темы (считай - ОС).
Но не все даже эту тему читают. Про гугл молчу.
21 июн 20, 20:36    [22154714]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1125
Несмотря на то, что разрешение системного таймера выставлено в 1 миллисекунду, это никак не помогает функции GetTickCount (либо GetTickCount64) работать точнее. При таком вот коде:
  tc := GetTickCount;
  sleep(20);
  tc := GetTickCount - tc;


в tc будут значения то 15, то 16, то 31, то 32.

Если же проводить замеры с использованием функции Now, то точность получается гораздо выше.

Таким образом, функция GetTickCount является очень грубым средством для замеров интервалов времени.
29 июн 20, 22:02    [22159275]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
bk0010
Member

Откуда:
Сообщений: 4959
DmSer
Несмотря на то, что разрешение системного таймера выставлено в 1 миллисекунду, это никак не помогает функции GetTickCount (либо GetTickCount64) работать точнее. При таком вот коде:
  tc := GetTickCount;
  sleep(20);
  tc := GetTickCount - tc;


в tc будут значения то 15, то 16, то 31, то 32.

Если же проводить замеры с использованием функции Now, то точность получается гораздо выше.

Таким образом, функция GetTickCount является очень грубым средством для замеров интервалов времени.
Скорее проблема в sleep: даже если она реально спит ровно 20 мс, то, скорее всего, ОС уже отдала процессор другому потоку (процессу).
29 июн 20, 22:17    [22159282]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4469
DmSer,

Ты лучше про слип почитай.
29 июн 20, 22:18    [22159283]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1125
Kazantsev Alexey
DmSer,

Ты лучше про слип почитай.


Я делаю замеры с использованием QueryPerformanceCounter, которая позволяет замерять интервалы почти с микросекундной точностью. Я вижу, что Sleep(20) занимает около 20 мс (плюс минус копейки). Замеры с использованием функции Now также показывают 20 мс.
Так что у меня нет сомнений, что Sleep выполняется 20 мс.

Прихожу к выводу, что msdn врёт:
msdn
The resolution of the GetTickCount function is limited to the resolution of the system timer, which is typically in the range of 10 milliseconds to 16 milliseconds.


Может фразу "limited to the resolution" следует интерпретировать как "limited to the max resolution"?
29 июн 20, 23:01    [22159303]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность - исследование длительности квантов времени  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4469
DmSer,

Посыпаю голову пеплом. Херню я про точность GetTickCount написал. Забыл, что у меня в качестве лоурез таймера, по дефолту, используется мультимедийный, который timeGetTime. timeBeginPeriod влияет именно на него, а у GetTickCount период не меняющийся, его можно получить через GetSystemTimeAdjustment /lpTimeIncrement/.
30 июн 20, 00:03    [22159327]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить