Эта тема создана как ответвление темы "Отечественные компьютеры: быстродействие"
Очень настаиваю очень важные философские вопросы поднимать не здесь, а в отдельной теме во флейме "Пожужжим о "расчете числа Пи"
"Вычисление числа Пи с заданной точностью на ассемблере как тест для процессоров", надеюсь полная постановка задачи всем известна.
Для сверки результата можно использовать 10 миллионов цифры по ссылке под спойлером - осторожно 10 миллионов символов это ТРАФИК!:
Скрытый текст
Сообщение от
Vslav
[свернуть]
Желающие запостить свои творения в эту тему - прошу не стесняться своего кода, надеюсь никто смеяться не будет и гуру помогут выправить код.
Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.
Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
z80pi.rar
Результаты:
Сообщение от
Vslav
1801ВМ2 @ 10MHz EIS On (HMUL=1, HDIV=1):
100 знаков 0,50 сек (было 0,58)
Сообщение от
litwr
PDP-11/83(18 МГц).
100 знаков - 0.2
Сообщение от
Vslav
Реальный 1801ВМ1Г 5МГц (+MUL)
100 знаков - ~2,1 сек
Сообщение от
MiX
ДВК-3:
100 знаков- 0,7сек
Сообщение от
ivagor
Вектор:
100 - 2.7568 сек
Сообщение от
litwr
Коммодор +4 (MOS 8501 @ 1.76 МГц) - 1.72
Amstrad CPC6128 (Z80, @ 4 Мгц) - 2.48
Сообщение от
litwr
РК86:
Самый первый результат конечно же был прислан для
Сообщение от
b2m
Радио-86РК, 100 знаков, 53 секунды
, впоследствии улучшен
Сообщение от
b2m
вариант без таблиц, 8.89 сек.
pi.rar
Сообщение от
b2m
с новой реализацией умножения теперь 8.117 сек
pi32.rar
Сообщение от
ivagor
Очередная и, надеюсь, последняя версия spigota -
pirk20.zip
100 знаков - 19897238 тактов - 11.19 сек (это с расчетом таблицы!)
535 знаков - 551337754 тактов - 5 мин 10 сек
Запускать нужно G4200
Сообщение от
litwr
Получается, что на "тяжёлой" арифметике 6502 только раза в полтора побыстрее на одинаковой частоте.
Адаптируйте и проверьте пожалуйста счастливые обладатели Агатов 7 и 9 и собранного Apple I. Кстати реплика не планируется 9ки ?
18.11.2015: впервые портирована простая реализация расчета числа Пи на БК (процессор К1801ВМ1, Система команд по ОСТ 11 305.909-82 (может у кого есть скан этого документа?, поделитесь им в этой теме) ):
Сообщение от
litwr
Сделал программку для
БК. Запускал в эмуляторе BK-TERAK.
На этом эмуляторе 100 цифр за 6 сек, 1000 - за 9м 21с.
Прикрепляю и файлы для "иностранцев" с исходниками и файлами для эмуляторов или для переноса на железо.
pi-bk.zip
pi-amstrad-cpc.zip
pi-commodore264.zip
Но для других архитектур хотя и не было представлено результатов, но были присланы программы и их исходники для тестирования на реалах и эмуляторах.
Сообщение от
perestoronin
Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.
Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
Как вариант можно рассмотреть быстрый алгоритм:
https://en.wikipedia.org/wiki/Machin-like_formula
И библиотеку z88dk
http://www.z88dk.org/wiki/doku.php?i...ew:examples:pi
Сообщение от
litwr
В связи с таким расчетом запустил на стандартном консольном калькуляторе на Raspberry Pi c 900 МГц
time echo 'scale=1000;16*a(1/5)-4*a(1/239)'|bc -l
т.е. 1000 знаков - отсчитано с 1.5 сек.
Сопоставлять результаты будем когда накопится с 10 различных платформ, но уже видно, то ARM у нас 32 разрядный, а не 8 разрядный и частота в 250 раз выше чем у zx. Т.е. в 1000 раз производительнее, и результат полученный на ARM при сравнении с zx нужно делить примерно на 1000.
https://en.wikipedia.org/wiki/Approximations_of_π
На заметку, по этой ссылке собран анализ всех рассмотренных нами алгоритмов, и дан обзор других, более современных и возможно ещё более быстрых на ретро-железках, главное подобрать теперь под каждый из процессоров ту формулу, которая будет для конкретного процессора самой быстрой
Походу исследований на эту тему никто еще не делал
Для каждой точности есть свой вариант уточненной формулы Мэчина.
Самая простая формула обладает невысокой точностью, но при этом является более быстрой.
Думаю, что упущен момент с расчетом неких констант, выраженный в этой программе на бейсике:
Код:
; This BASIC program was used to calculate the equates for PIF.ASM.
; DEFDBL A-Z
; INPUT "Digits required"; A
; MPVSize = 32 * ((A / (LOG(2) / LOG(10)) + 255) \ 256)
; PRINT "NumDigits = "; A + 64
; PRINT "MPVSize = "; MPVSize
; k = A / .69897
; k = INT(15 + (k + k * .1)) 'floor 1
; PRINT "Last1 = "; k
; k = INT(15 + (A / 2.37)) 'floor 2
; PRINT "Last2 = "; k
;
numDigits=164
mpvSize=74
last1=172
last2=57
https://sites.google.com/site/richge...-pi-calculator
А бонусом у нас должны получиться быстрые программы умножения и деления для всех ретро-процессоров, которые сгодятся и для других отличных от академических целей.
Левенталь и Гудыменко нам в помощь:
Сообщение от
Viktor2312
Левенталь 6502 Подпрограммы на ассемблере (книга на английском).
Цифры - просто для истории и справки:
Сообщение от
hobot
Дополнительные материалы и ссылки под спойлером ниже:
Сообщение от
ivagor
реализации умножения и деления на z80 - не новая, но очень хорошая
статья. Думаю про нее большинство знает, но может кто не читал. И, конечно, то, что там написано, вполне можно адаптировать для других процессоров.
Сообщение от
litwr