|
|
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, таблицы статикой в код ведь можно забить! (btw, если их генерацию вставить перед миллионным циклом, как в тесте - он, как ни странно, ускоряется! за счет разогрева кэша, очевидно.) Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. У меня тоже ошибочки вкрались в генерацию таблиц: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 02:39 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Aleksandr Sharahov, Кстати, если её вручную на ассемблер перевести, то там прилично так в скорости прибавляется, чуть больше 20 процентов. Всё-таки у новых дельфей с оптимизатором беда... 😒 я пишу на D7 - у меня там ассемблер = паскаль ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:13 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp Aleksandr Sharahov, Кстати, если её вручную на ассемблер перевести, то там прилично так в скорости прибавляется, чуть больше 20 процентов. Всё-таки у новых дельфей с оптимизатором беда... 😒 я пишу на D7 - у меня там ассемблер = паскаль ) Тут принято всех, кто до сих пор на D7, ногами топтать ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:16 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. Значит, надо искать ошибку у других версий ) И разумеется, аргументы должны быть из диапазона 0..$FFFF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. Совпадает пока там параметры как DWORD объявлены, если поменять на Word то перестаёт совпадать. Вот ассемблерный вариант того когда с правильными параметрами, у него всё совпадает и он даже ещё чуточку быстрее: Код: 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. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp, так немного быстрее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Голова! Расскажи, как мыслил, выводя такой подход У меня не хватило соображалки ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:19 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Вот ассемблерный вариант того когда с правильными параметрами, у него всё совпадает и он даже ещё чуточку быстрее: Код: 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. 44. 45. Сравни это с результатом компилятора D7, у него код быстрее ) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:24 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Вы что-то, ребята, затупили и с таблицами не попробовали. Сибиряков правильно подсказал, они небольшие. Только их 2 нужно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Просто через таблицы понятно как решать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Во-первых, сделай входящие параметры Word, чтобы сравнение было в одинаковых условиях. Во-вторых, да у новых дельфей с оптимизатором беда, согласен. В-третьих, тут скорее от процессора зависит, потому что перестановка местами команд в теле и замена add на shl/or у меня давала прирост в производительности. Возможно это как-то влияет на кэш/распараллелливание инструкций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:35 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Во-первых, сделай входящие параметры Word, чтобы сравнение было в одинаковых условиях. В ассемблерном варианте (тот который ShaAsm) можешь нарисовать любые параметры, код будет работать. Я смотрю на вещи ширше ) alekcvp Во-вторых, да у новых дельфей с оптимизатором беда, согласен. Речь не о новых дельфи. А о том, что компилятор D7 часто порождает код лучше человеков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:44 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, Оптимизация новых Delphi не хуже, чем Delphi 7 Скорее у тебя не включен флаг оптимизации P.S. Перевести Word в Cardinal - плёвое дело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:45 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Оптимизация новых Delphi не хуже, чем Delphi 7 Скорее у тебя не включен флаг оптимизации 1. Хуже, уже неоднократно проверялось. 2. Он по-умолчанию включён для Release. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:50 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, На операциях с управляемыми типами - да Там дополнительные операции вставлены Но здесь нет управляемых типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:54 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU alekcvp, На операциях с управляемыми типами - да Там дополнительные операции вставлены Но здесь нет управляемых типов Попробуй откомпилировать 22239616 и сравнить результат с 22239671 Это подлинная выдача из D7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:57 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, извиняюсь, с входными параметрами dword - всё ОК кстати, идея dword-параметров - отличная! табличный метод резко вырывается вперед (в 2 раза быстрее стал!) Код: pascal 1. 2. 3. 4. и с одной таблицей даже чуть быстрее, чем с двумя. SOFT FOR YOU, интересно ведь скорости-то сравнить. если "наивный" (легко понятный) код еще и быстрее оказывается - зачем что-то еще? И т.к. Александр не "рассказал, как мыслил", могу предположить: - 16 бит нам нужно сместить на разные смещения, от 0 до 15 - смещать биты можно и по нескольку сразу, но на одинаковый оффсет - если оффсеты будут степенями двойки - можно уменьшить количество нужных смещений логарифмически - начинать нужно с больших оффсетов, т.е. сначала весь старший байт - влево на 8 - дальше - дело техники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 13:40 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Код: 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. Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 14:53 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Ты сейчас с компилятором разговариваешь? )) Это его выхлоп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:04 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G могу предположить: - 16 бит нам нужно сместить на разные смещения, от 0 до 15 - смещать биты можно и по нескольку сразу, но на одинаковый оффсет - если оффсеты будут степенями двойки - можно уменьшить количество нужных смещений логарифмически - начинать нужно с больших оффсетов, т.е. сначала весь старший байт - влево на 8 - дальше - дело техники. Да, так и думал. Это стандартный прием. Но на таблицах, конечно быстрее будет. версия на таблицах Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:14 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Ты сейчас с компилятором разговариваешь? )) Это его выхлоп. Да нет - речь о том, что даже, на первый взгляд, незначительное изменение кода может существенно повлиять на скорость выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:19 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G SOFT FOR YOU, интересно ведь скорости-то сравнить. если "наивный" (легко понятный) код еще и быстрее оказывается - зачем что-то еще? Я тут экспериментирую с SIMD По сути появится возможность анализировать 16 символов за раз Там классная возможность в том, что проведя ряд манипуляций, ты получаешь маску из 16 бит, где ты видишь, символ удовлетворяет твоему условию или нет Например, самое важное условие - является ли символ ASCII (т.е. <= $7f) Но по факту возникает необходимость анализировать сразу несколько условий Например, тебе так же нужно по-особому реагировать на символы перевода каретки или пробельные символы. В кодировке FlexString (Flex Unicode) ключевое значение имеет символ $ff Получается ты считал 16 символов из памяти. Проанализировал их, получил маску (2 маски по 16 бит) А потом постепенно вычитываешь эти символы из SIMD-регистра и обрабатываешь согласно имеющейся маске Так вот я подумал было бы классно объединить 2 маски в одну и анализировать каждый символ как последовательность 2 бит (первая маска плюс вторая) Я думал можно сделать это за пару тактов. Каким-то простым способом. Таблицы уже не резонно. Остальные методы ещё хуже. Придётся усложнить анализ маски - первые 16 бит будут в младшем слове, а вторые в старшем. В данном случае мы просто разминаем мозги на тему как и что можно реализовать. Да, кстати, можно провести сравнительное тестирование. Мне кажется вариант Шарахова будет примерно таким же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp, так немного быстрее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Rio - почти идентично. Пара сдвигов заменены на инкремент P.S. ты кстати не ответил на вопрос :) 22239670 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:49 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ответил 22239731 Думал, что это более-менее очевидно. Прокрути алгоритм по шагам. После первого сдвига остаются пары одинаковых сдвигов, и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:55 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G - 16 бит нам нужно сместить на разные смещения, от 0 до 15 От 0 до 17 ) Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Выложи текущий вариант модуля Чтобы мы тоже погоняли и сравнили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:58 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Справа и есть твой листинг (2 первые строки идентичны, на скриншот не поместились) Слева Rio Код: sql 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. Насчёт стандартного подхода А можно это как-то где-то почитать? Желательно на русском ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 16:03 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40022946&tid=2037816]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 440ms |

| 0 / 0 |
