|
|
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Polesov Да я уже посыпал голову пеплом ) 22084549 Polesov Правда, результат будет скорректирован операцией And . Я имел ввиду, что если удастся произвести чтение 8 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 14:24 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Polesov А сохранение значения регистра RSI в регистре R9 быстрее, чем сохранение в стеке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 14:24 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Polesov А сохранение значения регистра RSI в регистре R9 быстрее, чем сохранение в стеке? Понятно. Просто привык экономить на использовании регистров ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 14:26 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Polesov А сохранение значения регистра RSI в регистре R9 быстрее, чем сохранение в стеке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 14:55 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Квейд Если часть стека, куда делается push, лежит в кеше процессора, то затраты по времени такие же, как регистр -> регистр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 14:59 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Polesov А сохранение значения регистра RSI в регистре R9 быстрее, чем сохранение в стеке? Сделал тест: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. По результатам 3-х измерений: 1. вариант сохранения в регистре: 636401, 637557, 641079 2. вариант сохранения через стек: 586241, 583948, 584917 OP-коды сохранения через стек однобайтовые. Думаю, что время модификации регистра ESP на аппаратном уровне кране мало. Отсюда и незначительный выигрыш по времени, так как Mov регистр, регистр - OP-коды трехбайтовые. А незначительный потому, что регистр - регистр быстрее, чем регистр - память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 15:20 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Только автору нужно было вытащить определенные байты из массива, а не первые 8 Пример очень гибкий Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Только вот Я не понял, кто врёт.. C++ или Delphi потому что последние байты всегда неверные В c++ = 217871544892981507 В delphi = 217871544892981506 Код: 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. Так же если мы будем 16 байт складывать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. c++ = 217871544892981511 Delphi = 217871544892981506 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 16:51 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Polesov _Vasilisk_ пропущено... Конечно. Во-первых доступ к регистру всегда был быстрее доступа к памяти, а во вторых push, кроме собственно mov, еще и модифицирует esp Сделал тест: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. По результатам 3-х измерений: 1. вариант сохранения в регистре: 636401, 637557, 641079 2. вариант сохранения через стек: 586241, 583948, 584917 OP-коды сохранения через стек однобайтовые. Думаю, что время модификации регистра ESP на аппаратном уровне кране мало. Отсюда и незначительный выигрыш по времени, так как Mov регистр, регистр - OP-коды трехбайтовые. А незначительный потому, что регистр - регистр быстрее, чем регистр - память. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 16:56 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный Только вот Я не понял, кто врёт.. C++ или Delphi потому что последние байты всегда неверные Врут все, в том числе и Я но больше компиляторы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Выдал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Delphi выдал Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: 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. После 216456473394479621 идут совершенно разные значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 17:17 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Квейд Хммм, чуть-чуть переделал (и собрал в 32 бита, из-за вставки) Действительно, хммм ... Переделал на твой вариант 32-х битный со вставкой и сравнил в вызовом BlahBlah: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Видно, что в 32-х битном варианте Mov EAX, ESI быстрее Push Может быть, разница обусловлена битностью приложения? Проверить 64-х битный вариант сравнения не представляется возможным из-за asm вставки. P.S. Измерял на процессоре Intel Core i7-4790 3.6 GHz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 17:54 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
фасткодера на вас главного нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 17:58 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Polesov Видно, что в 32-х битном варианте Mov EAX, ESI быстрее Push А вот и ответ: в 32-битном варианте OP-коды сохранения через регистр составляют 2 байта Код: powershell 1. 2. в 64-битном варианте OP-коды сохранения через регистр составляют 3 байта Код: powershell 1. 2. Сохранение через стек в обоих вариантах по одному байту. Поэтому в 64-битном варианте сохранение через стек чуть быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 18:20 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Кто нибудь знает, почему вот это Код: plaintext 1. 2. 3. Не тоже самое что Код: pascal 1. 2. 3. 4. Результатом здорового языка должен стать 506938662295044096. А Delphi компилятор с лазуром такие "Братишка, я тебе покушать принёс: 11691592161297506368" В чём магия языка то??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 21:37 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Топик все больше напоминает некую специальную олимпиаду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 21:39 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, открой процессорное окно и посмотри. что тут гадать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 22:16 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный В чём магия языка то??? Кури доки о приоритетности операторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 22:20 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey ВсеРазумный В чём магия языка то??? Кури доки о приоритетности операторов. У меня от конструкций " << 2 * 8" и " shl 2 * 8" потекли слезы умиления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 22:35 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
rgreat, Потому что ты не понимаешь логики работы, а оно работает как никак на сях всё правильно. А я кстати нашёл ошибку тем временем в примере ТС Надо с Код: pascal 1. Заменить на Код: pascal 1. Тогда он перестанет выводить каких 5. И Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 22:55 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
А я ползаю и думаю, чего у меня результаты не сходятся.. Решил покурить пример ТС и нашёл ошибку. Теперь работает как надо Хехе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 22:56 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#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. 4972544674847066117 << Фикшенная функция ТС 4972544674847066117 << Моя функция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2020, 23:30 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Не нашёл времени реализовать asm для 32 бит, реализовал только для 64. И в интернете нашёл swap А так же добавил пример такого Код: pascal 1. Код: 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. Думаю понятно привёл пример, если кому то взбредёт в голову реализовать цикл для 8 байт + shl пучка Код полностью рабочий, и выдаёт те же результаты to_num : 523893758643996161 test : 523893758643996161 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2020, 05:26 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, где ошибка то? у меня в параметрах функции передается начальный и конечные позиции, а не начало и длина ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2020, 18:11 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за старания и внимание. Ассемблерские вставки буду использовать только если совсем прижмет. AQTime показывает, что и так сойдет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2020, 18:19 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
cptngrb, Как где ошибка ? Ты только на начальной позиции можешь узнать элементы. А вот со второй части ты никогда не узнаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2020, 18:22 |
|
||
|
Ускорить функцию перевода массива байт в число
|
|||
|---|---|---|---|
|
#18+
cptngrb, То есть есть строка 12345678_12345678 Ты с ошибкой в коде можешь узнать только до _ черты к примеру с 5 по 8 элемент. А вот с 10 элемента по 14 ты никогда не узнаешь с ошибкой в коде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2020, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39929516&tid=2038559]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
323ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 625ms |

| 0 / 0 |
