Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скорость работы с объектами в Delphi


Страницы:   1 2 3 4

Strange man ©   (2007-07-17 20:55:00) 

Скажите пожалуйста, с чем быстрее работать - с "class-like" records или с классами? Насколько велика разница? Если учитывать, что записи тоже будут создаваться динамически, т. к. в основном они используются как Array of record.
Ещё встречный вопрос: с чем быстрее работать - с памятью в стэке или с памятью, выделенной динамически? Почему?
Поиск не помонает: http://www.google.com/search?hl=ru&q=%D1%87%D1%82%D0%BE+%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5+class+record&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


oxffff   (2007-07-19 13:30:00) [21]


> SIMD - это и есть общее определение для всех расширенных
> наборов инструкций ЦП.


AMD64 тоже расширение набора. Но не SIMD.

The AMD64 architecture is a simple yet powerful 64-bit, backward-compatible extension of the industry-standard (legacy) x86 architecture.


oxffff   (2007-07-19 13:25:00) [22]


> Обращение к виртуальным методам предков по сравнению с обращением
> к методам потомков


Вызов обычного метода или виртуального через inherited линкуется напрямую.

Вызов виртуального метода  происходит через VTB, т.е + 2 fetch из памяти.
Один VTB, второй entry point.

Так что разница между этими вызовами есть.


DevilDevil   (2007-07-19 13:21:00) [23]

SIMD - это и есть общее определение для всех расширенных наборов инструкций ЦП. XMM - это названия регистров. А вообще MMX, SSE(1, 2, 3), 3Dnow - этоже вроде SSE.

SIMD - имхо муть!


DevilDevil   (2007-07-19 13:18:00) [24]

> Сергей М. ©   (19.07.07 12:57) [51]
> > Strange man   (19.07.07 12:25) [47]Вместо занятия подобной
> ловлей блох лучше сосредоточиться на эффективном задействовании
> расширенных наборов инструкций ЦП - SIMD, MMX, XMM, 3DNow
> и иже с ними.


А вот этого точно использовать не надо:
1) имхо
2) вряд ли это может пригодиться в твоей задачи
3) врядли осилишь реализацию


DevilDevil   (2007-07-19 13:17:00) [25]

> Strange man   (19.07.07 12:25) [47]

Если честно, не совсем понимаю смысл теста, лучше скажи, что в конечном итоге должно быть - мы подскажем слабые места.

> Что здесь хранится?

если там [ebp - что-то], значит сначала он "сохраняет" значение, находящееся в локальной переменной. Локальная переменная - указатель или объект класса.

если вообще какая то константа, то "сохраняет" значение, находящееся в глобальной переменной.

> oxffff ©   (19.07.07 12:27) [48]
> Игорь Шевченко ©   (19.07.07 12:28) [49]

Обращение к виртуальным методам предков по сравнению с обращением к методам потомков.

> Понятно. Просто я слышал, что использование наследования
> замедляет работу программ


На практике часто это правда. Зависит только от программста. Уменьшение в скорости если вызываешь, скажем, inherited.


Сергей М.   (2007-07-19 12:57:00) [26]


> Strange man   (19.07.07 12:25) [47]


Вместо занятия подобной ловлей блох лучше сосредоточиться на эффективном задействовании расширенных наборов инструкций ЦП - SIMD, MMX, XMM, 3DNow и иже с ними.


oxffff   (2007-07-19 12:38:00) [27]

To Strange man  

Это для object

mov ebx,[eax+VTB Offset]
..
call [ebx+$MethodOffset]

Это для class

mov ebx,[eax]
..
call [ebx+$MethodOffset]

Если сравнить грубо, то одинаково.


Игорь Шевченко   (2007-07-19 12:28:00) [28]


> Обращение к виртуальным функциям так же одинаково по скорости.


Одинаково с чем ?


oxffff   (2007-07-19 12:27:00) [29]


> > Обращение к свойствам предков не медленнее. Обращение
> к
> > виртуальным функциям так же одинаково по скорости.


По сравнению с чем?


Strange man   (2007-07-19 12:25:00) [30]


> Недопонял, что ты имеешь ввиду. Покажи код+асм. В 2х вариантах:
>  со включённой опцией компилятора и выключенной.

Какая опция? Оптимизация? Если да, то код получается одинаковый:

with r1 do a := b + c;
 mov eax, [b]
 add eax, [c]
 mov [a], eax

with r2[0] do a := b + c;
 mov eax, [a]
 mov edx, [eax + $04]
 add edx, [eax + $08]
 mov eax, edx

with cl1 do a := b + c;
 mov eax, [xxx]  // Что здесь хранится?
 mov eax, [eax +  $08]
 mov edx, [xxx]
 add eax, [edx + $0c]
 mov edx, [xxx]
 mov [edx + $04], eax


