User Tag List

Показано с 1 по 10 из 331

Тема: Вычисление числа Пи на ассемблере

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Умножение 16*16=32 на 8080 заметно выгоднее реализовать через два умножения 16*8=24 и сложение. Это я про без таблиц, с ними, понятное дело, еще быстрее.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Это я про без таблиц, с ними, понятное дело, еще быстрее
    Тут я был не совсем прав. Время четырех умножений 8*8 с использованием таблицы квадратов вполне сравнимо с одним умножением 16*16, реализованным через два умножения 16*8 (с развернутыми циклами). Т.е. маленькая таблица в данном случае не особо поможет.

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

  3. #2

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,927
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Умножение 16*16=32 на 8080 заметно выгоднее реализовать через два умножения 16*8=24 и сложение.
    Да, если при этом учесть, что когда старший байт равен нулю, то можно и одним умножением обойтись. DAD H/RAL немного быстрее, чем сдвиг пар DE/HL, тут можно выиграть пару тактов, лишь бы сложение их потом не съело.

    - - - Добавлено - - -

    По совету ivagor-а переделал умножение. Теперь этот модифицированный spigot, выдающий по 4 цифры за цикл, работает 8.14269 сек.
    Последний раз редактировалось b2m; 15.11.2015 в 16:48.

  4. #3

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Кстати, насчет реализации умножения и деления на z80 - не новая, но очень хорошая статья. Думаю про нее большинство знает, но может кто не читал. И, конечно, то, что там написано, вполне можно адаптировать для других процессоров.
    Посредственная статья. Там нет алгоритма умножения с 512-байтной таблицей, а деления хорошего вообще нет. Советую - http://cpcwiki.eu/index.php/Source_Codes#Algorithms
    В z80 для арифметики реально полезна только ADC HL - всё остальное почти полная ненужность. В DIV32 заменил ADD, JP C, INC на ADC - стало peaльнo быстрее. Кстати, DIV32 ошибочна для деления чисел с 32-м разрядом.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Тут я был не совсем прав. Время четырех умножений 8*8 с использованием таблицы квадратов вполне сравнимо с одним умножением 16*16, реализованным через два умножения 16*8 (с развернутыми циклами). Т.е. маленькая таблица в данном случае не особо поможет.
    Сначала не поверил, но проверил и оказалось, что вы правы. Выигрыш могут дать только таблицы 16К на 30-40% или 8К на 10-15%. На 6502 ситуация другая, там 16 разрядных операций нет, а работа с памятью быстрая.

    Сделал, как кажется, последние варианты для z80 и 6502. 10000 на spigot-алгоритме не сделать, нужно 70 К для массива. Результаты:
    6502 2.2Mhz 100 - 3.74c, 1000 - 5м 40.02с
    z80 4MHz 100 - 4.51c, 1000 - 6м 41.92с (реальная частота 3.2, поэтому на 1.78 MHz было бы примерно 8.1 сек на 100 цифр)
    Получилось, что на тяжелой арифметике 6502 на 75% и более быстрее.
    Почти уверен, что z80 на одинаковой с 8080 частоте для арифметики быстрее лишь процентов на 5-10.
    Нужны ли программки? Неужели кто-то их запускает? Тема интересная, плохо что не получилась популярной.
    Последний раз редактировалось litwr; 15.11.2015 в 22:39.

  5. #4

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Посредственная статья
    На мой взгляд хорошая обзорная статья, в которой рассмотрены основные алгоритмы и приведено много ссылок. Да, готовые процедуры там не на все случаи жизни, но для 8080 я оттуда готовыми и не пользовался, а вот некоторые алгоритмы впервые увидел там (это было, скажем так, не сегодня).

    - - - Добавлено - - -

    Интересно, что для 8085 можно оптимизировать pi32 на уровне z80 (может даже лучше). Там мало новых команд, но это именно те команды, что надо

  6. #5

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделал пока программку для БК. Запускал в эмуляторе BK-TERAK, который вроде бы работает чуть быстрее чем положено. Проверил бы кто на реальном железе... Спектрум не догоняет. Писать на ассемблере БК одно удовольствие, но работает медленно.
    На этом эмуляторе 100 цифр за 6 сек, 1000 - за 9м 21с.
    Прикрепляю и файлы для "иностранцев" с исходниками и файлами для эмуляторов или для переноса на железо.
    Нажмите на изображение для увеличения. 

Название:	bk.png 
Просмотров:	427 
Размер:	12.3 Кб 
ID:	54933
    pi-bk.zip
    pi-amstrad-cpc.zip
    pi-commodore264.zip

    Цитата Сообщение от sergio78 Посмотреть сообщение
    это получается что 6502 быстрее z80, архитектурно лучше сделан? несмотря на то что сделали 6502 раньше на несколько лет. слышал у 6502 ещё хитрый 10 значный режим имеется, случаем не его здесь испльзуют в подсчётах?
    6502 - это как окно в мир, где просто делают хорошие вещи, без оглядки на маркетинг и политику. Его сделали по революционной технологии, по которой цена получалась раз в 5 меньше, а скорость в 2-3 большей. Возможно z80 это была глубоко эшелонированная защита связанной с политикой Intel от развития этой технологии, результаты который были достигнуты только с 80186. В итоге фирма MOSTEC была разгромлена еще в 1976 и 6502 штамповали почти без изменений до начала 90-х. Но 6502 успел вдохновить на разработку первых ARM.
    Как слышал от знатоков, американских программистов, которые в 80-е писали под разные платформы (6502, z80, 6809, ...), соотношение по скорости 6502 к z80 принималось от 2.2 (меньшинством) до 2.4 (большинством). Хотя на командах пересылки данных ldir/lddr z80 только на 50% медленнее. С другой стороны, на переходах он уже медленнее в 4 раза. По мнению этих же знатоков коды для z80 получались процентов на 10-20 поменьше. Работать c BCD умели и 8080/z80 и все x86 до архитектуры x86-64, но в 6502 это сделано напрямую без дополнительных команд, существенно быстрее.

    Цитата Сообщение от ivagor Посмотреть сообщение
    На мой взгляд хорошая обзорная статья, в которой рассмотрены основные алгоритмы и приведено много ссылок. Да, готовые процедуры там не на все случаи жизни, но для 8080 я оттуда готовыми и не пользовался, а вот некоторые алгоритмы впервые увидел там (это было, скажем так, не сегодня).
    Возможно выразился излишне резко. Имел только в виду, что для того, кому нужно умножение или деления, статья малополезна. Прочитав её, можно с неделю сочинять сочинения на тему "хорошие алгоритмы" и только.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Интересно, что для 8085 можно оптимизировать pi32 на уровне z80 (может даже лучше). Там мало новых команд, но это именно те команды, что надо
    Не перепрограммировались? Насколько знаю, в 8085 новых команд для арифметики нет.

  7. #6

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    100 цифр за 6 сек, 1000 - за 9м 21с
    Интуиция настоятельно подсказывает мне, что 8080 с частотой 1.78 МГц может посчитать почти за то же самое время.

    Цитата Сообщение от litwr Посмотреть сообщение
    Насколько знаю, в 8085 новых команд для арифметики нет.
    Это неплохо документированные "недокументированные" команды. Благодаря dkspb теперь известно, что и в 1821ВМ85 они тоже есть.

    - - - Добавлено - - -

    Здорово, что сделали расчет пи для БК!
    Последний раз редактировалось ivagor; 18.11.2015 в 21:43. Причина: исправил опечатку

  8. #7

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Интуиция настоятельно подсказывает мне, что 8080 с частотой 1.78 МГц может посчитать почти за то же самое время.
    Не надорвитесь. Сделал ещё вариант для БК0011М с интерфейсом и замером времени по 48.5 Гц прерыванию. В более точном эмуляторе 100 цифр за 4.5 секунды, 1000 - за 7м 31.3с. Это уже близко к Спектруму, а может и чуть быстрее. Для окончательного вердикта нужен прогон на железе.
    Не удержался и сделал ещё программку для IBM PC (команды только для 8088). 3апустил в довольно аккуратном эмуляторе первых РС РСЕ (т.е. и примерно и наших ЕС-1840/1841, ...), результат 100 цифр за 1.06с, 1000 - за 1м 26.74с. Получается, что даже по максимуму используя преимущества 8088 (деление, умножение) на частоте 4.77 МГц, скорость его работы сравнима с 6502 на 2 Мгц (Apple III, Commodore CBM II, BBC Micro) или даже с z80 на 4 Мгц. Кстати, упомянутые коммодоры и бибисишки на американский рынок просто не пустили...

    pi-bk11m.zip
    Нажмите на изображение для увеличения. 

Название:	ibm-pc.png 
Просмотров:	450 
Размер:	15.0 Кб 
ID:	54949pi-ibmpc.zip

    Цитата Сообщение от ivagor Посмотреть сообщение
    Это неплохо документированные "недокументированные" команды. Благодаря dkspb теперь известно, что и в 1821ВМ85 они тоже есть.
    Благодарю, не знал. Там, действительно, мощные команды, лучшие чем у z80. Странно, что Интел их скрыла - политика... Но разве в Радио-86РК не 8080? В СССРе делать 8085 массово не умели (в вики про 8085 почти ничего)?
    Последний раз редактировалось litwr; 20.11.2015 в 10:48.

  9. #8

    Регистрация
    04.03.2010
    Адрес
    Россия. Пятигорск.
    Сообщений
    2,296
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Но разве в Радио-86РК не 8080?
    Нет, там КР580ВМ80А.

  10. #9

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    litwr, респект за разнопроцессорную реализацию расчета пи.

    Цитата Сообщение от litwr Посмотреть сообщение
    результат 100 цифр за 1.06с, 1000 - за 1м 26.74с. Получается, что даже по максимуму используя преимущества 8088 (деление, умножение) на частоте 4.77 МГц, скорость его работы сравнима с 6502 на 2 Мгц (Apple III, Commodore CBM II, BBC Micro) или даже с z80 на 4 Мгц.
    Не врубился - 100 цифр за 1.06с это на какой частоте? Если 4.77, то это довольно неплохо. Ну и программу для 8088 можно заметно ускорить (не стоит использовать команды умножения, таблицы - наше все).

    По поводу использования клонов 8085 в советских компьютерах - как минимум были ПК-6128Ц (своеобразный клон вектора) и Русич (своеобразный клон специалиста). Плюс на zx-pk.ru есть темы о новодельных вариациях на 1821ВМ85 (или ИМ85?)

    Еще исправлюсь - выше неправильно написал ник dk_spb

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    не стоит использовать команды умножения, таблицы - наше все
    Признаю ошибку, в общем случае mul 16*16 быстрее. Но все же можно немного ускорить *10000

  11. #10

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Писал же - эмулятор первого писи-5150 - http://www.hampa.ch/pce/pce-ibmpc.html. Конечно, 4.77.
    Дело в том, что цифры не стыкуются.
    8088 на 4.77
    Цитата Сообщение от litwr Посмотреть сообщение
    100 цифр за 1.06с, 1000 - за 1м 26.74с
    Цитата Сообщение от litwr Посмотреть сообщение
    6502 2.2Mhz 100 - 3.74c, 1000 - 5м 40.02с
    т.е. не получается
    Цитата Сообщение от litwr Посмотреть сообщение
    даже по максимуму используя преимущества 8088 (деление, умножение) на частоте 4.77 МГц, скорость его работы сравнима с 6502 на 2 Мгц
    Разве что для 6502 уже ускорили в 3.5 раза, но в треде про это информации я не видел

    Для 8088 я бы поускорял, но не на чем проверить и я не в курсе, насколько точна (по таймингам) эмуляция 8088 на сегодняшний день.

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

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

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

Похожие темы

  1. Арифметические процедуры на ассемблере
    от spensor в разделе Программирование
    Ответов: 27
    Последнее: 13.05.2017, 20:56
  2. Мнемокоманды и числа.
    от ALKO в разделе Программирование
    Ответов: 0
    Последнее: 15.02.2014, 03:49
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Определение числа сторон
    от mungo в разделе Внешние накопители
    Ответов: 1
    Последнее: 16.03.2012, 18:06

Метки этой темы

Ваши права

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