|
|
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Может, кто подскажет, как ещё быстрее можно... Начал с такого Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Сейчас дошёл до такого Код: 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. Разница ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
2 секунды - это такие длинные строки или в цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
wadman2 секунды - это такие длинные строки или в цикле? Строки - 250 Char ии 10 млн раз ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:20 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubwadman2 секунды - это такие длинные строки или в цикле? Строки - 250 Char ии 10 млн раз ... Лучшеб код сравнения, чем словесное описание. Тут все, конечно, джентльмены, но... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
А так? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:29 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, DevEx специально используете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Сильно отличается от asm варианта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_А так? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Так хорошо, но копирование снаружи тогда возникает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:36 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2 Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:38 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Сильно отличается от asm варианта? Кстати да, тоже хорошо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:44 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, авторrepne scasb у тебя там ansi строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:45 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
makhaon, Ага, delphi5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_zinpub, DevEx специально используете? А что с ним не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:50 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub_Vasilisk_zinpub, DevEx специально используете? А что с ним не так? Понял, пардон, кидал на форму, что под рукой было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 14:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Сильно отличается от asm варианта? Фи Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо Код: pascal 1. А если никогда не будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:24 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
wadmanА если никогда не будет?Видимо имелось ввиду: Код: pascal 1. правда это не сработает в случае строк, которые могут содержать бинарный ноль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
На данный момент, самый быстрый вариант такой Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Использование while - ускорения не даёт, и чуть замедляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubИспользование while - ускорения не даёт, и чуть замедляет ну понятно. нативный loop и должен быть быстрее велосипедного, иначе зачем он нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 17:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Да. Там #0 (Прироста нету... Странно ведь!) Сделал тест на токио. С включённой оптимизацией Результаты Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Вносил правки. И изменил на Код: pascal 1. 2. а так же Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоВносил правки. И изменил на Код: pascal 1. 2. а так же Код: pascal 1. Factor =10, в FillRandom... Не проставит запятые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:10 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Василий 2 Код: pascal 1. 2. 3. 4. 5. 6. Переделывал из кода, где возвращается копия с замененными символами, остался артефакт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:12 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2_Vasilisk_пропущено... Переделывал из кода, где возвращается копия с замененными символами, остался артефакт Я её допеределывал, чуууть медленнее асма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:19 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоФи Код: pascal 1. 2. 3. 4. 5. 6. В теории - да, быстрее на один вызов Length. Однако опирается на постулат, что все строки заканчиваются нулевым символом, что, емнип, не документировано. Также не прожуёт строки с нулевым символом внутри (а это, к примеру, способ задания массива строк в WinApi). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:20 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubЯ её допеределывал, чуууть медленнее асма Вот и славно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:26 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2ГирлионайльдоФи Код: pascal 1. 2. 3. 4. 5. 6. В теории - да, быстрее на один вызов Length. Однако опирается на постулат, что все строки заканчиваются нулевым символом, что, емнип, не документировано. Также не прожуёт строки с нулевым символом внутри (а это, к примеру, способ задания массива строк в WinApi). Лишнее чтение на каждой итерации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Посмотрите на тесты (Код с низу) Переносы не имеют значения никакого. Код: 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. Код: 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. 215. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, если строки ансишные, то табличку перекодировки сделай, должно весьма быстро получиться. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__, Вообще ужассно Код: sql 1. 2. 3. 4. 5. 6. 7. Код: 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. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 18:57 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
И чего вам эти попугаи покоя не дают ? Или это возвращение великого оптимизатора ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 19:00 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоВообще ужассно Да,, операция записи недешева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 19:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiИ чего вам эти попугаи покоя не дают ? Или это возвращение великого оптимизатора ? Самый оптимальный вариант. Быстрее только включить выравнивание на 16. И с помощью SSE инструкций искать маску символа. Прирост в два раза. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 19:08 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоschiИ чего вам эти попугаи покоя не дают ? Или это возвращение великого оптимизатора ? Самый оптимальный вариант. Быстрее только включить выравнивание на 16. И с помощью SSE инструкций искать маску символа. Прирост в два раза. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Самый оптимальный вариант - это StringReplace. Дешево, сердито и всем понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 20:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоВообще ужассно А все символы в исходной строке требуют замену - что быстрее? А если в множестве заменяемых символов больше одного элемента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 21:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schi Самый оптимальный вариант - это StringReplace. Дешево, сердито и всем понятно Он сначала выделяет 32 элемента в массив, и ищет через pos позиции, записывая их в массив. выделяя его, если нужно. А потом только, он гуляет по этому массиву, и заменяет в строке нужные позиции Короткий аналог, без массива Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:07 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоСамый оптимальный вариант А ничего, что в этом варианте есть сайд эффект - замена символов в исходной строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:11 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__, если массово заменять. То StringReplace проигрывает, а твоя функция по прежнему выдаёт тоже самое Код: 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. код Код: 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. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:22 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, мы двигаем 1 указатель, который в конце нигде не используется. Думаю что не вызовет порчу памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:24 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдомы двигаем 1 указатель, который в конце нигде не используется. Думаю что не вызовет порчу памяти Я о том, что у тебя содержимое const s: string; меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, не доглядел) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, добавь https://bitbucket.org/alex7691/delphi/src/master/FastStringReplace/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 22:57 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдоне доглядел) Ещё, если хочешь ускориться обрабатывай по несколько символов за итерацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 23:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоschiСамый оптимальный вариант - это StringReplace. Дешево, сердито и всем понятно Он сначала выделяет 32 элемента в массив, и ищет через pos позиции, записывая их в массив. выделяя его, если нужно. А потом только, он гуляет по этому массиву, и заменяет в строке нужные позиции Короткий аналог, без массива Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. "Я понимаю, лет 30-40 назад, при тогдашней стоимости и производительности железа имело смысл минимизировать все и везде, вплоть до оптимизации кода инициализации. Но сейчас смысла в этих попытках столько же, сколько в тщательном измерении длины шага мерина, которого ведут на живодерню (с) Виктор Конецкий Мне без разницы, занимает утилита 12 килобайт или 10 мебагайт, если она делает то, что мне нужно. " 20472449 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2018, 23:20 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiИ чего вам эти попугаи покоя не дают ? Или это возвращение великого оптимизатора ? Неет, мне хватает варианта by Vassily2, но ради интереса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоПосмотрите на тесты (Код с низу) Переносы не имеют значения никакого. Код: 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. Код: 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. 215. Не переносы, а запятые, которые и надо заменять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:32 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__ГирлионайльдоВообще ужассно А все символы в исходной строке требуют замену - что быстрее? А если в множестве заменяемых символов больше одного элемента? Строка от 120 до 370 символов. Запятых от 12 до 67 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:34 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
haydegenГирлионайльдо, добавь https://bitbucket.org/alex7691/delphi/src/master/FastStringReplace/ Оттуда и брал начальный вариант 😔 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyГирлионайльдоне доглядел) Ещё, если хочешь ускориться обрабатывай по несколько символов за итерацию. Пробовал, тормозит сильнее... См. ЧегоТоrtosW ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:39 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubПробовал, тормозит сильнее... См. ЧегоТоrtosW Странно, у меня получилось лучше PEnd процентов на ~25. Проверял по 4 символа за итерацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:44 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Извините Всё, что молчал - дожди, утонул вместе с телефоном :-)... Только высушил, пробовать буду завтра.... По данным : около 2-3 МБ на вход на каждые 10-15 символов ЗПТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:44 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyzinpubПробовал, тормозит сильнее... См. ЧегоТоrtosW Странно, у меня получилось лучше PEnd процентов на ~25. Проверял по 4 символа за итерацию. А как по 4? У меня только AH, AL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:45 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubА как по 4? У меня только AH, AL... Примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:48 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyzinpubА как по 4? У меня только AH, AL... Примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ;) D5 не в курсе. На асме сам написал на AH, AL. - не даёт прироста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:52 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Оптимизатор не в курсе, всмысле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, а зачем тебе эта спешка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__zinpub, а зачем тебе эта спешка? Микросервисы - ля.. 100-150файлов в минуту... И у всех ЗПТ вместо ТЧК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 00:59 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubОптимизатор не в курсе, всмысле Тут от оптимизатора и не требуется ничего. Это, как раз, ручное разворачивание цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 01:00 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubчччД__zinpub, а зачем тебе эта спешка? Микросервисы - ля.. 100-150файлов в минуту... И у всех ЗПТ вместо ТЧК. Ты ответь: спешка тебе эта для чего? Что - уже все страшно тормозит, и ты нашел бутылочное горлышко, и оно именно в этой запятой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 01:03 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__zinpubпропущено... Микросервисы - ля.. 100-150файлов в минуту... И у всех ЗПТ вместо ТЧК. Ты ответь: спешка тебе эта для чего? Что - уже все страшно тормозит, и ты нашел бутылочное горлышко, и оно именно в этой запятой? Горлышко, я нашёл, когда там Pos был... дальше - стало интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 01:07 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubГорлышко, я нашёл, когда там Pos был... дальше - стало интересно..А нет возможности заставить файлы формироваться сразу с точками? Была бы самая крутая оптимизация :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 01:25 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
white_niggerzinpubГорлышко, я нашёл, когда там Pos был... дальше - стало интересно..А нет возможности заставить файлы формироваться сразу с точками? Была бы самая крутая оптимизация :) Ээх, горячего компота прям на рану... 😭 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 06:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Попробовал скопировать функцию в коде ForkReplaceC_lodsw под другим названием и добавил в тесты. Время выполнения у них разное. Если это воспроизводится у кого-либо, то вопрос к бенчмаркалке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmПопробовал скопировать функцию в коде ForkReplaceC_lodsw под другим названием и добавил в тесты. Время выполнения у них разное. Если это воспроизводится у кого-либо, то вопрос к бенчмаркалке. На каком кол-ве прогонов? На сколько разное? Если +-(несколько миллисекунд) - то это норм, иначе магия :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:12 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubНа каком кол-ве прогонов? На сколько разное? Прогонов 50000 Код: plaintext 1. 2. 3. 4. От порядка выполнения не зависит, а зависит от положения в исходном файле. Если функции поменять в коде местами, то новая функция становится быстрее, а старая, соответственно, медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:23 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmzinpubНа каком кол-ве прогонов? На сколько разное? Прогонов 50000 Код: plaintext 1. 2. 3. 4. От порядка выполнения не зависит, а зависит от положения в исходном файле. Если функции поменять в коде местами, то новая функция становится быстрее, а старая, соответственно, медленнее. Погрешность, Now ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:27 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
поставь 10 000 000 раз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmzinpubНа каком кол-ве прогонов? На сколько разное? Прогонов 50000 Код: plaintext 1. 2. 3. 4. От порядка выполнения не зависит, а зависит от положения в исходном файле. Если функции поменять в коде местами, то новая функция становится быстрее, а старая, соответственно, медленнее. Эээ и что за камень? поставил у себя 50 000... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:32 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyzinpubПробовал, тормозит сильнее... См. ЧегоТоrtosW Странно, у меня получилось лучше PEnd процентов на ~25. Проверял по 4 символа за итерацию. Ещё можно по масске искать и сравнивать. Только я не мастак искать масски. Вот пример, ищем в 4 байтах конец строки, если нет, то плюсуем + 4. Если встретили конец, то считает оставшейся по символам Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 09:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоKazantsev Alexeyпропущено... Странно, у меня получилось лучше PEnd процентов на ~25. Проверял по 4 символа за итерацию. Ещё можно по масске искать и сравнивать. Только я не мастак искать масски. Вот пример, ищем в 4 байтах конец строки, если нет, то плюсуем + 4. Если встретили конец, то считает оставшейся по символам Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Даже так пробовал... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. хуже ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:09 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Я не вижу так же Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:23 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Вот с проверкой четвёрками: Код: 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. Работает на 30% быстрее PEnd. Правда не знаю, умеет ли Delphi 5 div и mod оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоKazantsev Alexeyпропущено... Странно, у меня получилось лучше PEnd процентов на ~25. Проверял по 4 символа за итерацию. Ещё можно по масске искать и сравнивать. Только я не мастак искать масски. Вот пример, ищем в 4 байтах конец строки, если нет, то плюсуем + 4. Если встретили конец, то считает оставшейся по символам Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Пардон, не разобрал на телефоне. А, при чём здесь длина строки вообще? она и так в -4 байта лежит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:33 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub Пардон, не разобрал на телефоне. А, при чём здесь длина строки вообще? она и так в -4 байта лежит... Серьёзно? Я тут говорю, что в 4 байтах можно по маске сразу понять, есть ли символ. А он не понимает. Эх ты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:34 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyzinpub, Вот с проверкой четвёрками: Код: 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. Работает на 30% быстрее PEnd. Правда не знаю, умеет ли Delphi 5 div и mod оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоzinpubПардон, не разобрал на телефоне. А, при чём здесь длина строки вообще? она и так в -4 байта лежит... Серьёзно? Я тут говорю, что в 4 байтах можно по маске сразу понять, есть ли символ. А он не понимает. Эх ты. Так это всё равно на 4 маски сравнивать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:38 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubЭээ и что за камень? поставил у себя 50 000... i5 6500 Ты сам постил аналогичные результаты для 50 000 21586838 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:39 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubГирлионайльдопропущено... Серьёзно? Я тут говорю, что в 4 байтах можно по маске сразу понять, есть ли символ. А он не понимает. Эх ты. Так это всё равно на 4 маски сравнивать... Хотя нет, кажется понял... Ща буду думать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:40 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmzinpubЭээ и что за камень? поставил у себя 50 000... i5 6500 Ты сам постил аналогичные результаты для 50 000 21586838 Это не я ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:45 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Там в коде нескольких функций (ReplaceCharByPChar в частности) допущена ошибка о которой я уже писал - меняются символы в исходной строке (копирования данных не происходит - выше скорость): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubЭто не я ... Я ошибся, но там порядок похожий. 1. В коде CNT_RUN с циклом не связана. 2. Погрешности now нет. Переделал на StopWatch. Всё аналогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 10:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Вот тут можно подробнее узнать о этом http://graphics.stanford.edu/~seander/bithacks.html#ZeroInWord ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:08 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyzinpub, Там в коде нескольких функций (ReplaceCharByPChar в частности) допущена ошибка о которой я уже писал - меняются символы в исходной строке (копирования данных не происходит - выше скорость): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Да, косякнул... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmzinpubЭто не я ... Я ошибся, но там порядок похожий. 1. В коде CNT_RUN с циклом не связана. 2. Погрешности now нет. Переделал на StopWatch. Всё аналогично. CNT_RUN с Edit'ом связана... Код покажи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я делал PosByte на этих бинарных трюках, выходило шустрее даже асмового Pos для анси строк. Но вот незадача - для юникод строк это уже не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:19 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubДа, косякнул... Другие функции проверь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:19 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubКод покажи... source Код: 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. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. Можешь выслать свою тестовую программу целиком на afgm[гав]mail.ru ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 11:28 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
afgmМожешь выслать свою тестовую программу... Ответ по поводу скорости уже нашёл Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 12:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
1. Многопоточность никак не поможет? Мне с файлами, бывает, сильно помогает. 2. MMX никак не поможет? Ну и с объемными данными тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 12:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я нашёл способ, как проверить, есть ли какой нибудь символ в 4 байтном слове Код: pascal 1. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 12:50 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Привет. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 13:24 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 13:54 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Polesov, Твоя asm функция капелька в море в производительности Rep4Bytes -> 00:01:083 UseLodsD -> 00:02:088 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 13:57 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:01 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubKazantsev Alexeyzinpub, Там в коде нескольких функций (ReplaceCharByPChar в частности) допущена ошибка о которой я уже писал - меняются символы в исходной строке (копирования данных не происходит - выше скорость): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Да, косякнул... вставь между этими операторами Код: pascal 1. и чтобы сразу видеть инвалидные функции в тело RunFunc можно добавить предварительную проверку Код: pascal 1. 2. 3. 4. 5. и наконец, в объявление функций лучше добавить const Код: pascal 1. также можно рассмотреть процедуры Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, чей-то софт напоминает) но тоже инвалид. Кстати, по-хорошему, можно было бы обобщить на любую пару символов и с масками игру с масками осилить до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЯ сделать самую быструю функцию! Кто сможет меня вздёрнуть?) Это как раз тот момент, когда оптимизация превращает код в колдунство. И опять же, это только для однобайтовых строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
За то она самая быстрая, из всех предложенных вариантов :D И я этим горжусь,,даже на asm никто не осилил быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 14:18 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
И опять-таки Wide string в пролете, а ведь им уже почти десять лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:09 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr Sharahov, А строки почему только кратные 4? Не обязательно кратные. Последний кусок может быть не кратным. Но все равно обработается как 4-байтовый интегер. Если подходить формально, то так делать некорректно по 2 причинам: 1. Выход за границу строки. Но т.к. память выделяется кратно 4, то к AV это не приведет. 2. Терминатор обрабатывается как символ данных и теоретически может быть заменен, если нулевой элемент в таблице замен не равен 0. Но тут уж программист в ответе. Kazantsev AlexeySetLength для необнулённого Result в реальном коде, скорее всего, будет давать просадку. А какие тут еще варианты? Setstring или присваивание? Надо бы проверить, конечно. P.S. Код писал, чтобы сравнить с работой с масками по 4 байта. Получилось примерно одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:12 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovА какие тут еще варианты? Setstring или присваивание? Result := ''; SetLength(Result, ...); Без обнуления на потенциальных реаллоках будет ещё копирование данных происходить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:17 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr SharahovА какие тут еще варианты? Setstring или присваивание? Result := ''; SetLength(Result, ...); Без обнуления на потенциальных реаллоках будет ещё копирование данных происходить. Скорее всего, для длинного результата, большего по сравнению с предыдущим так и будет. Но, с другой стороны, на малых длинах и при меньшей или равной длине нового результата это, вероятно, будет медленнее. Требуется проверка с тем MM, который предполагается использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Можно еще такое проверить Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, ошибся, неравенство в другую сторону надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:46 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я согласен, что всё это тестировать нужно по месту применения, но даже на малых строках вариант с обнулением выигрывает: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 17:52 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЯ согласен, что всё это тестировать нужно по месту применения, но даже на малых строках вариант с обнулением выигрывает: Сейчас проверил на D7 c FastMM и без него. Получилось, что SetLength без доп.ухищрений быстрее всего. Наверно сделал что-то не так ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 18:52 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я на XE2 проверял с дефолтным FastMM. Противоположный результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 18:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schizinpubпропущено... А, что даст сотня потоков, если все ядра разобраны ? Или, я чего то не понимаю... Сотня потоков даст непрерывную нагрузку на процессор (перемалывает файлы - ждет завершения ввода-вывода) Она и есть под постоянной загрузкой, если очередь растёт - запускаются дополнительные машины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 19:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Да, вот привычка блин, про фастмм забыл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 19:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAleksandr Sharahov, Я на XE2 проверял с дефолтным FastMM. Противоположный результат. Теперь спать не буду) Вот ведь вопрос: они там что-то улучшили или что-то сломали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 19:22 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovKazantsev AlexeyAleksandr Sharahov, Я на XE2 проверял с дефолтным FastMM. Противоположный результат. Теперь спать не буду) Вот ведь вопрос: они там что-то улучшили или что-то сломали? А на ХЕ2 строки не уникодные? Я как-то с д7 на ХЕ10 сразу перепрыгнул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 19:46 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpubА на ХЕ2 строки не уникодные? Я как-то с д7 на ХЕ10 сразу перепрыгнул. Юникодные. Они с 2009 юникодные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 19:50 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Да действительно, в некоторых случаях заметно ускорение на уровне ~10%, поправил. + Добавил перегруженную функцию, она чуть быстрее, но работает только с одной парой: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 22:07 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovKazantsev Alexey, Да действительно, в некоторых случаях заметно ускорение на уровне ~10%, поправил. + Добавил перегруженную функцию, она чуть быстрее, но работает только с одной парой: Код: 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. парни, прекращайте гнать индусский код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 22:09 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecator, а он нам нравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 22:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovdefecator, а он нам нравится великий оптимизатор дарует вам снисхождение ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2018, 22:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
zinpub, Кстати, на моем компе вот такое получилось быстрее, не говоря уж о 21590243 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 02:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, а остаток ? Крокодильчикам?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 09:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоAleksandr Sharahov, а остаток ? Крокодильчикам?) А подумать? Крокодильчики съели мозг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 09:59 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Обновил модуль, теперь можно менять любой символ строки (даже #0) на любой: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 10:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, забыл поправить процедуру инициализации с учетом последнего изменения Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 10:07 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Не то (Прошлый код) и не тот, один и тот же результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 12:39 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Если заменить string на AnsiString то норм. Подправь это расхождение. Ато принимаешь AnsiString а возвращаешь string ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 12:46 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЕсли заменить string на AnsiString то норм. Подправь это расхождение. Ато принимаешь AnsiString а возвращаешь string Спасибо, поправил. Исправленная версия: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 12:57 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovГирлионайльдоЕсли заменить string на AnsiString то норм. Подправь это расхождение. Ато принимаешь AnsiString а возвращаешь string Спасибо, поправил. Исправленная версия: Код: 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. боги индусского кода )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 15:44 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecator, на самом деле это очень полезная функция, через нее можно делать всевозможные перекодировки, upper/lower и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 16:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovdefecator, на самом деле это очень полезная функция, через нее можно делать всевозможные перекодировки, upper/lower и т.п. LCMapString(Ex) еще более полезная функция, а главное - она уже написана и оттестирована. А на все остальное с лихвой хватает StringReplace. Саша, при всем к тебе уважении, рассчитывать на включение такого кода в более или менее серьезный проект - это слишком радужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 19:27 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schi, так это, стреляли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 19:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Игорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 21:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovИгорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) А кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 10:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiAleksandr SharahovИгорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) А кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод Тебе, конечно, видней. Ты ведь знаешь все более или менее серьезные проекты и все, что им нужно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 10:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiА кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод Внезапно в юникодных дельфях AnsiUpperCase работает с ... юникодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 12:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiПотому что в серьезных проектах все уже давно перешли на юникодсразу вспоминается jep 254. надо бы попросить еще поддержку 7-битных строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 10:51 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiА на все остальное с лихвой хватает StringReplace. В более новых версия ее подрихтовали, но вплоть до ХЕ2 на нее было не взглянуть без слез. Убийца производительности. А уж для замены или удаления символов ее юзать - разве что на очень нетребовательных проектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 11:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2schiА на все остальное с лихвой хватает StringReplace. В более новых версия ее подрихтовали, но вплоть до ХЕ2 на нее было не взглянуть без слез. Убийца производительности. А уж для замены или удаления символов ее юзать - разве что на очень нетребовательных проектах. Я, за более чем 35 лет программирования, ни разу не видел, чтобы в информационных системах узким местом в производительности была замена символов. Возможно, мне не повезло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 11:45 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Еще вариант с чтением четверками (замена по месту, строки родные). Начинает обходить простейший for с длины строки 5, прирост становится больше с увеличением длины, но не превышает 50%. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 15:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
"Ну куда он, куда он гонится? Неужель он не знает, что живых коней Победила стальная конница?" https://godbolt.org/g/zgmGz8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:23 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, было бы интересно увидеть завершенную процедуру на Delphi (BASM) и замерить скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:36 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Вручную конвертировать под дельфийский ассемблер - дурное занятие, недавно была ветка про линковку сишного кода. Для 64 бит: {$LINK 'clang_sse.o'} procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, ну ладно, будет время проверю при случае. Ща проверил свои поделки на СЕ. Ассемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7, основной цикл на 16 байт длиннее. Ускорение по сравнению с RTL уменьшилось с 7-9 раз всего до 3 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 20:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Если надо 32 бита, то могу предложить только в виде dll-ки, 32-битные obj так запросто не линкуются и конверсия в omf почему-то не помогает. procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external 'gcc_sse32.dll'; Aleksandr SharahovАссемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7Там же FPC в качестве компилятора Паскаля, все претензии ему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 22:48 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, Код: pascal 1. А во вторых ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:01 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyЕсли надо 32 бита, то могу предложить только в виде dll-ки, 32-битные obj так запросто не линкуются и конверсия в omf почему-то не помогает. procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external 'gcc_sse32.dll'; Aleksandr SharahovАссемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7Там же FPC в качестве компилятора Паскаля, все претензии ему. http://www.sql.ru/forum/actualfile.aspx?id=21602858] Приложенный файл (Str_Replace_dll32.zip - 132Kb) это чудовищно. замена символа превратилась в монстра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
pblendvb это из 4.2 судя из https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=pblendvb&expand=432,432 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, да, SSE4 нужен. И нет, s там просто указатель, без var. авторзамена символа превратилась в монстра Это просто для тестирования, так-то можно и компактнее. 2 системных dll-ки - багофича последних версий gcc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, результат в ms под D7 (в цикле 20000 раз массив 1024 строк длиной 9..99): Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:17 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, забыл привести исходник: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:32 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, По-моему на коротких строках начинает упираться в дельфийскую обвязку, все эти UniqueString и т.д. Т.е. если делать в цикле так: ReplaceChr(@s[1], c, ',', '.'); то быстро, а если так: s1 := s; ReplaceChr(@s1[1], c, ',', '.'); то медленнее в 10 раз (UniqueString создаёт новую строку, а в первом случае нет). Возможно это более жизненный сценарий, но получается, что тестируем в основном оптимальность перераспределения памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 00:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Toxic PhantomidHTTP отправляет POST запрос на локальный сервер в base64 кодировке, обратно ответ прямо в StringList пишется. При всех кажущихся недостатках, таким образом удается подключить php в котором обработка строк делается изящно и на раз-два. Так нельзя делать а то вдруг проект за день заработает вместо двух недельОригинально. Я то думал рано или поздно предложат использовать БД. А тут таки php сервер! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 20:27 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
rgreat, Ну а что делать? сервер рядом, линк гигабитный, памяти везде с избытком Так же использую БД в качестве динамического массива. То есть dbGrid он завязан на таблицу, на клик обработчик.. При клике запись удаляется, все на лету рефрешится. В конце кнопочка подтверждение и то что осталось пишется в другую таблицу. Все работает на самом деле. Главное чтобы работало... Если на выставку то конечно так нельзя делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 20:41 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
rgreat, Toxic Phantom, лучше жуйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 20:58 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
rgreat, Оценка меня человеком не имеющего своих мыслей, и соответственно достижений в жизни, зато пользующимся мыслями другого человека с родовой травмой меня совершенно не интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:00 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovrgreat, Toxic Phantom, лучше жуйте +1 Рано сдаваться. Страниц на тридцать тема потянет, не меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:01 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__Aleksandr Sharahovrgreat, Toxic Phantom, лучше жуйте +1 Рано сдаваться. Страниц на тридцать тема потянет, не меньше. Зря смеетесь. То, что передача текстовых данных в сервис на пхп и возврат результата -- работает быстрее родного кода на делфи -- местные фанатики делфи должны голову пеплом посыпать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Страдайте - я ж не против. У нищих своя правда всегда, с которой сложно спорить. Бояре берут ЭВМ с 32гб озу и на ССД, обрабатывают разные части проекта технологиями которые под это подходят , крепостные стараются угодить внутреннему преподавателю информатики. По этому бояре работают на дорогих машинах а крепостные улучшают... )) Вам с этим жить, даже если это боль и слезы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
JaDi, да, быстро, прекрасно работает, уже более 10 лет юзаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:07 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
JaDiЗря смеетесь. То, что передача текстовых данных в сервис на пхп и возврат результата -- работает быстрее родного кода на делфи -- местные фанатики делфи должны голову пеплом посыпать. проще выкопать из пепла того Delphi-программиста и выгнать нафиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
JaDiТо, что передача текстовых данных в сервис на пхп и возврат результата -- работает быстрее родного кода на делфи -- местные фанатики делфи должны голову пеплом посыпать. Я думаю, автор обидится, если его пеплом посыпать чью-нибудь голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Delphi && PHP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
чччД__Тему можно закрывать с пометкой "Solved". "Пэхапэ рулит" - (с). тут на форуме некоторое время маячил персонаж, который обещал написать супер быстрый интерпретатор PHP Но куда-то слился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:31 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecatorчччД__Тему можно закрывать с пометкой "Solved". "Пэхапэ рулит" - (с). тут на форуме некоторое время маячил персонаж, который обещал написать супер быстрый интерпретатор PHP Но куда-то слился Дык, написал и теперь где-то на Багамах поселился, бабло с клиентов стрижет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecator, Заработал миллионы, купил большой двух этажный дом с бассейном и дорогой авто. И больше ничего не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:35 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоDelphi && PHP Так и знал, что это Няшик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:40 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Я не он. Это моя наработка, около 4 месяцев ей. Это легко проверить, проверив какие я темы создавал, например тут http://www.sql.ru/forum/1291164/bezopastnaya-proverka-na-obekt-ili-klass ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
JaDiЗря смеетесь. То, что передача текстовых данных в сервис на пхп и возврат результата -- работает быстрее родного кода на делфи -- местные фанатики делфи должны голову пеплом посыпать.Бенч в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:49 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
rgreatJaDiЗря смеетесь. То, что передача текстовых данных в сервис на пхп и возврат результата -- работает быстрее родного кода на делфи -- местные фанатики делфи должны голову пеплом посыпать.Бенч в студию! какой бенч ? это же Жадик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 21:50 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Передача файла на сервер может происходить в двух случаях из PHP 1) Curl - Post Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. Допустим на сервере Код: php 1. 2. 3. Загрузка Код: php 1. 2. 3. 4. 2) И посредством сокетов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 22:11 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
3) Через любимый HttpRequest http://php.net/manual/pl/httprequest.setpostfields.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 22:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
квантовые вычисления предлагали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 22:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
makhaonквантовые вычисления предлагали? Да, конечно: 21606031 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 22:30 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЯ не он Плохо шифруешься, Никита Фролов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 22:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоОшибся немного. https://vk.com/jj_jj95 Это ещё один твой виртуал? Вот эта твоя наработка удивительным образом, как две капли воды, похожа вот на это . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 23:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyГирлионайльдоОшибся немного. https://vk.com/jj_jj95 Это ещё один твой виртуал? Вот эта твоя наработка удивительным образом, как две капли воды, похожа вот на это . няшик спалился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 06:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоМолодец Очень быстро!сперва пободались а потом традиционно пришел лесникшарахов и всех разогнал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 10:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Да ладно. Шарахов позаимствовал главную ускорялку у компилятора Си и соединил её со своим криптокодом (который видимо и даёт ускорение на длинах меньше 32). В результате: На Дельфи 65 строк кода и на 10% быстрее. На Си 5 строк (простых как мычание), или даже 3, если скобки не считать. При этом больше гибкость - перекомпилируется под любой набор инструкций, Unicode и т.д. Мне второй вариант больше нравится. Хотя дело вкуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 11:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
А изначальный посыл был в том, что сишный компилятор где-то уже может заменить Шарахова :) Как его использовать - другое дело, но копипастить ассемблер по-моему сомнительное занятие. Я пробовал и намучился, пришлось прилично править т.к. в X86 нет полностью эквивалентного соглашания о вызовах, работу со стеком переделывал и т.д. Лучше линковка или DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 11:37 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyНа Си 5 строк (простых как мычание), или даже 3, если скобки не считать. При этом больше гибкость - перекомпилируется под любой набор инструкций, Unicode и т.д. Мне второй вариант больше нравится. Хотя дело вкусада я так-то сишник и сам неоднократно тут говорил что борландячий компайлер из прошлого тысячелетия, не все просто в курсе. когда на vs пишу тоже в голову не приходит асм юзать и особо заморачиваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 11:38 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyЛучше линковка или DLLага, чуть ли не в том еще веке порой математику и прочую критичную числогрызню цепляли к борландовому фронту в виде длл собранной скажем интелячьим компайлером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 11:41 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Сейчас и бесплатные GCC/Clang вроде ничего. Но заметный эффект получается, только если алгоритм в принципе векторизуется. Или его можно переписать так, чтобы векторизовался. За исключением может быть плавающей точки на x86 компиляторе Дельфи, которая такая медленная, что и переписывание "в лоб" на Си может помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 12:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyДа ладно. Шарахов позаимствовал главную ускорялку у компилятора Си и соединил её со своим криптокодом (который видимо и даёт ускорение на длинах меньше 32). В результате: На Дельфи 65 строк кода и на 10% быстрее. На Си 5 строк (простых как мычание), или даже 3, если скобки не считать. При этом больше гибкость - перекомпилируется под любой набор инструкций, Unicode и т.д. Мне второй вариант больше нравится. Хотя дело вкуса. Си заставил посмотреть в сторону SSE. Потому как не может бездушная железяка все такое ) Но если без эмоций вникнуть в код, то увидишь, что мой SSE-код скорее "позаимствован" из моего же криптокода на паскале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 12:32 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
vavanSaperskyЛучше линковка или DLLага, чуть ли не в том еще веке порой математику и прочую критичную числогрызню цепляли к борландовому фронту в виде длл собранной скажем интелячьим компайлером ... фотртана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 12:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyНо заметный эффект получается, только если алгоритм в принципе векторизуется. Или его можно переписать так, чтобы векторизовался. Я сейчас сижу на core2duo и вообще таких машин ещё - дофига и больше. Так что чистый AVX ещё лет десять минимум (ИМХО) придётся дублировать SSE2+. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 12:48 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Иногда SSE2 не так уж плох, тест AnsiUpperCase на строках длины 888..999, SSE42 в пролете: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 14:42 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
топик на время, нетленка навечно: Как быстро заменить символы в строке http://www.guildalfa.ru/alsha/node/36 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 15:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovтопик на время, нетленка навечно: Как быстро заменить символы в строке http://www.guildalfa.ru/alsha/node/36 хорошо, но представляет лишь академический интерес лично я в свои проекты не потащу индусский лапшекод, какой бы он ни был быстрый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 15:50 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecator, ладно, считай что отмазался, разрешаю не тащить ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 16:03 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Как быстро заменить символы в строке http://www.guildalfa.ru/alsha/node/36 Мы тут это уже проходили. Если у вас в приложении узкое место - это поиск (и замена) чего-либо в строках, то необходимо включать выравнивание на 16 байт в FastMM и вместо movedq u xmmX, [mem] использовать movedq a , тогда и производительность вырастает в разы, а в случае поиска можно вообще pcmpeqd сразу к памяти применять, без предварительной загрузки в регистр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 19:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
alekcvp, А такое выравнивание будет работать для строк ? Так как такое не работает Код: pascal 1. Я в своё время, делал свои строки, где выделялась ровно 16 через SysGetMem. Структура была такая Код: pascal 1. 2. 3. 4. 5. 6. 7. Работа с такой структурой была реализована через record helper for ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 21:00 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
alekcvpЕсли у вас в приложении узкое место - это поиск (и замена) чего-либо в строках, то необходимо Выбросить это приложение и начать жить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2018, 23:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдоalekcvp, А такое выравнивание будет работать для строк ? Так как такое не работает Код: pascal 1. Прекрасно работает, просто надо учитывать что строка на самом деле - это StrRec (12 байт) + данные, т.е. в начале каждой строки есть 2 невыровненых символа (4 байта), которые надо обработать отдельно, а потом уже можно нормально обрабатывать. Причём в 64-х битном режиме размер StrRec, внезапно, увеличивается до 16 байт и там все строки автоматически получаются выравненными: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 00:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
alekcvp, Даже при mba16Byte SSE откажется работать, из за того что NativeInt(@str[1]) and 15 = 12. Нет там никаких 4 не выровненных байта на 32 битной платформе. Код: pascal 1. Что значит, что в структуре StrRec последним перед строкой идёт length. А это значит, что мы можем сделать Код: pascal 1. И получить длину. А сделав так. Код: pascal 1. 2. 3. 4. 5. 6. Можно уже получить codePage 1200 И того, строка длиной в 4 : (12 + (4 + 1) * 2 = 22) and 15 = 6 И того 10 не выровненных байт. SSE откажется работать в таком случае 100% ... А на 64 битной платформе всё понятно, у них там стаб для SSE 64 битного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 01:22 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоИ того, строка длиной в 4 : (12 + (4 + 1) * 2 = 22) and 15 = 6 И того 10 не выровненных байт. SSE откажется работать в таком случае 100% Я не знаю что и как ты считаешь, но если PStrRec выравнивается на 16 байт, а её размер - 12 байт, то (PStrRec + 4) тоже будет выравнена на 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 15:36 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
P.S: Так же очевидно, что строки длиной меньше 6 символов обрабатывать через 8-байтные регистры бесcмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 15:39 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
alekcvpAleksandr Sharahov Как быстро заменить символы в строке http://www.guildalfa.ru/alsha/node/36 Мы тут это уже проходили. Если у вас в приложении узкое место - это поиск (и замена) чего-либо в строках, то необходимо включать выравнивание на 16 байт в FastMM и вместо movedq u xmmX, [mem] использовать movedq a , тогда и производительность вырастает в разы, а в случае поиска можно вообще pcmpeqd сразу к памяти применять, без предварительной загрузки в регистр. Результаты эксперимента на i7-7770 для процедуры SSEReplace из статьи на сайте: 1. одинаковая скорость movdqu и movdqa на выровненных данных 2. падение скорости на 10% у movdqu на невыровненных данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 19:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Да. Строку можно и ручками выровнять. Но тогда какой смысл ? Лучше сразу работать с выравненными данными. Давая полноценную 16 летную строку с #0 заполнением, умножая на 2 её, когда нет места в ней. Тогда мы просто будем использовать чистый SSE без всяких выравниваний в SSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 19:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, я не собираюсь что-то ручками выравнивать, мысль в другом 1. обе команды равноценны или почти равноценны на выровненных данных 2а. важна скорость не самой команды, а процедуры, в которой она работает 2б. на современном процессоре скорость процедуры отличается на 10% в лучшем случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 19:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я самое логичное вижу, это пересобрать модуль System и сделать в нём Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Убрав {$IF defined(CPU64BITS)} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 19:51 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Глупая идея была. Пересобрал. По прежнему NativeInt(@s[1]) and 15 выдаёт 12 Все asm функции потеряли получение длины, по offset -4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 20:14 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Я глянул, нигде не используется _Padding Сделал так Код: pascal 1. 2. 3. 4. 5. 6. 7. В getmem.inc так же Аналогично Код: pascal 1. 2. 3. 4. 5. Длина заработала. А выравнивание нету. Такого же как и для 64 bit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 20:38 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, думаю, первая попытка была верной, надо внимательней пройтись по CPU64BITS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 20:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
А почему embarcadero такие му**ки? И не могут сделать, сборку всех исходников из исходников. И исключить все не возможные dcu для сборки? Все их исходники пересобираются через source\rtl\BuildWinRTL.dproj ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 20:56 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Не знаю, выравнивания нету никакого. Не знаю почему, всё время 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. Я трогать не стал. Мб может и в них дела. А может и не в них ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 20:58 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Короче то, что не работала - это моя жопо рукость. Ибо он собирал по пути Documents\Embarcadero\Studio\19.0\lib\Win32 Заменив файлики. Я увидел результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 21:17 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоAleksandr Sharahov, Не знаю, выравнивания нету никакого. Не знаю почему, всё время 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. Я трогать не стал. Мб может и в них дела. А может и не в них как я понимаю, этот код относится к строковым константам, тогда имеет смысл тут тоже раскомментировать, + проверить выравнивание констант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 22:01 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov1. одинаковая скорость movdqu и movdqa на выровненных данных 2. падение скорости на 10% у movdqu на невыровненных данных Если данные выровнены, то можно сравнивать образец сразу с памятью, без загрузки в регистр. Но в случае именно замены символа там код сильно усложнится и это усложнение может съесть весь выигрыш. А вот при сравнении строк - это ускоряет немного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2018, 22:11 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040575]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
233ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 659ms |

| 0 / 0 |