С классом with почему-то не работает :(


> Обращение к свойствам предков не медленнее. Обращение к
> виртуальным функциям так же одинаково по скорости.

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


DevilDevil   (2007-07-19 11:46:00) [31]

Звучит поерундовски


Игорь Шевченко   (2007-07-19 10:40:00) [32]


> Another point you should not underestimate is that classes
> as nodes would of course also mean to put node specific
> methods into this class too, which will be overridden at
> times (this is the main argument to use a class after all).
>  This will require additional CPU cycles just to lookup
> access methods, to dereference etc. which in turn will cost
> extra time.


Странно звучит. То есть, для рекордов методы можно выносить отдельно, а для классов обязательно в них самих, да еще и виртуализировать ?
Это Коран такой или Талмуд ?
Любят люди себе проблемы придумывать на ровном месте.


DevilDevil   (2007-07-19 08:24:00) [33]

Недопонял, что ты имеешь ввиду. Покажи код+асм. В 2х вариантах: со включённой опцией компилятора и выключенной.

Обращение к свойствам предков не медленнее. Обращение к виртуальным функциям так же одинаково по скорости.


Strange man   (2007-07-18 19:26:00) [34]


> DevilDevil ©   (18.07.07 18:40) [41]
> > Strange man
>
> Так что тебе надо оптимизировать?
> Поподробнее, пожалуйста.

Я просто пытаюсь понять, насколько замедляет работу программы использование классов. Ты написал, что обращение к записи по указателю и обрашение к классу выполняются с одинаковой скоростью, но у меня в первом случае генерируется 7 команд, а во втором 9... Кстати, обращение к свойствам предков не медленнее? (у меня почему-то тоже 9 команд)


Sdubaruhnul   (2007-07-18 19:11:00) [35]

2 Ega23:

Нет, не только.

Но теперь скажу, к чему я всё это. Привожу текст из справки по VirtualTreeView:

"Aside many other problems one was especially annoying: How can adding some 5000-6000 nodes take a minute or so to finish? This question was the reason that I created the very first version of Virtual Treeview. What I actually did was to recall my studies where I learned my trade. Why, on earth, must everything be wrapped into an object? In Java and the like even simple data types like strings are objects. While this kind of abstraction provides some additional conveniences it costs quite a lot in terms of CPU power and memory, particularly if it comes to many instances of such simple type pretenders.

Basically, the idea of virtualizing the tree control and using records instead of classes were two ideas which are born nearly at the same time. It was quite clear from the very first moment that classes can never be as effective as a simple record structures (in terms of size, access speed and management). Sure, a TPersistent only needs 4 bytes more than a record (the pointer to the class' VMT), but these are still too many extra bytes if you consider that I have wrestled quite a while with myself about every byte in a tree node (and want the minimalism principle). Another point you should not underestimate is that classes as nodes would of course also mean to put node specific methods into this class too, which will be overridden at times (this is the main argument to use a class after all). This will require additional CPU cycles just to lookup access methods, to dereference etc. which in turn will cost extra time. Trees with only some 1000 nodes will never see a large difference but for big trees this is significant and Virtual Treeview has mainly been created to address high capacity tree views."


DevilDevil   (2007-07-18 18:40:00) [36]

> Strange man

Так что тебе надо оптимизировать?
Поподробнее, пожалуйста.


Ega23   (2007-07-18 18:04:00) [37]

Я это всё к чему:
Неужели ты действительно считаешь, что VirtualTreeView работает быстрее ТОЛЬКО из-за того, что там рекорды используются в качестве описателя узла???


Ega23   (2007-07-18 18:03:00) [38]


> Спасибо, но ничего полезного, а главное монструозного там
> нет. Ах да, пока я пишу эти строки, 500 000 узлов продолжают
> добавляться.


BeginUpdate - EndUpdate поставил?
А ещё рекомендую посмотреть в сторону, например, CreateWnd - DestroyWnd


Sdubaruhnul   (2007-07-18 17:49:00) [39]

> Ega23 ©   (18.07.07 17:19) [36]

Спасибо, но ничего полезного, а главное монструозного там нет. Ах да, пока я пишу эти строки, 500 000 узлов продолжают добавляться.

Теперь твоя очередь смотреть на VirtualTreeView. И про солярку больше не надо. Сначала смотри, что цитируешь, а потом отвечай.


DevilDevil   (2007-07-18 17:20:00) [40]

> Игорь Шевченко ©   (18.07.07 17:12) [31]

согласен. есть ряд вопросов, которые я недопонимаю. Почему до сих пор указывают такты, например. Какие-то по одному, ряд fpu-шных по 3 такта, деление - почти 30.

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


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо