НавигацияВход для пользователейМетки20 лет
25 лет
9860
add-ins
Atmega16
Casio
casio 9860
CITIZEN
COM-порт
FA-124
Geany
hello world
HP
HP-48
HP-50
HP 50g
IDE
iOS
mk.exe
mk161 for dummies
mkl2mkp
SPI
TI-89 Titanium
Андроид
Анонсы
Дополнительные вопросы по SPI-интерфейсу.
Игры
Импульсная характеристика
История
Итоги
КЭИ
Комбинаторика
Комплексные числа
Конкурсы
Криптография
Куплю БРП Москва
Лунолёты
МК-52
МК-161
Математика
Мысли
ПМК
ПО
Поломка
Пробел в знаниях
Программные метки в МК-1хх
Программы
Прогрессия
Простые числа
Разложение
Регламент
Секундомер
Сервис
События
Справочник В.П. Дьяконова
Справочное пособие
Стыковка
Факторизация
Физика
Фото
ЭКВМ
Юмор
ЯВУ
браузер
версия
внешний модуль
гибкий
гипербола
градиент
дети
дивергенция
калькулятор
книги
компилятор
кривые второго порядка
матрицы
методичка
мк-61
парабола
подзатыльник
практическое руководство
преобразоване координат
программируемый
производная n-го порядка
производная по направлению
прошивка
ротор
рынок
ряд Фурье
справочник
среда разработки
текст
учебник
цветы жизни
цифровая обработка сигналов
частная производная
числовой ряд
читалка
шахматы
эллипс
Новости других сайтов
|
Benchmark: классика, 8 ферзейПоиск расстановки 8 ферзей на шахматной доске используется для измерения скорости вычислений ПМК. Результаты зарубежных моделей можно увидеть, например, здесь Calculator Benchmark. В журнале "НиЖ" в свое время был даже объявлен конкурс на создание подобной программы. Найти оригинал статьи мне пока не удалось, помню только, что время счета измерялось часами, альтернативой перебору вариантов предлагался метод Монте-Карло. Впрочем, на времени ожидания результата это сказывалось незначительно. Нас же интересует, насколько быстро справится с задачей новый МК-152 Пишем программуПоскольку готовой программы найти не удалось, за основу был взять вариант на Паскале по упомянутой ссылке. Очевидно, на каждой из 8 вертикалей должно стоять по ферзю. Каждую такую расстановку можно закодировать одномерным массивом
procedure qbench;
var
a: array[1..8] of integer;
r, s, t, x, y: integer;
begin
r := 8;
s := 0;
x := 0;
repeat
inc(x);
a[x] := r;
repeat
inc(s);
y := x;
while y > 1 do begin
dec(y);
t := a[x] - a[y];
if (t = 0) or (x - y = abs(t)) then begin
y := 0;
dec(a[x]);
while a[x] = 0 do begin
dec(x);
dec(a[x]);
end;
end;
end;
until y = 1;
until x = r;
writeln(s);
end;
Если добавить процедуру вывода, то получаем найденную позицию:
Скачать исходный текст программы для среды Delphi (файл NQueens.dpr) вы можете ниже в списке. Хотя Паскаль хорош тем, что алгоритм "читается", но к сожалению, перевод паскаль-кода в ПМК-шный совершенно неоднозначен, поэтому пришлось создать промежуточный вариант на "неструктурированном псевдопаскале".
begin
RA := 8;
RB := 0;
RC := 0;
repeat
inc(RC);
a[RC] := RA;
repeat
inc(RB);
RD := RC;
L2:
if RD - 1 <= 0 goto L1;
dec(RD);
R9 := a[RC] - a[RD];
if (R9 <> 0) and (RC - RD <> abs(R9)) goto L2;
RB := 0;
dec(a[RC]);
L5:
if a[RC] <> 0 goto L2;
dec(RC);
dec(a[RC]);
goto L5;
L1:
until RB = 1;
until RC = RA;
stop;
end;
Теперь достаточно легко перейти к программе для МК-61/52. 00.Cx 10.ПВ 20.ИПВ 30.64 40.К|х| 50.1 60.1 70.ИПА 01.ПО 11.ПС 21.1 31.Fx≥O 41.ИПС 51.- 61.- 71.- 02.П1 12.8 22.+ 32.64 42.ИПД 52.КПС 62.БП 72.Fx=0 03.П2 13.ПА 23.ПВ 33.ПД 43.- 53.Fx=0 63.52 73.14 04.ПЗ 14.ИПС 24.ИПС 34.КИПС 44.- 54.26 64.ИПВ 74.С/П 05.П4 15.1 25.ПД 35.КИПД 45.Fx=0 55.ИПС 65.1 06.П5 16.+ 26.ИПД 36.- 46.26 56.1 66.- 07.П6 17.ПС 27.1 37.П9 47.0 57.- 67.Fx=0 08.П7 18.ИПА 28.- 38.Fx≠0 48.ПВ 58.ПС 68.20 09.П8 19.КПС 29.Fx≠0 39.47 49.КИПС 59.КИПС 69.ИПС Инструкции по запуску: В/0, С/П Программу, видимо, можно подсократить в теле циклов, но вряд ли это заметно скажется на времени счета для МК-52. Тестируем МК-152Испытания провел уважаемый AtH (arvi). Вышеприведенная программа для ПМК без изменений выполняется на МК-152 ровно 9 секунд. А пока AtH подсократил программу на восемь шагов (с регистром B также имеет смысл разобраться, он из счётчика превратился во флаг) и вот, что получилось: 00.Cx 01.ПB 02.9 03.П0 04.Cx 05.КП0 06.ИП0 07.Fx=0 08.04 09.ПС 10.ИПС 11.1 12.+ 13.ПС 14.8 15.КПС 16.ИПВ 17.1 18.+ 19.ПВ 20.ИПС 21.ПД 22.ИПД 23.1 24.- 25.Fx≠0 26.56 27.Fx≥0 28.56 29.ПД 30.КИПС 31.КИПД 32.- 33.Fx≠0 34.42 35.К|x| 36.ИПС 37.ИПД 38.- 39.- 40.Fx=0 41.22 42.0 43.ПВ 44.КИПС 45.1 46.- 47.КПС 48.Fx=0 49.22 50.ИПС 51.1 52.- 53.ПС 54.БП 55.44 56.ИПВ 57.1 58.- 59.Fx=0 60.16 61.ИПС 62.8 63.- 64.Fx=0 65.10 66.С/П Время счёта по новой версии программы на МК-152 — 8 секунд. Буквальный перевод кода для калькулятора Cassio FX-4500PA (программа по первой ссылке, переменные S, Y и X хранятся в регистрах 9, A и B) без оптимизации под МК-152 даёт результат 876 (количество перебранных узлов дерева вариантов, это же число показывает и программа на бейсике - самая первая в списке программ по упомянутой в начале ссылке) и требует 13 секунд: 00.Cx 01.1 02. 2 03.П0 04.Cx 05.КП0 06.ИП0 07.Fx=0 08.04 09.8 10.ИПB 11.- 12.Fx≠0 13.56 14.ИПB 15.1 16.+ 17.ПB 18.8 19.КПB 20.ИП9 21.1 22.+ 23.П9 24.ИПB 25.ПA 26.ИПA 27.1 28.- 29.ПA 30.Fx≠0 31.09 32.КИПB 33.КИПA 34.- 35.Fx≠0 36.44 37.K|x| 38.ИПB 39.ИПA 40.- 41.- 42.Fx=0 43.26 44.КИПB 45.1 46.- 47.КПB 48.Fx=0 49.20 50.ИПB 51.1 52.- 53.ПB 54.Fx=0 55.44 56.ИП9 57.С/П
Но на этом тесты не закончились. Получается, что МК-152 быстрее МК-56 примерно в 1300 раз (та же версия выполнялась на МК-152 за девять секунд). То же самое можно сказать и относительно всех старых моделей. Таким образом, мы должны отметить хороший прогресс скорости вычислений у новой модели.
|