Время доступа к памяти

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Время доступа к памяти

Сообщение CRobin » 27.09.2016 04:32:02

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

Есть у кого версии почему так происходит и что нужно для сокращения задержки, если запись происходит реже чем каждые 100 мс?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение Mirage » 27.09.2016 04:59:26

Попробую потелепатить: почему - кончается кэш. Что делать - префетч.
А так код надо смотреть.
А что на графике, кстати? Что по Х, что по У?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Время доступа к памяти

Сообщение CRobin » 27.09.2016 05:28:06

Mirage по Х интервал, с которым в цикле вызывается функция записи, по У время выполнения записи. Что вы понимаете под кончается кеш? То что данные в кеше вытесняются другими процессами? Кеш в данном случае ЦП имеется в виду или есть что то еще? И что такое префетч? Код весьма тривиальный, например для случая, когда интервал вызова нарастает в степени 4, на 40й итерации пауза между вызовами записи мудет 810мс:
Код: Выделить всё
  for i:=0 to 40 do
  begin
    k := i-10;
    if k > 0 then DelayUS(k*k*k*k);
    t1 := tsc;
    FillChar(tmp, Length(tmp), 'a');
    t2 := tsc;
    arr[i] := Diff(t2,t1);
  end;   
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение runewalsh » 27.09.2016 10:04:06

>по У время выполнения записи
В чём, наносекундах? В пределах погрешности, если у тебя tmp не гигабайтного размера.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Время доступа к памяти

Сообщение CRobin » 27.09.2016 16:00:01

runewalsh сколько байтов записываете, такая задержка и будет, мало заполняете будут наносенкунды, много заполняете будут микросекунды. График от этого не меняется.
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение runewalsh » 27.09.2016 18:25:50

Всё равно уверен, что дело в таймере. Чтобы «точно» замерить скорость участка кода, нужно сделать это много раз, отбросить, условно, 40% максимальных значений и 10% минимальных и усреднить остальные. Ты ведь этого не делаешь. Попробуй. Ещё можешь попробовать обходить задержки в обратном порядке. Если график таким и останется, становится чуть интересней, да.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Время доступа к памяти

Сообщение CRobin » 27.09.2016 19:18:47

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

Добавлено спустя 8 минут 8 секунд:
да, при изменении интервалов в обратном порядке картинка зеркалится
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение Pavia » 27.09.2016 23:15:39

CRobin писал(а):runewalsh сколько байтов записываете, такая задержка и будет, мало заполняете будут наносенкунды, много заполняете будут микросекунды. График от этого не меняется.

Ошибка в коде. У вас вместо результатов замеров выводится что-то несвязанное.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Время доступа к памяти

Сообщение CRobin » 27.09.2016 23:18:45

Pavia что вы имеете в виду?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение Pavia » 27.09.2016 23:57:35

Решил по мерить никакой ямы нет.
При цифрах 3, 4, 5 это порядоку 10^3, 10^4, 10^5 мкс начинает работать вытесняющая многозадачность. ОС отдаёт кванты времени другим потокам.
Изображение
upload

Интересно другое при размере массива 40 000 имеем яму в районе 1 мс.

Изображение
куда залить картинку

Добавлено спустя 11 минут 45 секунд:
Возможно это связано с вытеснением задач. При этом происходит сброс кэша. Так как тест ориентирован на запись прирост достигает за счет наличия пустого кэша. А при заполненном он вынужден тормозить чтобы скинуть старые записи.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Время доступа к памяти

Сообщение CRobin » 28.09.2016 01:16:45

Pavia
1) Каким образом у вас запись с холодного старта имеет минимальную задержку на первом графике? Вас это никак не смущает?
2) У вам время записи растет в пять раз относительно минимального и вас снова это почему то не смущает.
3) При чем тут кванты времени, вы что отдаете управление между итерациями? Нужно паузу между измерениями заполнять холостой нагрузкой, выставлять потоку приоритет реального времени и выполнять его все время на одном ЦП. Уже не говоря уже о том, что сама ОС должна быть готова к подобным задачам.

В данном случае ваши результаты мягко говоря "не о том"
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение Ism » 28.09.2016 01:55:38

1 Есть такая штука как фрагментация памяти, возможно поэтому при старте все быстро
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Время доступа к памяти

Сообщение CRobin » 28.09.2016 03:23:11

Ism запись происходит в одну и ту же область памяти.
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Время доступа к памяти

Сообщение Pavia » 28.09.2016 07:33:01

CRobin писал(а):1) Каким образом у вас запись с холодного старта имеет минимальную задержку на первом графике? Вас это никак не смущает?

Не сразу заметил. Она там есть. Так просто компонент выводит. Надо чуть в бок сдвинуть.
Система давно не холодная в неё уже всё есть стек выделен и так далее. Так что откуда при 0 замере берётся скачок не ясно. При следующем проходе задержки нет.

У вам время записи растет в пять раз относительно минимального и вас снова это почему то не смущает.

Нет не смущает. Я это объясняю вытесняющей многозадачностью. Она может не в 5 раз а в 100 раз доходить.
На интервале 1 мс - 4 секунды бесполезно, что либо мерить. многозадачность вносит большие ошибки.

При чем тут кванты времени, вы что отдаете управление между итерациями?

Я не отдаю ОС сама берёт и вытесняет задачу. Вы с этим как боретесь?
Лично я методически не мерить на озвученном диапазоне. Во вторых методическая ошибка хорошо изучена.
При диапазоне менее 1 мс точность доходит до 0.1-0.01% т.е, Меня более чем устраиват

Сейчас ОС не подготавливалась. Задача у меня всегда привязана к 1 ядру. Замер ошибок за 10 секунд.
Размер максимального выброса
Max=0,006701 секунды
dt =0,023198492 секунды - шаг между выбросами
NMax=494 - число выбросов за 10 секунд

Шумновато, если всё по закрывать таких выбросов только 100. А вот если совсем остановить все задачи тогда можно и ниже но я не пробовал.

Добавлено спустя 3 часа 21 минуту 31 секунду:
Погонял по мерил. Если код FillChar не гонять, то при первом запуске имеем посадку. Код не попал в кэш. Делаем прогон по коду. Я сделал прогон по статический массив, чтобы со стеком не пересекался - не влиял на кэш данных. Задержка с 300 тактов упала до 40-60 тактов, что равно скорости записи при последующих проходах.

Добавлено спустя 29 минут 5 секунд:
Увеличил массив с 40 до 4 000 затем 40 000, чтобы понять где прирост где просадка.
Изображение
Видимо работает кэш и/или система предсказания(prefetch)
С течением времени её сбивают прерывания и вытесняющая многозадачность.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Время доступа к памяти

Сообщение CRobin » 28.09.2016 16:31:08

Pavia вытесняющая многозадачность не причем, если запись/вычисление длится 20мкс (запись ~300000 байтов) то тут некуда вклиниваться. Многозадачность может вносить искажения в тест тем, что паузы будут больше, чем должны быть, если вы отдаете управление в цикле. Но разницы в десятки раз тут никак не может быть. Либо же многозадачность влияние на механизм кэширования, здесь интереснее. Вопервых не понятно о каком кеше идет речь? Речь о кеш памяти ЦП, или в ОЗУ тоже есть нечто такое? Во вторых, если о ЦП, кешируется и вытесняется код приложения, или же область памяти, куда происходит запись?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru