Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.05.06;
Скачать: [xml.tar.bz2];

Вниз

Знатокам менеджера памяти. Оптимальный размер блока ?   Найти похожие ветки 

 
Rouse_ ©   (2011-12-12 21:13) [40]


> DiamondShark ©   (12.12.11 21:12) [39]
> Хосподиисусе.

Переведи.


 
DiamondShark ©   (2011-12-12 21:17) [41]


> Rouse_ ©   (12.12.11 21:13) [40]
> Переведи.

Зачем на ночь страшные истории рассказываешь?


 
Rouse_ ©   (2011-12-12 21:19) [42]


> DiamondShark ©   (12.12.11 21:17) [41]
>
>
> > Rouse_ ©   (12.12.11 21:13) [40]
> > Переведи.
>
> Зачем на ночь страшные истории рассказываешь?

Пфф, не понял спича.
Статья вроде как о том, почему гранулярность памяти в 64к о которой ты и упомянул...


 
Pavia ©   (2011-12-12 21:23) [43]


> Статья вроде как о том, почему гранулярность памяти в 64к
> о которой ты и упомянул...

Я устал в двух словах можно почему они используют фиксированный размер, а не динамический в зависимости от установленного объёма памяти?


 
DiamondShark ©   (2011-12-12 21:27) [44]


> Я устал в двух словах можно почему они используют фиксированный размер

Потому что на Альфе идиотская система команд


 
DiamondShark ©   (2011-12-12 21:28) [45]


> Rouse_ ©   (12.12.11 21:19) [42]
> Статья вроде как о том, почему гранулярность памяти в 64к
> о которой ты и упомянул...

Статья о том, как из шкафа вываливаются пыльные скелеты.


 
Rouse_ ©   (2011-12-12 21:33) [46]


> DiamondShark ©   (12.12.11 21:28) [45]
> Статья о том, как из шкафа вываливаются пыльные скелеты.

Дык ктож спорит то?


 
DevilDevil ©   (2011-12-12 23:53) [47]

По поводу скелетов
Какая разница: я обращаюсь к двум страницам лежащим далеко или к двум страницам, лежащим близко? Я же в любом случае промахиваюсь по кэшу. Нет ?

Кстати проведите ликбез насчёт кэширования и промахов. Какой размер, какая потеря в тактах


 
DevilDevil ©   (2011-12-13 14:23) [48]

Удалено модератором


 
Mystic ©   (2011-12-13 15:36) [49]

Промахи разные бывают, в данном случае я говорил про TLB.

Как на x86 вычисляется эффективный адрес? Например


MOV EAX, 0x00403012
MOV DWORD [EAX], 2


Итак, нам надо:
(1) Взять содержимое регистра CR2, который содержит некоторый физический адрес в памяти X.
(2) Прочитать элемент со смещением 2 (0x00403012 / 2M) = 2
(3) Посмотреть, присутствует доступна ли указанная страница (или AV)
(4) Посмотреть, присутствует присутствует ли указанная страница в памяти (или прерывание, которое должно подтянуть страницу в память (если надо) и инициализировать элемент каталога)
(5) Получить физический адрес каталога второго уровня.
(6) Взять третий элемент каталога второго уровня (0x00003012 / 4096) = 3
(7) Посмотреть, присутствует доступна ли указанная страница (или AV)
(8) Посмотреть, присутствует присутствует ли указанная страница в памяти (или прерывание, которое должно подтянуть страницу в память (если надо) и инициализировать элемент каталога)
(9) Получить физический адрес памяти
(10) Добавить туда 0x12
(11) Записать туда 2

Слишком много действий, не правда? Поэтому есть TLB-кэш, который просто сохраняет пары первые 20 бит виртуального адреса => физический адрес. Если мы обращаемся к странице, которая вытеснена из кэша, то выполняем все 11 пунктов. Это TLB-промах.

Конечно, если мы меняем элемент каталога, то нам необходимо сбросить TLB-кэш (иначе он будет обращаться к старым страницам). Для этого есть привелегированная команда INVLPG.

