Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
m_Slaне сильно я встроенным дизассемблерам доверяю а дизассембер то зачем? ключики получения ассемблерного порождения никто не отменял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 10:25 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Последний исходник вообще вызывает удивление. Он алгоритмически сворачивается к проверке на диапазон от 1 до 31 (для целых). И если компиллятор способен объединять похожие ветки то этот "switch(){}" должен вырождаться в один "if {}". Вобщем дайте больше энтропии мать ее так. Больше энтропии.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 11:10 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonесли компиллятор способен объединять похожие ветки то этот "switch(){}" должен вырождаться в один "if {}". Но в данном случае он вырождается в переход по таблице, как я уже показал в начале темы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 11:17 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Провёл два теста. Второй вариант, когда 31 проверяется изначально более устойчивый. Обратите внимание что время примерно одинаково на всех 10 тестах для данного случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
А в данном случае все по порядку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:15 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПровёл два теста. Хорошо бы код... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:19 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Провал возможно из-за того что у тебя параллельно какой-то расчет тяжелый запущен. Смотри диспетчером задач - кто проц использует. Ты в Debug или Release компилируешь? Debug в MSVC без оптимизации, т.е. компилируется буква в букву как ты написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryПровёл два теста. Хорошо бы код... Не сильно изменил первую версию :) Код: 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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:25 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Тут из-за лени вместо редкой записи в переменную t Код: plaintext 1. Мы получаем регулярную запись в t. Не знаю как компиллятор это соптимизирует. Возможно так и не будет. Но я-бы не делал лишний раз тернарную операцию там где раньше мы обходились простой проверкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
а вот release. Может и правда слабая энтропия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercury, давай вместо цыфирей - поток английского текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Саш, добавь энтропии, твой код. Это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Компилируется как Код: plaintext 1. хотя бы прибавляй не 1, а разные значения. И в case можно не подряд значения взять. кстати тут +=1 в INC откомпилировалось. Еще у тебя в case 29: пропущен break. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:40 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
нашел ассемблерную команду, которой переход делается Код: plaintext 1. Т.е. по адресу TableAddress таблица адресов куда переходить для каждого значения case. Т.е. без разницы на каком месте твой case и сколько case используется. Но если добавить case 1234567890: то он его будет проверять отдельно перед JMP, т.е. при наличии дыр в значениях case будет больше проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:56 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima T, у него Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:56 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
JMP - самая полезная в мире команда процессора. Мы любим ее... Мы ценим.. И никогда от нее не откажемся. [здесь должен быть тролфейс с глазами полными слёз но я нихера его не могу найти] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:13 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Доказано, таблица переходов есть и оптимизировать некуда. Разве что конкретно этот switch() заменить на массив: Код: plaintext 1. 2. так вдвое быстрее. PS Саш, провалы в твоих замерах могли быть из-за защиты от перегрева проца твоего ноута или наоборот из-за переключений проца в форсированный режим, или от желания поберечь заряд аккума. У тебя ноут от батарейки работает или от сети? Во время подобных замеров втыкай в розетку, чтобы батарейку не экономил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
У него отклонение не более 3%. Я-бы даже не анализировал такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:19 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TСаш, добавь энтропии, твой код. Это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Компилируется как Код: plaintext 1. хотя бы прибавляй не 1, а разные значения. И в case можно не подряд значения взять. кстати тут +=1 в INC откомпилировалось. Еще у тебя в case 29: пропущен break.Согласен с этим. По существу теста как такового и не было ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:28 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Вот где-бы я пилил энтропийный автомат. Так это в XML-парсере "ручного изготовления". Пример. Чортовы угловые скобки флудят как ненормальные. На графе состояний - это просто кластер. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:29 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonУ него отклонение не более 3%. Я-бы даже не анализировал такое. Сначала побольше было 17655105 , но там он в дебаге компилировал, судя по цифрам молотило две минуты. За это время железо могло адаптацию под нагрузку начать. Затестил: debug тоже в JMP DWORD PTR компилирует switch() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Ага... вместо сложения с 100 можно сделать 100 инкрементов. (Индусы радостно закивали головами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:32 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа вот release. Может и правда слабая энтропия А что с чем сравнивалось-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:34 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Илья, в первом случае кейс на сравнение с 31 был на первом месте, во втором кейсы были упорядочены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:09 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
sln, который использовал для тестов. Но вторую часть теста /area + goto не осилил/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38961572&tid=2018778]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 300ms |
| total: | 464ms |

| 0 / 0 |
