|
|
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyAleksandr Sharahov, По-моему на коротких строках начинает упираться в дельфийскую обвязку, все эти UniqueString и т.д. Т.е. если делать в цикле так: ReplaceChr(@s[1], c, ',', '.'); то быстро, а если так: s1 := s; ReplaceChr(@s1[1], c, ',', '.'); то медленнее в 10 раз (UniqueString создаёт новую строку, а в первом случае нет). Возможно это более жизненный сценарий, но получается, что тестируем в основном оптимальность перераспределения памяти. На строках длиной 89..99 разница менее заметна, но есть 1485 ShaCharReplace1 1453 ShaCharReplace2 3718 ReplaceCommaToDot 1844 gccReplaceCommaToDot ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 00:11 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
обвязка необходима, чтобы не портить исходную строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 00:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecatorэто чудовищно. замена символа превратилась в монстраЯ вот думаю, почему еще никто как обычно не предложил использовать для этого БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 00:18 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovобвязка необходима, чтобы не портить исходную строку Но тогда пусть обвязка будет одинаковой. Добавил в DLL функцию: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Впрочем, махинации с памятью всё равно скрывают преимущество сишного варианта до длины строк в 100+ символов. Можно убрать перевыделение в ShaCharReplace и сравнивать с ReplaceChr2, тогда разница заметнее. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 01:39 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SSE2 function Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. Test Код: pascal 1. 2. 3. 4. Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 02:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, Убрал всю работу с памятью, в процедуре оставил правку на месте. Преимущество sse на коротких строках в 2 раза, на длинных - в 3 раза: Код: pascal 1. 2. 3. 4. Теперь дело за табличным вариантом на sse ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 02:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, AV на movdqu [eax + edx], xmm4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 02:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, Результат твоей новой sse-функции с учетом выделения памяти на коротких строках примерно совпадает с моим, а на длинных в 2 раза лучше: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 02:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
а на очень длинных в 6 раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 03:00 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Это потому что надо ручками освобождать память. Вот автоматическое. Проверь эту. Снизу есть TestSSE Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 04:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Посмотрел на код Код: pascal 1. 2. Первая мысль: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 09:27 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я, впрочем, сразу говорил, что в SIMD уходить нужно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 09:29 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Valery_B, И что ? То что аргументы похожи ? А как иначе сделать выделение строки - освобождаемой автоматически ? Если у Delphi нет такой возможности через обычные выделялки. Это работает так. Ты выделяешь строку. Но она никуда не девается. Ей надо сделать Resize .. Больше или меньше в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 10:11 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, скорее он говорит о том, что всё уже сделано до нас ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 10:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я всегда верил в мощь ума наших программистов. Жалко только, что он на всякую ерунду растрачивается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 10:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Про SSE сам читаю как раз... да это здорово выходит! Осталось придумать, как в D5 запилить :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 11:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, второе место, немного отстает на всех длинах: Код: pascal 1. 2. 3. 4. не понял, это нафига? строки не могут перекрываться: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 11:19 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А можешь приложить свой тестер ? Хочу оптимизировать его на твоём -- Это его так Clang сделал. И действительно. Это не нужный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 12:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоAleksandr Sharahov, А можешь приложить свой тестер ? Хочу оптимизировать его на твоём -- Это его так Clang сделал. И действительно. Это не нужный код Специального тестера у меня нет. Но там примитивно все: генерируется массив случайных строк и потом в цикле крутим вызовы, время по GetTickCount. Просто у меня там много лишнего наворочено (валидации разные + другие функции), выбрасывать долго + боюсь запутаться в этом хламе. Оптимизировать там ничего не надо, надо просто преломить паскальную версию к SSE, предварительно pxor xmm1, xmm0 и далее в цикле: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вечером проверю, думаю, быстрее будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 12:57 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Это 32 символа если что. Насчёт GetTickCount я вообще не уверен, у неё погрешность есть от "of 10 milliseconds to 16 milliseconds." до 30 как показывает практика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 13:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоAleksandr Sharahov, Это 32 символа если что. Насчёт GetTickCount я вообще не уверен, у неё погрешность есть от "of 10 milliseconds to 16 milliseconds." до 30 как показывает практика я знаю, если что ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 14:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
проверил на строках длиной 899..999 Код: pascal 1. 2. 3. 4. 5. исходник Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 16:20 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Молодец Очень быстро! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 19:58 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
idHTTP отправляет POST запрос на локальный сервер в base64 кодировке, обратно ответ прямо в StringList пишется. При всех кажущихся недостатках, таким образом удается подключить php в котором обработка строк делается изящно и на раз-два. Так нельзя делать а то вдруг проект за день заработает вместо двух недель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 20:11 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39679443&tid=2040575]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 497ms |

| 0 / 0 |
