Вложений: 1
Вычисление числа Пи на ассемблере
Эта тема создана как ответвление темы "Отечественные компьютеры: быстродействие"
Очень настаиваю очень важные философские вопросы поднимать не здесь, а в отдельной теме во флейме "Пожужжим о "расчете числа Пи"
"Вычисление числа Пи с заданной точностью на ассемблере как тест для процессоров", надеюсь полная постановка задачи всем известна.
Для сверки результата можно использовать 10 миллионов цифры по ссылке под спойлером - осторожно 10 миллионов символов это ТРАФИК!:
Скрытый текст
Цитата:
Сообщение от
Vslav
[свернуть]
Желающие запостить свои творения в эту тему - прошу не стесняться своего кода, надеюсь никто смеяться не будет и гуру помогут выправить код.
Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.
Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
Вложение 54895
Результаты:
Цитата:
Сообщение от
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
Цитата:
Сообщение от
ivagor
Очередная и, надеюсь, последняя версия spigota -
Вложение 54829
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с.
Прикрепляю и файлы для "иностранцев" с исходниками и файлами для эмуляторов или для переноса на железо.
Вложение 54932
Вложение 54931
Вложение 54930
Но для других архитектур хотя и не было представлено результатов, но были присланы программы и их исходники для тестирования на реалах и эмуляторах.
Цитата:
Сообщение от
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