|
|
|
Микширование бит
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40022663&tid=2037816]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 515ms |

| 0 / 0 |