Например, в системе есть разделяемая память, например 5G. Мы ее проецируем на некоторый адрес. Итого нам надо настроить 1310720 элемент каталога страниц (если используется страницы с размером 4096). Обычно эта настройка осуществляется в обработчиках при первом обращении к новой странице, когда вызывается вся цепочка (1)-(11) плюс обработчики прерывания 0x0E (страничная ошибка) на шагах (4) и (8).


 
DevilDevil ©   (2011-12-13 15:47) [50]

> Mystic ©   (13.12.11 15:36) [49]

понятно, что ничего не понятно

сколько тактов стоит какой промах ?

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


 
Mystic ©   (2011-12-13 18:12) [51]

Это уже детали реализации каждого отдельного проца. Да, есть разные предсказания при доступе по адресам, да, заносят иногда значения парами.

В моем конкретном случае, разница была 40% в случае страниц 4k и 2M. Тесты Oracle дают 20% прироста производительности.


 
Pavia ©   (2011-12-13 19:29) [52]

По поводу кэша. Если промахов будет много, то будет тормозить. Поэтому надо стараться писать/читать последовательно или блочно.

Чтобы это понять надо попробовать.
К примеру попробуй взять массив 200 мегабайт и подсчитать суму. Сначала линейно, а потом в случайном порядке. И третий способ наихудший, инвертированный порядок бит в индексе.

Для инвертирования можешь воспользоваться кодом.
c:=i;
for j:=0 to 7 do // 7 это для байта
 begin
 ReverseTabe[i]:= ReverseTabe[i] shl 1+c and 1;
 c:=c shr 1;
 end;


Чтобы прочувствовать эффект более лучше попробуй по изменять исходный размер массива.

Задачи и примеры возьми большой массив пару сотен мегабайт и сделай бинарный поиск в нем. А потом попробуй перегруппировать его порядок его элементов так чтобы наиболее частые элементы лежали близко.
Такую перегруппировку можно сделать путём инвертирования порядка бит в индексе.

Или вот ещё пример. Блочное транспонирование матриц. Разбиваешь массив на блоки. Эти блоки делишь на еще под блоки. И так далее пока к примеру не станет 10 на 10.
Вот 10х10 транспонируешь обычным способом. А вот блоки уже транспонируешь между собой.
И сравни это с классическим. Исходный размер матрицы возьми так чтобы была 100 мегабайт.

По поводу задержек HDD 1-10 мс SSD 1000-100 мкс
RAM 30-150 нс
L3 50-90 тактов
L2 10-30 тактов
L1  3 - такта
Цифры примерные и зависят от железа. Если промаха нет, то задержка 1 такт.


 
DevilDevil ©   (2011-12-13 19:52) [53]

> Mystic ©   (13.12.11 18:12) [51]

хотел бы поблагодарить за столь ценные советы )
хочу уточнить. Правильно ли я понял что:
1) и 2, и даже 4 страницы могут без проблем уместиться в кэше первого уровня. и тогда разницы вообще нет
2) запись mov [eax], 1 равна по скорости mov eax, 1 - то есть одному такту


 
Дмитрий С ©   (2011-12-13 20:49) [54]

Вот интересно, а попытки "помочь" кешу или менеджеру памяти не мешают ему?


 
Pavia ©   (2011-12-13 21:21) [55]


> Вот интересно, а попытки "помочь" кешу или менеджеру памяти
> не мешают ему?

Что вы имеете в виду? Каким способом помочь?


 
Mystic ©   (2011-12-14 15:28) [56]


> 1) и 2, и даже 4 страницы могут без проблем уместиться в
> кэше первого уровня. и тогда разницы вообще нет


Зависит от проца, если брать K8, то там в кэше L1 находятся TLB для данных, TLB для кода, кэш инструкций и кэш данных. Кэш данных содержит фрагменты по 64 байта, а не страницы. Вообще, обычно кэш ничего не знает про страничную адресацию памяти, он напрямую связан с физической памятью.

А сколько по тактам мне сказать сложно :)


 
DevilDevil ©   (2011-12-14 16:34) [57]

ясно
может быть позже выложу сюда свою реализацию


 
Pavia ©   (2011-12-15 06:32) [58]

По поводу кэша

Вот время работы  в секундах. Суммирование производилось  над массив размер указан. Количество операций суммирование во всех тестах одинаково.  

На другой машине тесты аналогичные, но задержки в 2 раза больше.

******** массив в 400 Мбайт
0,320000-Линейное;
3,210000-Cлучайное+линейное;
6,900000-Случайное;
7,160000-Инвертное;
******** массив в 4 Мбайт
0,310000-Линейное;
1,570000-Cлучайное+линейное;
2,610000-Случайное;
3,180000-Инвертное;

******** массив в 40 байт
0,310000-Линейное; 0
0,920000-Cлучайное+линейное; 0
1,830000-Случайное; 0
1,720000-Инвертное; 0


 
DevilDevil ©   (2011-12-15 10:03) [59]

> Pavia ©   (15.12.11 06:32) [58]
а почему у тебя время для 400мб, 4мб  и 40байт - одинаковое ?


 
Pavia ©   (2011-12-15 11:08) [60]


> а почему у тебя время для 400мб, 4мб  и 40байт - одинаковое
> ?

Специально выравнено. Чтобы видеть эффект кэша.
Для 400МБ делается 1 цикл для 4мб делается 100 циклов для 40 байт берётся 10000000 циклов и время берётся суммарное для всех циклов.

Тем самым можно проследить какие задержки будут при промахи в разные кэши.

0,310000-Линейное. Считай что это время без промаха. Плюс видно что работает алгоритм предсказания так как для разных блоков не обнаружено отличия.

6,900000-Случайное 400 М; Почти всегда промахи из за большого размера задержка определяется задержкой по доступу к ОЗУ.
2,610000-Случайное 4М; Промахов меньше, задержка меньше. Видно что КЭШ работает в данном CPU L2=4МБайтам.

1,830000-Случайное; Данные целиком умещаются в кэше первого уровня L1=64 кб. Но вот почему цифра большая еще надо подумать, но всё же она меньше чем для L2.

Измерения косвенные поэтому точную картину не отображают. Но примерно оценить порядки можно.


 
DevilDevil ©   (2011-12-15 11:14) [61]

> Pavia ©   (15.12.11 11:08) [60]
а как ты случайность организуешь ?
я думаю random() жрёт такты


 
Pavia ©   (2011-12-15 21:01) [62]


> я думаю random() жрёт такты

Через него. Ну такты ест, но не много.

Сделал тест без обращения к памяти только циклы и изменения индекса. Но так как процессор выполняет команды параллельно, то будет некоторая погрешность.  

0,320000-Линейное;
0,850000-Cлучайное+линейное;
1,620000-Случайное;
1,810000-Инвертное;

Так что уточнять модель измерения я пока не намерен.


 
DevilDevil ©   (2011-12-29 06:13) [63]

кому интересно - вот что получилось
http://zalil.ru/32399300
объект TRecordHeap


 
Pavia ©   (2011-12-29 13:17) [64]

А пример с демонстрацией превосходства над обычным менеджером выложите?


 
DevilDevil ©   (2011-12-29 18:17) [65]

> Pavia ©   (29.12.11 13:17) [64]

http://zalil.ru/32402579
Delphi6
приятно удивлён кстати стандартным аллокатором !!!



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2012.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.005 c
2-1326061288
Anthony
2012-01-09 02:21
2012.05.06
Как узнать что в буфере обмена Windows есть текст?


2-1325708746
cardon
2012-01-05 00:25
2012.05.06
Сортировка StringGrid по времени


9-1190998222
Snoop_4ok
2007-09-28 20:50
2012.05.06
GLScene


15-1325228984
ЛЕГЕНДА
2011-12-30 11:09
2012.05.06
клик мышью при определенном событии


15-1325149872
ЛЕГЕНДА
2011-12-29 13:11
2012.05.06
клик мышкой при наведение на врага





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский