|
|
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Дано: 2 Word-а по 16 бит :) Необходимо объединить их так, чтобы биты шли последовательно Можно ли сделать это без многочисленных умножений или огромных заранее рассчитанных таблиц? Пример: 0101010101010101 op 1100111000111100 = 0111001001110110111001110010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 09:52 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
О, в моём примере не так Но важное уточнение На практике не бывает, что оба n-ных бита равны 1 Может быть пригодится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 10:00 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
makewparam(lo,hi), makelong(lo,hi), LongRec(MyIntVariable).Lo := ..., LongRec(MyIntVariable).Hi := ..., MyIntVariable:= Lo + Hi shl 16; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 10:40 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ну у меня как-то так получилось в блокнотике: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 11:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Дано: 2 Word-а по 16 бит :) Необходимо объединить их так, чтобы биты шли последовательно Можно ли сделать это без многочисленных умножений или огромных заранее рассчитанных таблиц? Пример: 0101010101010101 op 1100111000111100 = 0111001001110110111001110010 Ассемблер подойдет? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 14:02 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Я честно говоря думал есть способ обойтись парой умножений и битовыми операциями В общем спасибо за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:02 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov, А зачем ассемблер? Типа показать, что умеешь? Или думаешь, так быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:04 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Такие вещи на ассемблере, как правило, быстрее. В основном, за счет регистровой ручной оптимизации - нет обращений к стеку. Ну, а показывать - не цель, чать не в детском садике ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:28 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov Такие вещи на ассемблере, как правило, быстрее. В основном, за счет регистровой ручной оптимизации - нет обращений к стеку. AFAIK не всегда. Лично по моему опыту, компилятор значительно лучше оптимизирует последовательность инструкций (взаимовлияние), чем я. Другое дело, что если использовать ASM, то тогда можно и MMX регистры использовать Polesov Mov ECX, 0Fh // количество итераций Мне кажется, что задача должна решаться за log(32) операций, т.е. максимум 5 операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:51 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, согласен, надо смотреть в каждом конкретном случае. Код: pascal 1. Ну, это в лоб ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:54 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov, Давай зарубимся Я напишу ту же функцию на паскале и она будет быстрее :) С меня паскалевский вариант, с тебя бенчмарк ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:00 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, А как ты решишь за 5 операций? Интересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:01 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, хорошо, выкладывай код. Да уже с кем-то гонялись - в каких-то случаях asm проиграл почти в 1.5 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:06 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov, Давай ты бенчмарк Я часа через 2 подтянусь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:08 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Необходимо объединить их так, чтобы биты шли последовательно SOFT FOR YOU огромных заранее рассчитанных таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:21 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
miksoft, Да Да :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 18:51 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Polesov, Давай ты бенчмарк Код: 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. У меня получился выигрыш ~17% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Вариант alekcvp мне нравиться больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:08 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Корректность работы проверяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:08 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp SOFT FOR YOU, Ну у меня как-то так получилось в блокнотике: Код: pascal 1. 2. 3. 4. 5. 6. Почему "Result shl 1" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:11 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev Корректность работы проверяли? asm проверял функцию alekcvp - нет (вместо нее SOFT FOR YOU обещался свою выложить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:26 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:33 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUогромных заранее рассчитанных таблиц? Табличка в 256 word (то бишь 512 байт) - огромна? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:38 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Пример: 0101010101010101 op 1100111000111100 = 0111001001110110111001110010 Похоже, у меня ошибка - в ТЗ младший бит результата = младший бит 2-го аргумента У меня наоборот. Вот подправленный вариант (на скорость не влияет): Код: 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. Результаты asm и pas совпадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:39 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov Похоже, у меня ошибка - в ТЗ младший бит результата = младший бит 2-го аргумента Ну это не критично Я свой код не проверял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Та-даааа ) Имя, сестра, имя ... ) Какие в итоге результаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SOFT FOR YOUогромных заранее рассчитанных таблиц? Табличка в 256 word (то бишь 512 байт) - огромна? Ну через таблицы понятно как решить Я чёт думал, что можно через умножения и сдвиги А похоже что нельзя Мож Шарахов придёт, интересный вариант накатает ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:42 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev Почему "Result shl 1" ? Потому что он "вдвигает" по 1му биту из WordA, а WordB остаётся на месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:42 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov, Ну у кого как У меня получилось в 2 раза быстрее, чем твой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:43 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Polesov, Ну у кого как У меня получилось в 2 раза быстрее, чем твой Странно, у меня получилось, что твой вариант быстрее всего на ~2%, что и понятно - меньше переходов. Видимо, зависит от модели процессора. Если будет не влом, реализую твой алгоритм на asm и сравню ... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:52 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov У меня получился выигрыш ~17% Во-первых, надо увеличить количество итераций в 100 раз, а то у меня разброс времени выполнения от 170 до 240 при разных запусках. Во-вторых, вот читерский вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. У меня на компе вот так: Код: plaintext 1. 2. 3. SOFT FOR YOU, Результат твоего кода не совпадает с нашим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 19:56 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Polesov У меня получился выигрыш ~17% Во-первых, надо увеличить количество итераций в 100 раз, а то у меня разброс времени выполнения от 170 до 240 при разных запусках. Во-вторых, вот читерский вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. У меня на компе вот так: Код: plaintext 1. 2. 3. SOFT FOR YOU, Результат твоего кода не совпадает с нашим. А, понял, он тоже слова местами меняет. Да, этот вариант быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 20:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Ну мне кажется нет разницы, сначала идут биты w1 или w2 Ассемблер можно посмотреть дизассемблировав функцию (Ctrl+Alt+C в отладке) Там кстати сделано в 3 регистра :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 20:05 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, Ты можешь ускорить свой вариант Можно проинициализировать переменную Mask стартовым значением Сделать repeat/until цикл, где на каждой итерации модифицируется Result и потом сдвигается Mask При достижении Mask определенного значения - выходить из цикла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 20:12 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU alekcvp, Ты можешь ускорить свой вариант Можно проинициализировать переменную Mask стартовым значением Сделать repeat/until цикл, где на каждой итерации модифицируется Result и потом сдвигается Mask При достижении Mask определенного значения - выходить из цикла Я уже забил маску в таблицу. Со сдвигом маски будет медленнее, я проверял. Самый быстрый цикл - for , по крайней мере раньше был. Хотел сделать свой ассеблерный вариант, но обломался. На Z80 была команда сдвига через флаги (то ли ZF, то ли CF, не помню уже), был очень удивлён не обнаружив ничего похожего в x86... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 20:46 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Polesov, Ну у кого как У меня получилось в 2 раза быстрее, чем твой Вот такая простыня оказалась самой быстрой ) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 21:09 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov SOFT FOR YOU, Такие вещи на ассемблере, как правило, быстрее. В основном, за счет регистровой ручной оптимизации - нет обращений к стеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 21:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Квейд сейчас обращение к стеку по скорости мало чем отличается от обращения к регистру Все же обращение к стеку хоть и немного, но медленнее обращения к регистру - где-то на 0.08% Замерял на этом коде: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 21:49 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov Вот такая простыня оказалась самой быстрой ) А вот фиг: Ассеблер для упоротых :) Код: 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. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 22:24 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Выложите полный файл А то сравниваете не понятно что с чем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 22:32 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
посмотрел список команд. увы, но проц нативно биты не почередует, ничего подходящего нет. мне ассемблерный вариант с or mask нравится. наверно это лучшее, что можно сдлать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 22:34 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 22:49 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, так немного быстрее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 01:34 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Вы что-то, ребята, затупили и с таблицами не попробовали. Сибиряков правильно подсказал, они небольшие. Только их 2 нужно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 01:47 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Только по условиям задачи тип параметров - word. L1G, Только время генерации таблиц тоже включай 🤣 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 01:50 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Aleksandr Sharahov, Только по условиям задачи тип параметров - word. Значит, надо исправить условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 01:51 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Но да, там всё равно уже бесполезно рыпаться 😁 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 01:53 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Кстати, если её вручную на ассемблер перевести, то там прилично так в скорости прибавляется, чуть больше 20 процентов. Всё-таки у новых дельфей с оптимизатором беда... 😒 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 02:10 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, таблицы статикой в код ведь можно забить! (btw, если их генерацию вставить перед миллионным циклом, как в тесте - он, как ни странно, ускоряется! за счет разогрева кэша, очевидно.) Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. У меня тоже ошибочки вкрались в генерацию таблиц: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 02:39 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Aleksandr Sharahov, Кстати, если её вручную на ассемблер перевести, то там прилично так в скорости прибавляется, чуть больше 20 процентов. Всё-таки у новых дельфей с оптимизатором беда... 😒 я пишу на D7 - у меня там ассемблер = паскаль ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:13 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp Aleksandr Sharahov, Кстати, если её вручную на ассемблер перевести, то там прилично так в скорости прибавляется, чуть больше 20 процентов. Всё-таки у новых дельфей с оптимизатором беда... 😒 я пишу на D7 - у меня там ассемблер = паскаль ) Тут принято всех, кто до сих пор на D7, ногами топтать ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:16 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. Значит, надо искать ошибку у других версий ) И разумеется, аргументы должны быть из диапазона 0..$FFFF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 11:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Aleksandr Sharahov, результат операции не совпадает с таковым у других версий. Совпадает пока там параметры как DWORD объявлены, если поменять на Word то перестаёт совпадать. Вот ассемблерный вариант того когда с правильными параметрами, у него всё совпадает и он даже ещё чуточку быстрее: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp, так немного быстрее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Голова! Расскажи, как мыслил, выводя такой подход У меня не хватило соображалки ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:19 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Вот ассемблерный вариант того когда с правильными параметрами, у него всё совпадает и он даже ещё чуточку быстрее: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Сравни это с результатом компилятора D7, у него код быстрее ) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:24 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G Вы что-то, ребята, затупили и с таблицами не попробовали. Сибиряков правильно подсказал, они небольшие. Только их 2 нужно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Просто через таблицы понятно как решать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Во-первых, сделай входящие параметры Word, чтобы сравнение было в одинаковых условиях. Во-вторых, да у новых дельфей с оптимизатором беда, согласен. В-третьих, тут скорее от процессора зависит, потому что перестановка местами команд в теле и замена add на shl/or у меня давала прирост в производительности. Возможно это как-то влияет на кэш/распараллелливание инструкций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:35 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Во-первых, сделай входящие параметры Word, чтобы сравнение было в одинаковых условиях. В ассемблерном варианте (тот который ShaAsm) можешь нарисовать любые параметры, код будет работать. Я смотрю на вещи ширше ) alekcvp Во-вторых, да у новых дельфей с оптимизатором беда, согласен. Речь не о новых дельфи. А о том, что компилятор D7 часто порождает код лучше человеков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:44 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, Оптимизация новых Delphi не хуже, чем Delphi 7 Скорее у тебя не включен флаг оптимизации P.S. Перевести Word в Cardinal - плёвое дело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:45 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Оптимизация новых Delphi не хуже, чем Delphi 7 Скорее у тебя не включен флаг оптимизации 1. Хуже, уже неоднократно проверялось. 2. Он по-умолчанию включён для Release. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:50 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, На операциях с управляемыми типами - да Там дополнительные операции вставлены Но здесь нет управляемых типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:54 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU alekcvp, На операциях с управляемыми типами - да Там дополнительные операции вставлены Но здесь нет управляемых типов Попробуй откомпилировать 22239616 и сравнить результат с 22239671 Это подлинная выдача из D7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 12:57 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, извиняюсь, с входными параметрами dword - всё ОК кстати, идея dword-параметров - отличная! табличный метод резко вырывается вперед (в 2 раза быстрее стал!) Код: pascal 1. 2. 3. 4. и с одной таблицей даже чуть быстрее, чем с двумя. SOFT FOR YOU, интересно ведь скорости-то сравнить. если "наивный" (легко понятный) код еще и быстрее оказывается - зачем что-то еще? И т.к. Александр не "рассказал, как мыслил", могу предположить: - 16 бит нам нужно сместить на разные смещения, от 0 до 15 - смещать биты можно и по нескольку сразу, но на одинаковый оффсет - если оффсеты будут степенями двойки - можно уменьшить количество нужных смещений логарифмически - начинать нужно с больших оффсетов, т.е. сначала весь старший байт - влево на 8 - дальше - дело техники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 13:40 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Сравни это с результатом компилятора D7, у него код быстрее ) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 14:53 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Ты сейчас с компилятором разговариваешь? )) Это его выхлоп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:04 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G могу предположить: - 16 бит нам нужно сместить на разные смещения, от 0 до 15 - смещать биты можно и по нескольку сразу, но на одинаковый оффсет - если оффсеты будут степенями двойки - можно уменьшить количество нужных смещений логарифмически - начинать нужно с больших оффсетов, т.е. сначала весь старший байт - влево на 8 - дальше - дело техники. Да, так и думал. Это стандартный прием. Но на таблицах, конечно быстрее будет. версия на таблицах Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:14 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Ты сейчас с компилятором разговариваешь? )) Это его выхлоп. Да нет - речь о том, что даже, на первый взгляд, незначительное изменение кода может существенно повлиять на скорость выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:19 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G SOFT FOR YOU, интересно ведь скорости-то сравнить. если "наивный" (легко понятный) код еще и быстрее оказывается - зачем что-то еще? Я тут экспериментирую с SIMD По сути появится возможность анализировать 16 символов за раз Там классная возможность в том, что проведя ряд манипуляций, ты получаешь маску из 16 бит, где ты видишь, символ удовлетворяет твоему условию или нет Например, самое важное условие - является ли символ ASCII (т.е. <= $7f) Но по факту возникает необходимость анализировать сразу несколько условий Например, тебе так же нужно по-особому реагировать на символы перевода каретки или пробельные символы. В кодировке FlexString (Flex Unicode) ключевое значение имеет символ $ff Получается ты считал 16 символов из памяти. Проанализировал их, получил маску (2 маски по 16 бит) А потом постепенно вычитываешь эти символы из SIMD-регистра и обрабатываешь согласно имеющейся маске Так вот я подумал было бы классно объединить 2 маски в одну и анализировать каждый символ как последовательность 2 бит (первая маска плюс вторая) Я думал можно сделать это за пару тактов. Каким-то простым способом. Таблицы уже не резонно. Остальные методы ещё хуже. Придётся усложнить анализ маски - первые 16 бит будут в младшем слове, а вторые в старшем. В данном случае мы просто разминаем мозги на тему как и что можно реализовать. Да, кстати, можно провести сравнительное тестирование. Мне кажется вариант Шарахова будет примерно таким же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov alekcvp, так немного быстрее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Rio - почти идентично. Пара сдвигов заменены на инкремент P.S. ты кстати не ответил на вопрос :) 22239670 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:49 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ответил 22239731 Думал, что это более-менее очевидно. Прокрути алгоритм по шагам. После первого сдвига остаются пары одинаковых сдвигов, и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:55 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
L1G - 16 бит нам нужно сместить на разные смещения, от 0 до 15 От 0 до 17 ) Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Выложи текущий вариант модуля Чтобы мы тоже погоняли и сравнили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 15:58 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Справа и есть твой листинг (2 первые строки идентичны, на скриншот не поместились) Слева Rio Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Насчёт стандартного подхода А можно это как-то где-то почитать? Желательно на русском ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 16:03 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, гугли bit twiddling hacks ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 16:08 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, 👍 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 16:24 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Polesov Добавляем первой строкой весьма безобидную ни на что не влияющую операцию Код: pascal 1. и получаем замедление где-то в 1.5 раза Уш-да-уш... Оптимизация asm - дело тонкое ... Выложи текущий вариант модуля Чтобы мы тоже погоняли и сравнили Да чо там выкладывать ) Берем код от Aleksandr Sharahov, сгенеренный D7 (только тип входных параметров меняем на word) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Замеряем скорость. Добавляем первой строчкой Код: pascal 1. и сравниваем с тем, что было до ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 16:28 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Ну, и до кучи - наверное, самый компактный вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. И, кстати, не самый медленный ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2020, 20:16 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Хотел через умножения? Распишитесь в получении. Не спрашивай, как ) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 00:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Я тут экспериментирую с SIMD По сути появится возможность анализировать 16 символов за раз Там классная возможность в том, что проведя ряд манипуляций, ты получаешь маску из 16 бит, где ты видишь, символ удовлетворяет твоему условию или нет <..> Получается ты считал 16 символов из памяти. Проанализировал их, получил маску (2 маски по 16 бит) А потом постепенно вычитываешь эти символы из SIMD-регистра и обрабатываешь согласно имеющейся маске Если нет - нужно думать, как делать обработку (возможно, не всю, а некоторые из этапов) тру-симдовским методом - считать обе ветки условия и микшировать их по маске, без посимвольного разбора и условных jmp-ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 00:54 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Так этот вариант ещё медленнее, чем через сдвиги ) Но спрашивать не буду Видимо всё равно не пойму ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 01:37 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky, Зависит от алгоритма Наибольшей производительности получается достичь если все символы ASCII Условно говоря при конвертации Ansi в Utf8 - тупо кидаешь все символы и всё Но возникает вопрос, как быть если встречен не целевой символ Можно прочитать и обработать его стандартным способом А можно прикинуть, что в SIMD регистр уже прочитаны данные, а в маске лежит инфа, где что лежит Получается я SIMD регистр могу использовать не просто, чтобы анализировать, где какие символы идут Но и как оперативное хранилище прочитанных данных! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 01:48 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Aleksandr Sharahov, Так этот вариант ещё медленнее, чем через сдвиги ) Но спрашивать не буду Видимо всё равно не пойму ) Да, он примерно на 25% медленнее, но зато прикольный: использованные в нем константы - единственные, которые позволяют независимо возводить биты числа в квадрат. Других троек констант с такими свойствами нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 01:49 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Aleksandr Sharahov, Так этот вариант ещё медленнее, чем через сдвиги ) Кстати, асм-версия на умножениях обгоняет асм-версию на сдвигах примерно на 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 02:15 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Sapersky, Условно говоря при конвертации Ansi в Utf8 - тупо кидаешь все символы и всё Но возникает вопрос, как быть если встречен не целевой символ SOFT FOR YOU А можно прикинуть, что в SIMD регистр уже прочитаны данные, а в маске лежит инфа, где что лежит Получается я SIMD регистр могу использовать не просто, чтобы анализировать, где какие символы идут Но и как оперативное хранилище прочитанных данных! Если использовать bsr, то нужно очищать каждый найденный бит. Если просто всё перебирать, то это shr/and/условие для каждого бита. Я кстати возился со строками и SIMD год назад: https://www.sql.ru/forum/1319647-a/poisk-v-fayle-s-ispolzovaniem-mmf хотя там разбор маски точно неоптимален, перебор всех бит на Паскале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 06:46 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Описание логики работы алгоритма на умножениях 22239874 и 22239895 . Как и в алгоритме на сдвигах мы вычисляем для переданных параметров (u,v) 2 промежуточных результата t(u) и t(v), а затем на их основе получаем окончательный результат r(u,v)=2*t(u)+t(v). Отличие от алгоритма на сдвигах состоит в том, какими операторами t мы раздвигаем биты каждого параметра. Очевидно, что t(0)=0. Понятно, что если параметр содержит ровно 1 ненулевой бит в i-той позиции, то t(2^i)=2^(2*i)=(2^i)*(2^i), или t(x)=x*x. Т.е. и в этом случае достаточно возвести параметр в квадрат. При возведении в квадрат параметра, содержащего 2 ненулевых бита, в соответствии биномом Ньютона, мы получим (x+y)*(x+y)=x*x+y*y+2*x*y. А правильный результат t(x+y)=x*x+y*y. Т.е. в этом случае мы получили погрешность в виде удвоенного произведения ненулевых битов. Если параметр будет содержать большее количество ненулевых битов, то при возведении в квадрат мы будем получать погрешность для каждой пары битов. Избавиться от погрешности наложением битовой маски на результат возведения в квадрат невозможно, т.к. позиции битов погрешности могут совпадать с позициями битов результата. Однако, если произвольно выбрать некоторое множество разрешенных позиций битов параметра, то для него мы можем указать множество разрешенных позиций битов результата. Далее мы будем рассматривать только "хорошие" множества разрешенных позиций битов параметра, для которых биты погрешности не попадают в множество разрешенных позиций битов результата. Несмотря на то что хороших множеств довольно много, их мощность невелика. Самое большое хорошее множество состоит из 6 битовых позиций, остальные еще меньше. В алгоритме используется минимальное покрытие множества 16 битовых позиций параметра тремя хорошими множествами мощности 5+5+6, которые заданы масками $2492, $4924, $9249. Другие три маски $04104104, $10410410, $41041041 задают три соответствующих им множества разрешенных позиции битов результата. Алгоритм разделяет биты параметра на три части, каждую часть возводит в квадрат, отсекает в них биты погрешности и соединяет части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 11:42 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, У меня мозги не так хорошо работают, чтобы это понять Но я буду стараться :) А почему ты программируешь на D7? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 12:14 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky, Я сейчас низкоуровневый код пишу на Си, а к Delphi/FPC/C++Builder линкую объектники Благодаря инлайн функциям и макросам мне удаётся писать высокопроизводительный код под все 10 платформ (5 ОС по 2 битности). Для x86/x64 юзаются команды SSE2, на ARM - NEON. Пока юзаются регистры по 16 байт. Наверное на следующем уровне перейду на 32 или даже 64. Но пока так - всяко лучше, чем регистры общего назначения ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 12:22 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, мне хватает ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 12:25 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky, Раз уже пошла такая пьянка, проиллюстрирую немного :) Есть у меня функции AStrLen/WStrLen/CStrLen. Данная функция написана на Си, но скомпилирована в объектный файл под разные платформы и цепляется как обычная паскалевская функция: Код: pascal 1. 2. 3. Код: plaintext 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. Из кода хорошо видно, что функция эффективно работает только на 64 битах, когда анализируется сразу 4 символа за итерацию. И то, если указатель выравнен на границу WideChar. Кстати я давно использую этот подход, когда через маски и битовые итерации анализируется сразу несколько символов. Минуса 2: во-первых, очень сильно расходуются регистры общего назначения, во-вторых, по сути ты можешь определить только первое вхождение, состояние остальных символов становится неизвестно. С SIMD по сути ты видишь картину целиком, плюс регистры общего назначения практически не расходуются. А на Си есть возможность зафигачить макросы и инлайн функции, что в итоге выльется в удобоваримые конструкции на несколько платформ и реализация сразу нескольких функций. Вот реализация AStrLen/WStrLen/CStrLen: Код: plaintext 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. И вот смотри, в какую красоту превращается WStrLen. По сути там 2 кейса: выравненный и невыравненный. В выравненном анализируется 8 символов за итерацию. В невыровненном 7 + 1 :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 13:44 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU А почему ты программируешь на D7? ну наконец-то ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 14:18 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Sapersky, Я сейчас низкоуровневый код пишу на Си, а к Delphi/FPC/C++Builder линкую объектники Благодаря инлайн функциям и макросам мне удаётся писать высокопроизводительный код под все 10 платформ (5 ОС по 2 битности) Конкретно StrLen - странный пример. Можно подумать, сейчас часто используются нуль-терминированные строки. Или ты там всю RTL переписываешь из любви к искусству? И кстати, какую выгоду даёт выравнивание на x86? У меня сложилось впечатление, что на современных процессорах небольшую, ну может 10%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 17:09 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky Хотя микс из разных языков затрудняет отладку, особенно линковка в виде obj - как их отлаживать из Дельфи? Так же, как функции WinAPI )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 17:31 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky, Ну отлаживать конечно сложнее Тут спорить не буду Ну а что делать? Embarcadero оптимизировать свои компиляторы не хочет Под Linux вообще труба, ещё хуже, чем под Виндой Ну и потом, описывая часть кода на Си, есть перспектива реюзания в Си-проектах А насчёт примера StrLen... это просто пример Я планирую масштабное переписывание функций обработки текстов на зиму. Пока есть несколько функций на SIMD, просто решил показать. Есть ещё CompareMem, сравнение строк. Кто хочет - может запилить бенчмарки, мне пока влом ) Насчёт выравнивания... большая тема Но в StrLen оно имеет смысл не с точки зрения оптимизации, а с той точки зрения, что не учитывая выравнивание, ты всегда можешь попасть на недоступную страницу. Выравнивая адрес, ты всегда можешь гарантировать валидное чтение. Или условно валидное ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 17:32 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
А вообще заходите в наше DelphiCommunity в телеграме! Будем обсуждать там то, что не укладывается в формат форума ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 17:34 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
Sapersky И кстати, какую выгоду даёт выравнивание на x86? У меня сложилось впечатление, что на современных процессорах небольшую, ну может 10%. Без него SSE вообще не работает AFAIK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 19:23 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Я планирую масштабное переписывание функций обработки текстов на зиму и всё, конечно же, будет самым быстрым во всём мире ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 19:31 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
defecator SOFT FOR YOU Я планирую масштабное переписывание функций обработки текстов на зиму и всё, конечно же, будет самым быстрым во всём мире ? Ну, не самым, конечно. Но что глючить будет - это 100%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 19:54 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
alekcvp, Ну не Есть aligned чтение/запись Есть unaligned На современных процессорах как говорят, разницы нет По моим тестам тоже Но кто знает, может на каких-то данных в каких-то случаях всё-таки разница есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 20:41 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Ну не Есть aligned чтение/запись Есть unaligned Там есть всякие функции, которые со строками работают, так вот они вроде требуют выравнивания, иначе AV или что-то такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 21:23 |
|
||
|
Микширование бит
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Embarcadero оптимизировать свои компиляторы не хочет Под Linux вообще труба, ещё хуже, чем под Виндой Под Линух же LLVM, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2020, 23:14 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037816]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
126ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 584ms |

| 0 / 0 |
