Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 54

Тема: Быстрое умножение на 10000

  1. #1
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    530
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Быстрое умножение на 10000

    С помощью экспертов по Амигам вышел на отличный алгоритм для такого умножения. К1801ВМ1 несколько неуклюж с таблицами, что не позволяет сделать на нем быстрое табличное умножение как на z80 или 6502. Кстати, мотороловские процессоры (680x, 680x0) тут также неуклюжи. Поэтому с 68020 иногда быстрее использовать сдвиги, чем довольно быстрое (28 тактов) аппаратное умножение. Решил поделиться. Как никак, а красота. Константа data умножается беззнаково на 10000, результат в r2 - high, r3 - low.
    Код:
             mov #data,r0
             clr r4
             clr r2
             mov r0,r3 
             asl r3
             rol r2            
             asl r3
             rol r2
             asl r3
             rol r2
             sub r3,r0
             sbc r4
             sub r2,r4
             asl r3
             rol r2
             sub r3,r0
             sbc r4
             sub r2,r4
             sub r3,r0
             sbc r4
             sub r2,r4
             swab r0
             swab r4
             clrb r4
             bisb r0,r4
             clrb r0
             sub r0,r3
             sbc r2
             sub r4,r2
    С аппаратным умножением (K1801ВМ1Г), конечно, короче, но не факт, что быстрее.
    Код:
             mov #data,r2
             mul #10000,r2
             bpl bypass
             add #10000,r2
    bypass
    Интересно узнать, какое и насколько быстрее. Прикрепляю программки для тестирования для БК0010 и 0011. C эмулятором аппаратное значительно быстрее, но там эмулируется какая-то PDP-11 с более быстрым, чем у ВМ1Г умножением. Программка с приведённым выше программным умножением с БК0011 под медленным RT-11 обогнала быстрый американский Коммодор-64 (европейский медленнeе) под максимально быстрым бейсиком в ПЗУ - http://litwr2.atspace.eu/pi/pi-spigot-benchmark.html. А с аппaратным возможно обогнала бы и MSX-2.
    pi-bk.zip

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,059
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В чем смысл делать быстрое умножение на 10 тысяч? Это десятичное число?

    Судя по количеству инструкций, возможно будет быстрее частично преобразовать число в двоично-десятичное представление, добавить нулей и загнать обратно.

  4. #3
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    530
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Приведен пример красивого алгоритма. Если посмотреть на него в контексте расчета π, то мне кажется, что уважаемый blackmirror реализовал не самый быстрый расчёт. Деление в двоичной системе все же быстрее, чем в любой другой. Будут, конечно, издержки при печати, но там линейный расчет, а не квадратичный. Ещё будут бóльшие издержки (процентов на 80) по памяти. Если вы не в теме, то приведу более конкретное объяснение, например, нужно считать 10000*d/b. Если использовать BCD (что требует почти мифических CIS инструкций) или 100-чную систему, то мы выиграем на умножении и потом при печати, но добавочноые издержки на деление должны быть выше.
    Классная у вас коллекция, даже с TI99/4A. Не подскажите, а Амигу-1230M можно использовать просто как А1200, т.е. с 68020 на 14 МГц?

  5. #4
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,059
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Приведен пример красивого алгоритма. Если посмотреть на него в контексте расчета π, то мне кажется, что уважаемый blackmirror реализовал не самый быстрый расчёт. Деление в двоичной системе все же быстрее, чем в любой другой.
    Ну да, ну да, ещё Жванецкий как-то об этом говорил:

    «Если других туфлей не видел, наши вот такие! Если других машин не видел, «Запорожец» вот такой! И все! Живи не тужи. Всем рекомендую.»

    Выходите из плоскости, чтобы умножить 1 на 10000 или разделить 10 на 1 вообще не надо никаких действий выполнять.

    Будут, конечно, издержки при печати, но там линейный расчет, а не квадратичный. Ещё будут бóльшие издержки (процентов на 80) по памяти. Если вы не в теме, то приведу более конкретное объяснение, например, нужно считать 10000*d/b. Если использовать BCD (что требует почти мифических CIS инструкций) или 100-чную систему, то мы выиграем на умножении и потом при печати, но добавочноые издержки на деление должны быть выше.
    Переходите на симметричные системы счисления (негабинарную или троичную симметричную, например), вас там ждёт «сурпрыз».

    Не подскажите, а Амигу-1230M можно использовать просто как А1200, т.е. с 68020 на 14 МГц?
    Запросто, плата ускорителя легко вынимается и машина опять становится стандартной А1200. Можно отдельно добавить фаст-памяти, оставив процессор таким-же.

  6. #5
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    530
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MacBuster Посмотреть сообщение
    Ну да, ну да, ещё Жванецкий как-то об этом говорил:
    «Если других туфлей не видел, наши вот такие! Если других машин не видел, «Запорожец» вот такой! И все! Живи не тужи. Всем рекомендую.»
    Выходите из плоскости, чтобы умножить 1 на 10000 или разделить 10 на 1 вообще не надо никаких действий выполнять.
    Переходите на симметричные системы счисления (негабинарную или троичную симметричную, например), вас там ждёт «сурпрыз».
    Делить-то надо на всё нечетное. И показали бы как надо на настоящем честном железе, а не в горе-эмуляторах как мне приходится.
    Цитата Сообщение от MacBuster Посмотреть сообщение
    Запросто, плата ускорителя легко вынимается и машина опять становится стандартной А1200. Можно отдельно добавить фаст-памяти, оставив процессор таким-же.
    Если собиретесь сделать профилактический техосмотр, то просьба на прогон пи-теста. 68020 эмуляторами не очень точно поддерживается. Больно сложная там архитектура с несколькими конвейерами инструкций.

  7. #6
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,059
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Если собиретесь сделать профилактический техосмотр, то просьба на прогон пи-теста.
    Хорошо, попробую в выходные.

  8. #7
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,059
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хм, посмотрел исходник - он вроде по умолчанию собирается для 68k. Тот исполняемый файл, который скачивается, для чего собран - 68к или для 68020? Или вам без разницы?

  9. #8
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,059
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    К сожалению возникли некоторые сложности - перестал работать внешний USB-дисковод, и пока не удается перенести файлы на Амигу

    Судя по всему, пришло время ставить в Амигу эмулятор дисковода...

  10. #9
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    12,922
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    71
    Спасибо Благодарностей получено 
    780
    Поблагодарили
    531 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MacBuster Посмотреть сообщение
    посмотрел исходник - он вроде по умолчанию собирается для 68k.
    как я понял итоговый/запускаемый вариант этого теста в adf ?

  11. #10
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    530
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Там два файла pi-amiga и pi-amiga1200. Они исполнимые. Они в архиве и отдельными файлами и в ADF. Pi-amiga должна запускаться в шелле воркбенча как на 500-й так и на 1200-й, а pi-amiga1200 может работать только на 1200-й. Можно оба файла и собрать из прилагаемых исходников, малюсенький сценарий для сборки там тоже есть.
    Жаль, что техника ломается. У меня старый комодорчик работает минут 10-20 и ломается, надо конденсаторы кругом менять, а паять не умею.

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Деление/умножение
    от Serdjuk в разделе Программирование
    Ответов: 51
    Последнее: 25.04.2018, 15:54
  2. Быстрое вращение в 3Д
    от TmK в разделе Программирование
    Ответов: 26
    Последнее: 24.05.2009, 04:01
  3. Быстрое самоуничтожение
    от Barmaley_m в разделе Программирование
    Ответов: 13
    Последнее: 25.09.2007, 09:20
  4. Процедуры на асме (умножение деления)
    от gres8 в разделе Программирование
    Ответов: 3
    Последнее: 25.01.2007, 10:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •