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

User Tag List

Страница 4 из 15 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 145

Тема: Commercial Instruction Set (CIS) на PDP-11 и я

  1. #31

    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    710
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    41 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну насчёт точности... Например, двойная точность вполне обеспечивает потребности, но проблема в том, что адекватные FPU по разумной цене появились позднее. Вот Электронике-60(LSI-11/3) попробуй в двойной точности посчитай, а если ещё и прерывания постоянно идут если даже FIS есть?? То же самое касается первых PDP-11 да их конкурентов тож... Да и у нашего на 1801ВМ2 FIS был реализован чисто для совместимости со старым п/о. Без поддержки FIS должно считаться быстрее... Не тратится время на обработку прерываний и переключение контента USER/HALT. Единственное достоинство - код будет занимать чуть места меньше.
    По этому народ пошёл по пути такой арифметики... И реализация CIS - инерция. Типа народ хочет, так ведь мы можем ему это дать за "разумные" деньги.
    Когда сделали J-11, то там быстродействие самого процессора и инструкций с плавающей запятой оказалось таково, что возиться с CIS не стали(а если уж был FPA). Экономия на преобразовании из символьной в плавающую форму свелась к минимуму.

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

  3. #32

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    двойная точность
    Ещё раз. Вычисления с плавающей точкой по своей сути - приблизительные вычисления. То, что в десятичных числах является точным (0.1) при использовании плавающей точкой становится приблизительным. BCD по своей сути - это целочисленное представление, так что там 0.1 будет точно 0.1 и 0.1+0.1 будет точно 0.2, а не приблизительно 0.2. Если для науки такая приблизительность допустима, то для финансов - нет.

    Цитата Сообщение от Alex Посмотреть сообщение
    И реализация CIS - инерция
    Нет, это ориентированность на определённый класс задач. Напомню так же, что речь идёт о 60-ых тире 70-ых, когда компьютеры использовались в первую очередь для всяких расчётов, а не как щас - микропроцессор как затычка для всего.

    Цитата Сообщение от Alex Посмотреть сообщение
    Когда сделали J-11
    Я сильно подозреваю, что оказалось, что CIS на нём стал настолько производительным, что уделывал первый VAX (по крайне мере на обычных вычислениях в топе у него производительность 1 VUP на 18 МГц, а я уже показал успешность его запуска на 20 МГц). Дальше - см тему DEC и я, там есть воспоминания тех, кто участвовал в создании 11/74. К сожалению, тут приходится полагаться только на воспоминания, ибо по микросхемам CIS для J-11 нет никакой инфы, даже фоток. В отличии от CIS для F11.

    Пока времени нет, но я попробую сделать реализацию своего тестового примера - умножить 123456789012345 на 234567890123456 на целых числах нужной разрядности - тогда можно будет сравнить. В том числе - в полном варианте - преобразовать числа из внешнего представления во внутреннее, умножить, преобразовать во внешнее представление. Тогда у нас будет однозначный ответ на вопрос - что быстрее. Но лично я ставлю, что CIS будет быстрее. Хотя меня и несколько смущает фраза из воспоминаний участников, что CIS к F11 прилепили на позднем этапе проекта - то есть, читай - есть ошибки (точно есть) и неоптимальная производительность (это моё предположение).

    Этот пользователь поблагодарил Hunta за это полезное сообщение:

    yu.zxpk(14.10.2020)

  4. #33

    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    710
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    41 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вместо символьной строки вполне можно воспользоваться целым числом, только длина его должна быть нехилым...
    Даже 32-разрядов маловато будет(Бюджет США больше). Если учесть, что тогда большая часть процессоров на мини-ЭВМ работала с 16-битными целыми...
    Надо 64-бита... Какова же была арифметика с 64-битными целыми на мини-ЭВМ??? Только программно ...
    В принципе двойной точности хватало... Но с ней тоже не всё ладно было.
    Наши 1801ВМ4 в массы так и не смогли пустить
    Вот Интел свой 8087 делал, так ввёл 80-разрядный формат, в коем и проводились внутренние вычисления. Как я понимаю, чтобы свести к минимуму ошибки округления. И есть у меня некое подозрение, что там на 80-битах округления просто нет. Проблемы с FPU у интела были аж на пентиумах ...
    По идее FPU должен проводить округление, но есть подозрения, что не так всё просто.
    Да и ещё по поводу точности ... В целочисленной двоичной арифметике никакого округления просто не было... Да и сейчас нет. Только программно. Но это тормоза...
    Я помню, что в специфических численных задачах, применялись специальные методы, чтобы не потерять точность на уровне алгоритма вычислений, не смотря на двойную точность с плавающей запятой переменных.
    Если честно, то интересно как по факту с округлением в CIS обстояло...
    Последний раз редактировалось Alex; 14.10.2020 в 16:29.

  5. #34

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    Надо 64-бита
    123456789012345 в двоичном виде это - 11100000100100010000110000011011101111101111001 - 48 бит

    123456789012345*234567890123456 = 28958998520042431946358064320
    К сожалению, калькулятор Windows даёт двоичное представление только до 64 бит. Могу предположить, что результат умножения - это где то 96 бит

    Цитата Сообщение от Alex Посмотреть сообщение
    Какова же была арифметика с 64-битными целыми на мини-ЭВМ
    На PDP-11 считай, не было арифметики на 32 бита (32 бита умножить на 32 бита - это 64 бита), так, отдельные возможности с 32-мя битами - получить как результат умножения и можно было в принципе 32-ух битное разделить на 16-ти битное, но так, что бы получить в результате два 16-ти битных числа.

    Мне понадобилась 32-битная арифметика в программе SPEED3 - пришлось нарисовать процедуру умножения (32 бита на 32 бита) и деления (64 бита делим на 32 бита).

    Так что даже В ТЕ времена разрядности целых чисел на PDP-11 НЕ ХВАТАЛО. FPP - это приблизительность и ошибки округления. Решение было и оно было реализовано в командах CIS. Кстати, насколько я помню, по крайне мере первые модели VAX-ов тоже реализовывали CIS

    Цитата Сообщение от Alex Посмотреть сообщение
    По идее FPU должен проводить округление
    Насколько я помню (лень лезть в доки), у FPP от PDP-11 есть возможность задать как округление, так и усечение.

    Цитата Сообщение от Alex Посмотреть сообщение
    целочисленной двоичной арифметике никакого округления просто не было...
    В CIS это не нужно, они при деление (как и DIV) дают частное и остаток.

    Цитата Сообщение от Alex Посмотреть сообщение
    Я помню, что в специфических численных задачах, применялись специальные методы
    У нас на мехмате был курс вычислительной математики. Так вот - никаких специфических методов - нет. Просто стараются свести количество операций при вычислений к минимуму. Есть методы оценки накопления ошибок округления/усечения. Соответственно, зная, сколько операций и какого рода применялись, можно сказать - какая ошибка накопилась. То есть получил ты, скажем в результате 123.456789, а ошибка накопилась в десятых - можешь не радоваться - у тебя от 122.5 до 124.5 (очень примерно, что бы показать идею, я всё таки больше 20 лет назад это дело проходил)
    Так что ещё раз - нет никаких специальных методов - есть разные алгоритмы с разными количеством операций для достижения результата с определённой точностью. И чем больше операций, тем быстрее теряем точность

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

    Вдогонку.
    Мне сложно сказать про быстродействие FPP на чём нибудь типа PDP-11/70 (типа - топовая машина не на микропроцессоре), могу лишь предположить, что принцип выполнения операций был примерно такой же, как и в J11, а не FPA, то есть - микропрограммный.

    Почему так думаю.

    Потому что FPA был выпущен позже J11, с большой задержкой, вроде его даже дважды отзывали. Напомню, что FPA пилила сама DEC. Если бы в PDP-11/70 было бы что то типа FPA, мне кажется, они бы его запили быстрее.

    И потом - FPA использовали как основу для реализации плавающей точки в микроваксах - на этом этапе вроде как проблем уже не было (все были пофиксены, пока пилили FPA для J11).
    Последний раз редактировалось Hunta; 26.06.2024 в 11:42.

  6. #35

    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    710
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    41 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я на кафедре физической химии работал... Там были такие задачи, что производительность любой ЭВМ(даже современного суперкомпьютера) сожрут, и мало покажется... Тогда на ЕС-1066 бегали. Расчёты квантовой механики, расчёты по прямой и обратной кинетической задачи(системы жёстких дифуров возили)
    Причём на вычислительной математике нам про точность расчётов и не заикались. Сказали, типа сколько мантисса и сколько порядок и увсё... Но у меня химико-технологический институт...
    На кафедре люди сами алгоритмы контроля точности городили. В основном сводилось, к тому, чтобы переменные не обнулялись и не теряли значимость мантиссы.
    И программа могла попытаться просчитать одно и то же разными путями и выбрать "лучший" по каким-то критериям. На сколько это эффективно было, вопрос интересный

  7. #36

    Регистрация
    26.03.2019
    Адрес
    г. Киев, Украина
    Сообщений
    98
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Простая программа (пусть на Perl, на C будет то же самое)

    PHP код:
    my $s 0;
    for(
    my $i=0$i <10$i++)
    {
        
    printf "%s: %.18f\n"$i$s;
        
    $s += 0.01;

    и ее выхлоп:

    0: 0.000000000000000000
    1: 0.010000000000000000
    2: 0.020000000000000000
    3: 0.029999999999999999
    4: 0.040000000000000001
    5: 0.050000000000000003
    6: 0.060000000000000005
    7: 0.070000000000000007
    8: 0.080000000000000002

    Этот пользователь поблагодарил yu.zxpk за это полезное сообщение:

    Vslav(14.10.2020)

  8. #37

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    Я на кафедре физической химии работал
    ГЫ Я начинал учиться на химфаке МГУ, во втором семестре первого курса дали программирование (практика - на СМ-3 под DOS/Batch-11) - и усё. Увлечение химией с первого класса школы (ну почти с первого - летом между первым и вторым классом нашёл выброшенные несколько книг, в том числе научно-популярные и школьные учебники - это была любовь, как мне казалось, на всю жизнь) пошло по боку Компьютеры - наше всё

    Цитата Сообщение от Alex Посмотреть сообщение
    Причём на вычислительной математике нам про точность расчётов и не заикались.
    А нас два семестра (ЕМНИП) дрючили

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    Простая программа (пусть на Perl, на C будет то же самое)
    Я похоже на C# нарисовал, там тоже видны "точные" результаты операций

  9. #38

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    100% - проблема точности при работе с дробными, невозможности точно представить дроби с базой 10 в виде дробей с базой 2.
    Хм, о плавающем формате с точкой слева я не подумал. Обычно если мне надо "точно-точно" я беру дополнительный код с точкой справа.

  10. #39

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, это обычное дело для людей, которые знают - КАК хранятся числа с плавающей точкой. И сколько раз мне приходилось демонстрировать "точность" плавающей арифметики людям, которые не знали...

    Кстати, пример с аналогом BCD из C#

    Код:
                int i = 0;
                decimal r = 0.0M;
                while (r != 1.0M)
                {
                    Console.WriteLine(r);
                    r = r + 0.1M;
                    i++;
                    if (i > 200) return;
                }
    Результат:
    Код:
    0,0
    0,1
    0,2
    0,3
    0,4
    0,5
    0,6
    0,7
    0,8
    0,9
    - - - Добавлено - - -

    Цитата Сообщение от litwr Посмотреть сообщение
    А сегодня в современных языках уже просто "из коробки" знак числа в его конце или разделение на тысячи не напечатаешь
    Не внимательно прочитал первый раз.
    Ну что могу сказать.
    Человек в очередной раз демонстрирует свои "знания".

    Код:
                decimal i = 0;
                for (i=-10000; i <= 10000; i=i+1000)
                {
                    Console.WriteLine(i.ToString("00 000+;00 00#-"));
                }
    Результат

    Код:
    10 000-
    09 000-
    08 000-
    07 000-
    06 000-
    05 000-
    04 000-
    03 000-
    02 000-
    01 000-
    00 000+
    01 000+
    02 000+
    03 000+
    04 000+
    05 000+
    06 000+
    07 000+
    08 000+
    09 000+
    10 000+

  11. #40

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я четверть века занимался кассовыми аппаратами. И мы как-то умудрились все сделать на 48-битной целочисленной арифметике - назывался у нас тип tword. На ассемблере была написана основная арифметика с конверторами, и еще там была пара процедур с промежуточными 14-ти байтными значениями. От x86, AVR, ARM7TDMI, Cortex-ы, сертифицировано все (то есть арифметика и округления проходили гос испытания со сторонними тестами) в десятке стран. Никакой плавучки (на AVR - медленно, аппаратный FPU - не по карману), так шо - кому она та плавучка нужна? Тока богатым.

    Этот пользователь поблагодарил Vslav за это полезное сообщение:

    SuperMax(09.03.2022)

Страница 4 из 15 ПерваяПервая 12345678 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 0
    Последнее: 29.08.2017, 14:06
  2. Jet Set Willy: The Nightmare Edition
    от Rindex в разделе Игры
    Ответов: 0
    Последнее: 05.02.2016, 20:18
  3. Jet Set Luis
    от Rindex в разделе Игры
    Ответов: 1
    Последнее: 28.09.2015, 13:58
  4. 8bit space party, (live set)
    от siril в разделе События
    Ответов: 14
    Последнее: 30.07.2011, 11:46
  5. Jet Set Willy: The 2010 Megamix
    от Rindex в разделе Игры
    Ответов: 4
    Последнее: 30.12.2010, 19:39

Ваши права

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