|
|
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Значит я посмотрю Возможно под x86 имеет смысл использовать стандартный ассемблерный компаратор строк, а не мой самописный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:13:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли бы сравнивались только указатели, то в данном случае был бы Exception А посмотреть - только трейсить У тебя сохранены строки в Items. Cтроки у нас рефкаунтед, а потому там сохранены только указатели. Когда ты вставляешь данные в словарь, то словарь сохраняет строковый ключ и тоже как указатель. Когда ты в поиске даёшь словарю сохранённую в Items строку, то фактически ты передаёшь уже сохранённый адрес. Компарер видя что адреса сравниваемых строк совпадают дальнейшее сравнение не делает. Так понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:14:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, В Items есть Key: TKey Он конечно указатель, но обычный string в соответствующем случае Если указатели string совпадают - то строки равны. А ты как хотел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:18:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли указатели string совпадают - то строки равны. А ты как хотел? Для корректности поиск нужно делать по копиям ключей, чтобы дать возможность отрабатывать компареру, как это происходило бы в реальных сценариях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:23:12 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeySOFT FOR YOUЕсли указатели string совпадают - то строки равны. А ты как хотел? Для корректности поиск нужно делать по копиям ключей, чтобы дать возможность отрабатывать компареру, как это происходило бы в реальных сценариях. Очень интересная мысль Наверное, действительно нужно предусмотреть отдельный вариант теста с уникальными строками Но: 1) Стандартный компаратор тоже сравнивает указатели 2) Значит дело не в компараторе x86, а в чём-то другом. Не может у Шарахова поиск по хешу работать быстрее моего :) Но может быть действительно дело в архитектуре, том факте, что память расходуется больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:40:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНе может у Шарахова поиск по хешу работать быстрее моего Самоуверенность просто прёт ! Когда библиотеки Шарахова использовались, ты ещё сиську сосал, и к его коду доверия гораздо больше, чем к коду всемирного оптимизатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 15:44:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Добавил в свой тест ShaDictionary Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 16:57:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, а где можно скачать исходники? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:11:33 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:15:50 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А я в свой тест добавил TShaNamedObjectDictionary Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. rgreat, Кстати я нашёл баг конструктора, про который ты говорил Фиг знает, почему в одних случай конструктор класса происходит, а в других нет В общем исправил, обновил файл в репозитории ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:50:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я так и не понял, у тебя в хеш-таблице есть возможность создать <RawByteString,Integer>, например? Или для хранения Integer должен быть какой-то отдельный массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 17:54:06 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr Sharahov, http://www.rgreat.ru/tmp/Delphi/Test.zip Посмотрел, есть несколько предложений: 1. Тесты с целочисленными ключами работают с неодинаковыми случайными данными из-за того, что в начале каждого теста RandSeed имеет разные значения. Исправление: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 2. Мои словари используют взбалтывание идентификаторов, из-за чего работают в неравных условиях с другими. Переделал, теперь это опция, по умолчанию отключенная. Для сравнимости результатов лучше использовать обновленные исходники к статье http://guildalfa.ru/alsha/node/32 3. По аналогии добавил замеры скорости для TShaIntegerBox: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. После этих изменений на E6850 получил: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 19:31:15 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUА я в свой тест добавил TShaNamedObjectDictionary Мои словари используют взбалтывание идентификаторов, из-за чего работают в неравных условиях с другими. Переделал, теперь это опция, по умолчанию отключенная. Для сравнимости результатов лучше использовать обновленные исходники к статье http://guildalfa.ru/alsha/node/32 SOFT FOR YOUAleksandr Sharahov, Я так и не понял, у тебя в хеш-таблице есть возможность создать <RawByteString,Integer>, например? Или для хранения Integer должен быть какой-то отдельный массив? У меня элементы хеш-таблицы содержат только два поля: хеш-код и адрес данных. Если ты хочешь хранить в хеш-таблице адреса объектов или записей, которые имеют поля RawByteString, Integer и/или любые другие, то, разумеется, они должны находиться где-то в памяти вне таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 19:42:28 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Сурово У тебя вызываются калбеки на хеш и компаратор строки. У меня они инлайнятся, кроме того хеш сначала считается четверками байт. Как ты думаешь, почему производительность может уступать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:18:59 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Сурово У тебя вызываются калбеки на хеш и компаратор строки. У меня они инлайнятся, кроме того хеш сначала считается четверками байт. Как ты думаешь, почему производительность может уступать? При случайном доступе к элементам хеш-таблицы производительность определяется, в первую очередь, количеством элементов таблицы, которое помещается в кеш-линии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:37:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Т.е. если количество элементов будет таким, что все они поместятся в L1, у меня станет быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 20:49:11 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТ.е. если количество элементов будет таким, что все они поместятся в L1, у меня станет быстрее? Не в этом дело. Искомый элемент хеш-таблицы может иметь индекс, отличающийся от предсказанного. В этом случае придется последовательно прочитать данные из нескольких кеш-линий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 21:17:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Надо конечно проанализировать коллизии, но, насколько я помню, их было не много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 21:36:47 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А есть у твоей реализации ещё какие-то преимущества над стандартным TDictionary? Кроме урезания данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:19:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, А есть у твоей реализации ещё какие-то преимущества над стандартным TDictionary? Кроме урезания данных Разумеется, вот те, что мне нравятся: - скорость, - удобство, - единообразное использование, - размер и понятность кода, - отсутствие ненужных мне функций, - простота изменения под себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:35:41 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Мягко говоря аргументы спорные Но меня интересует именно производительность Есть ли особенности, кроме урезания размера рабочих структур, которые позволяют увеличить производительность относительно стандартной TDictionary? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 23:58:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНо меня интересует именно производительность Есть ли особенности, кроме урезания размера рабочих структур, которые позволяют увеличить производительность относительно стандартной TDictionary? Разумеется, есть неиспользованные возможности. Например, производительность можно дополнительно увеличить инлайнами и всякой другой хренью, ну, ты понял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 00:08:55 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Ясно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 00:24:34 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovпонятность кода, Смотрю я на твою функцию ShiftItems и понятность от меня уплывает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 01:01:30 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr Sharahovпонятность кода, Смотрю я на твою функцию ShiftItems и понятность от меня уплывает. :) Если не читал статью, то да, может быть непонятно. Там всего 3 идеи при сдвиге: 1. не делать лишнего, 2. не нарушить упорядоченность, 3. учесть заворот данных при выходе за границу массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 07:16:55 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39422521&tid=2041988]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 488ms |

| 0 / 0 |
