Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

FastMM - еще один менеджер кучи   Найти похожие ветки 

 
Владимир Кладов   (2005-04-03 12:28) [0]

Я тут до кучи сделал еще один менеджер памяти. Если кому интересно: http://bonanzas.rinet.ru/FastMM.zip
Честно говоря, ожидал бОльшего прироста производительности. На узкоспециальной задаче удалось побить стандартный менеджер кучи Delphi примерно вдвое по скорости. Если кто придумает, что исправить, чтобы эффект был больше, я с удовольствием.


 
thaddy   (2005-04-03 22:48) [1]

Try http://newsgroups.borland.com/cgi-bin/dnewsweb?cmd=article&group=borland.public.attachments&item=8648&utag=

Fastcode project Memory Manager Challenge in Brland.public.delphi.basm newsgroup!


 
miek ©   (2005-04-05 09:56) [2]

А за счет чего происходит прирост производительности, если не секрет?


 
ECM ©   (2005-04-05 10:12) [3]

В архиве есть описание алгоритма работы - почитай...


 
Barloggg   (2005-04-05 12:39) [4]

хмм... можно сделать запрос от пользователя, желает ли он часто менять размер строки.

насчет эффективности... она нестабильна.
При вызове менеджера задач Вин2000 скорость упала и последовательные запуски приложенного ехе-файла в тестовой задаче показывают чуть ли не двухкратный прирост скорости против стандартного.

До этого эффективность была около 30% против стандартного и 10% против замененного sysdcu


 
Владимир Кладов   (2005-04-05 15:44) [5]

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

Я обратил внимание, что FastMM (не мой который а в пакете, на который указал Thaddy), скорость существенно вырастает прежде всего засчет выравнивания на границу 16-байтного блока. И для пересылки куска памяти на reallocate используется mmx, очень впечатляюще. Я хочу попробовать еще 1 вариант. Гранулярность + все тот же метод выделения памяти с максимальным резервированием на хвосте. Главное, за счет чего надо пытаться обогнать прочие менеджеры - это минимизация числа машинных операций для выполнения выделения и освобождения памяти. Realloc, как обнаружилось вносит не более четверти вклада в самоыз специальных случаях.


 
thaddy   (2005-04-05 21:19) [6]

Another optimization might be to implement the allocation not as a tree, but like a circular buffer with two read/write pointers.
Bufferpointers should be in an offset 16 bit register like ax. This would automatically overflow to zero when a page boundary is reached! Then you can use virtualalloc etc, when more memory is needed. With your schema you can compare the pointers ( within an allocation schema) to see if there's enough space. This is highly efficient since only three compares are necessary.


 
thaddy   (2005-04-05 21:20) [7]

Another optimization might be to implement the allocation not as a tree, but like a circular buffer with two read/write pointers.
Bufferpointers should be in an offset 16 bit register like ax. This would automatically overflow to zero when a page boundary is reached! Then you can use virtualalloc etc, when more memory is needed. With your schema you can compare the pointers ( within an allocation schema) to see if there's enough space. This is highly efficient since only three compares are necessary.


 
Boguslaw Brandys   (2005-04-06 00:25) [8]

Unfortunately FastMM cannot be compiled under Delph 5 :-(


 
thaddy   (2005-04-06 00:46) [9]

It can! but it needs a rewrite using a tool to translate the mmx code to db statements. Look at Vladimir"s mmx unit for an example



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

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
5-1112470347
Антон
2005-04-02 23:32
2005.11.27
TFieldDataLink


2-1131302018
ArtemESC
2005-11-06 21:33
2005.11.27
Дин.массивы


2-1131781771
lRunner
2005-11-12 10:49
2005.11.27
Как исправить крокозябры в Caption?


1-1130935978
DelphiLexx
2005-11-02 15:52
2005.11.27
изменения значения бинарных данных в реестре


3-1129300957
Woolen
2005-10-14 18:42
2005.11.27
"sql state 42000 error code 0" при поиске по GUID через dbExpress