Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Dima Tтоже тормоз Код: plaintext 1. 2. 3. 4. Не мучайтесь. :) Разные варианты этого алгоритма с ветвлениями были испытаны, и все были в 2-3 раза медленнее. Причём это верно и для чисел до 32 бит (когда всё без __int64). тут нет ветвления, если у компилятора есть AI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 17:16 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov..... с использованием CMOV получилось медленнее? не верю ) А я такую полезную инструкцию даже и не помнил ))) Хорошая же идея. После сдвига в >> в регистре флагов окажется младший бит. Т.ч. можно & на ассемблере и не делать. Но все равно. код можно сделать компактным, но скорости не добавит. Все шаги завязанны на переменную d, спекулятивное вычисление фиг получишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 17:18 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevAleksandr Sharahov..... с использованием CMOV получилось медленнее? не верю ) А я такую полезную инструкцию даже и не помнил ))) Просветите меня тёмного, CMOV - это что-то только для x64? Или и для x86 она есть? MS VS C++ её знает? Что она делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 17:25 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Leonid Kudryavtsevпропущено... А я такую полезную инструкцию даже и не помнил ))) Просветите меня тёмного, CMOV - это что-то только для x64? Или и для x86 она есть? MS VS C++ её знает? Что она делает? есть везде, если комп не ископаемый, ассемблер точно знает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 17:34 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
IMHO Т.к. от длинного счетчика цикла вполне можно уйти. Скорее всего, от MMX выйгрышь будет. Избавление от ненужных __int64 дало +25% ( 24 сек -> 18 сек), наверное и MMX даст примерно столько же. Но дальше - уже чисто тактовая частота процессора. Тут оптимизировать особо нечего, одно число (d) в цикле крутится. Т.ч. все конвееры современных процессоров идут лесом. Тут только в математику вдумываться. Т.к. мне кажется, что близкие циклы зависят только от младших битов A. Т.ч., мне кажется, вполне можно за одну операцию обрабатывать сразу несколько битов в D. "Перепрыгивая" циклы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 18:22 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Dima TВ продолжение 21476642 добавлю x32 вариант, тут тоже нет обращений к памяти внутри цикла Так компилируется в x32 Очень интересно. Особенно, в чём глубокий смысл "and edx, 29h "? Похоже компилятор перестарался 4294967337 = 0x00000001000000 29 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 18:27 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
чуть больше 9 сек на i5-2300, не отлаживал, параметры передаются по адресу Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 18:44 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
увидел опечатку, наверно теперь пострадает скорость ) sbb ecx, 0 заменить на sbb ecx, ecx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 18:50 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov shrd esi, edi, 1 sbb ecx, 0 Красиво. А я даже не знал, что в Intel есть инструкции с двойной точностью ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 18:57 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov Код: pascal 1. 2. 3. 4. 5. 6. Это проверка на выход из цикла. А где сам декримент переменной цикла? Или я совсем ослеп ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 19:04 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevAleksandr Sharahov Код: pascal 1. 2. 3. 4. 5. 6. Это проверка на выход из цикла. А где сам декримент переменной цикла? Или я совсем ослеп ((( Действительно, забыл, исправленный вариант с новыми ошибками (менее 13 сек на 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 20:44 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®, Пробовал развернуть цикл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 20:52 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 20:58 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Финальное исправление все 3x3 контрольных примера проходят Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 21:14 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
maytonAR®, Пробовал развернуть цикл? В каком смысле развернуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 21:32 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevAleksandr Sharahov shrd esi, edi, 1 sbb ecx, 0 Красиво. А я даже не знал, что в Intel есть инструкции с двойной точностью ((( Только она не совсем двойной точности. Она двигает первый операнд, а второй использует только чтобы взять из него замещающие биты биты, а сам он остаётся не сдвигается. Просветите пожалуйста: CMOV меняет состояние флага CF ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 21:40 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®maytonAR®, Пробовал развернуть цикл? В каком смысле развернуть? Ну... обычно если число итераций заранее известно то делают копи-пасту тела цикла. Выглядит по индусски... Но работает для highload. У тебя второй аргумент - всегда константа? На этом можно сыграть. Твой код похож на криптографию. Есть раунд. Внутри некая последовательность операций над ключом. Только крипто-раунд возвращает шифро-блок. А ты возвращаешь какой-то булевый признак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 21:53 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®Просветите пожалуйста: CMOV меняет состояние флага CF ? не меняет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 21:57 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
maytonAR®пропущено... В каком смысле развернуть? Ну... обычно если число итераций заранее известно то делают копи-пасту тела цикла. Выглядит по индусски... Но работает для highload. У тебя второй аргумент - всегда константа? На этом можно сыграть. Твой код похож на криптографию. Есть раунд. Внутри некая последовательность операций над ключом. Только крипто-раунд возвращает шифро-блок. А ты возвращаешь какой-то булевый признак. Ну, не очень-то и по идусски. В данном случае даже один лишний переход будет иметь большое значение, т.к. их тут немалая концентрация. В общем, обязательно стоит попробовать. ща только сериальчик досмотрю ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:17 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
maytonAR®пропущено... В каком смысле развернуть? ... обычно если число итераций заранее известно... У тебя второй аргумент - всегда константа? Второй аргумент - максимальное возможное число проходов цикла, а фактическое число проходов заранее неизвестно. Для тех значений первого аргумента, для которых f() = 0, оно может быть и очень небольшим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:19 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
AR®, Постановка задачи неверная. Нужно внешний цикл вызова твоей f параллелить. Причем параллелить с SSE. В лоб при таких условиях хороший компилятор не обогнать никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:25 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Siemargl, насколько я понял автор ведет борьбу на ниве 32х битных легаси машин с ММХ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:29 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
SiemarglAR®, Постановка задачи неверная. Нужно внешний цикл вызова твоей f параллелить. Причем параллелить с SSE. В лоб при таких условиях хороший компилятор не обогнать никак. Дык обогнал уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:30 |
|
||
|
Ассемблер - регистры MMX - команды условного перехода.
|
|||
|---|---|---|---|
|
#18+
Тут цена вопроса какая? Можно сделать мемоизацию. Сделаем табличку на 2^33 bits = 2^(33-3) bytes. Для аргумента а. Аргумент b y нас константа. Его можно хардкодить. И заполним табличку расчитанными значениями функции f(a,b)==f'(a). Редукция подразумевается. Аргумент b уже учтен в новой функции b' На расчет таблички уйдет много времени. Но это можно делать постепенно. И сохранять результат на диск. Вобщем насколько далеко готов автор зайти в попытке ускорить эту функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 22:51 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39657775&tid=1340094]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 297ms |
| total: | 584ms |

| 0 / 0 |
