|
|
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоPolesov, Твоя asm функция капелька в море в производительности Rep4Bytes -> 00:01:083 UseLodsD -> 00:02:088 У меня получились другие цифры (значения в миллисекундах): Код: powershell 1. 2. 3. Процессор i7-4790, 3.6 GHz, Win 8.1 x64 Вот тестовый код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. функцию UseLodsD можно ускорить процентов на 6-8, если после чтения последовательно сравнивать AL и AH и сдвигать EAX на 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:22 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЗа то она самая быстрая, из всех предложенных вариантов :D И я этим горжусь,,даже на asm никто не осилил быстрее Она у тебя просто работает некорректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:23 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЗа то она самая быстрая, из всех предложенных вариантов :D И я этим горжусь,,даже на asm никто не осилил быстрее а то, что она немного портит исходные данные, неважно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:24 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Блин. Я ожидал что компилятор скопирует строку, а он не сделал это. Он делает это только вот так Код: pascal 1. 2. Иначе Result остаётся указателем на str... Капец подводный камюшек. Весь мизинчик разбил в кровь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Тогда мой вариант подходит для того, если заменяемый символ встречается не так часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:54 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоТогда мой вариант подходит для того, если заменяемый символ встречается не так часто. Твой корректный вариант работает чуть быстрее моего, если данные сформированы по условиям TC (По данным : около 2-3 МБ на вход на каждые 10-15 символов ЗПТ). Разница в производительности крайне незначительна и, на мой взгляд, не оправдывает усложнения кода. Но если в каждой четвёрке символов будет запятая твой вариант начинает сильно отставать. p.s. А ты, случаем, не Няшик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоБлин. Я ожидал что компилятор скопирует строку, а он не сделал это. Он делает это только вот так Код: pascal 1. 2. Иначе Result остаётся указателем на str... Капец подводный камюшек. так тоже не так сделает, обломается на пустой строке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:10 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Попкорна уже не хватает. Предлагаю ТС заняться оптимизацией секций initialization и finalization - вот где поле-то непаханное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:28 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоБлин. Я ожидал что компилятор скопирует строку Все правильно делает компилятор. Если строка не меняется, зачем нужна ее копия, если можно просто увеличить счетчик ссылок? ГирлионайльдоОн делает это только вот так Код: pascal 1. 2. Иначе Result остаётся указателем на str... Капец подводный камюшек. Покури справку по UniqueString ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:28 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Вы уж определитесь, что именно делаете - новую строку с заменами или замены в старой строке. ТС-у был нужен второй вариант, как мне кажется. Первый же элементарно получается из второго добавлением UniqueString и возвратом результата. Да и как-то странно говорить о быстроте и выжимать такты, когда всё начинается с жирного выделения и копирования памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
makhaon1. Многопоточность никак не поможет? Мне с файлами, бывает, сильно помогает. 2. MMX никак не поможет? Ну и с объемными данными тоже. 1. Нельзя, он(сервис) и так в 20 потоках пашет, 2. Думаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
PolesovПривет. zinpubМожет, кто подскажет, как ещё быстрее можно... Начал с такого Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Можно читать по 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. С уважением, Poleosv. Пробовал, почему-то по одному lodsb быстрее, хотя у меня несколько по другому... попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 15:58 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЯ сделать самую быструю функцию! Кто сможет меня вздёрнуть?) (Только не надо SSE, он точно быстрее будет) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код тестовый Код: 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. Функция Код: 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. Ноздря в ноздрю с ForkReplaceC ------------------------------------------------------ FastCommaToPoint -> 00:00:906 UseReplaceC -> 00:00:547 ForkReplaceC -> 00:00:187 UseRepneScasb -> 00:00:203 PCharRepl -> 00:00:844 ForkReplaceC_lodsw -> 00:00:250 ReplaceCharByPChar -> 00:00:594 ReplaceCharByPChar_While -> 00:00:640 ForForForFor -> 00:00:578 ReplaceCharByPChar_WhileByLen -> 00:00:657 ReplaceKazantsev4 -> 00:00:406 Rep4Bytes -> 00:00:187 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovzinpubпропущено... Да, косякнул... вставь между этими операторами Код: pascal 1. и чтобы сразу видеть инвалидные функции в тело RunFunc можно добавить предварительную проверку Код: pascal 1. 2. 3. 4. 5. и наконец, в объявление функций лучше добавить const Код: pascal 1. также можно рассмотреть процедуры Код: pascal 1. Объявление да исправил.... через var нельзя... там Copy местами передаёт параметр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ВСЕМ СПАСИБО !! Остановился на таком варианте... Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:10 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, авторНельзя, он(сервис) и так в 20 потоках пашет, даже у нас на одной тествой машине 10ти летней давности с двумя ядрами сотня потоков работает без особых проблем. в том числе как раз файлы гигабайтами перемалывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
makhaonzinpub, авторНельзя, он(сервис) и так в 20 потоках пашет, даже у нас на одной тествой машине 10ти летней давности с двумя ядрами сотня потоков работает без особых проблем. в том числе как раз файлы гигабайтами перемалывает. А, что даст сотня потоков, если все ядра разобраны ? Или, я чего то не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubmakhaonzinpub, пропущено... даже у нас на одной тествой машине 10ти летней давности с двумя ядрами сотня потоков работает без особых проблем. в том числе как раз файлы гигабайтами перемалывает. А, что даст сотня потоков, если все ядра разобраны ? Или, я чего то не понимаю... Сотня потоков даст непрерывную нагрузку на процессор (перемалывает файлы - ждет завершения ввода-вывода) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:34 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubПробовал, почему-то по одному lodsb быстрее, хотя у меня несколько по другому... попробую Вот немного улучшенный вариант с чтением по 4 байта (последовательное сравнение AL, AH и сдвигом вправо на 16): Код: 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. Вот вариант с LodsB (простой в реализации): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Вот результаты: Код: powershell 1. 2. 3. В принципе, результаты ожидаемы. P.S. Хотелось бы посмотреть на вариант функции, победившей в этом "тендере" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubВСЕМ СПАСИБО !! Остановился на таком варианте... У меня на i7-7700 вот такое быстрее + универсальнее, понятнее, паскальнее ) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, не подумайте чего-нибудь плохого, UniqueStr пропал в результате проверок в первой процедуре ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:52 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Вот результаты полученные с помощью QueryPerformanceCounter: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Видно, что при трех измерениях результаты практически одинаковы: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. По моим измерениям видно, что самый быстрый вариант UseLodsD2 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, если загрузка 100% ядер то увеличивать нет смысла, безусловно. однако обычно ядра недогружены либо из-за дисковых операций либо из-за сети ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:54 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А строки почему только кратные 4? SetLength для необнулённого Result в реальном коде, скорее всего, будет давать просадку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39676949&tid=2040575]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 532ms |

| 0 / 0 |
