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

User Tag List

Страница 1 из 41 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 403

Тема: Дискуссии вокруг УКНЦ и прочее.

  1. #1
    Moderator Аватар для MM
    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,134
    Спасибо Благодарностей отдано 
    470
    Спасибо Благодарностей получено 
    519
    Поблагодарили
    412 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Дискуссии вокруг УКНЦ и прочее.

    О измерениях быстродействия 1801-й и некотрых 1806 процессоров уже было написано.
    А вот практические задачи по типу как копирование массива ОЗУ ( например, 1 Кбайт ) - пока что-то не было написано.
    Прошу принять участие владельцев всех типов ЭВМ, особенно на Z80 - 3.5 мгц, 580ВМ80-2.5 мгц и некотрых др.
    Допускаются любые способы оптимизации исполняемого кода.
    ( Очень даже вероятно, что БК11М-4 мгц существенно отстанет от Z80-3.5 мгц 48 Кбайт ДОЗУ ).

    Образец текста программы для ДВК/БК , набирать с 1000 адресу :
    001000 : 012700 010000 012701 000200 012702 002000 012703 004000
    001020 : 012223 012223 012223 012223 012223 012223 012223 012223
    001040 : 077111 077020 000000
    Что делает программа ?
    Копирует 4096 раз массив 1 2 Кбайт ( длина 002000 слов / 004000 байтов ) с адреса 002000 в адрес 004000.
    Для особо точного измерения можно потом в адресе 001040 число 077111 заменить на 077101 и замерить время Холостого Хода ( чисто время организации цикла ).
    Результат мумрулятора ДВК-2 МС1201.01 5.3 мгц :
    33 сек, ХХ - 2.5 сек, производительность - 134.3 Кбайт/с ( 1 Кбайт = 1024 байт ).
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]

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

  3. #2
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    435
    Спасибо Благодарностей отдано 
    110
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    124 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Провел тест на железной УКНЦ. За 250 тиков (50Гц) скопировался мегабайт. Пять секунд. Итого грубо 200кб/с.
    Негусто, ну что-ж, и так попрет

    Команды тупее некуда:
    Код:
    	mov	#100., R4
    	clr	VSYCNT	
    
    10$:	mov	#BUF1, R0
    	mov	#BUF2, R1
    	mov	#5000., R3
    20$:	mov	(R0)+, (R1)+
    	sob	R3, 20$
    	sob	R4, 10$
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  4. #3
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,996
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Провел тест на железной УКНЦ.
    Я как-то прикидывал другой вариант - на ВМ3 с памятью без ожидания копирование в VM: получалось где-то в районе 600-800 кб.. Не помню точно, надо в теме по 1201.2018 поискать..

  5. #4
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    435
    Спасибо Благодарностей отдано 
    110
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    124 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати вроде даже на правду похоже если я верно вспомнил тайминги УКНЦ:
    mov (R0)+, (R1)+ 42 такта
    sob с переходом 32 такта
    Итого 74 такта, всего на копирование мегабайта 500 000 операций итого 37М тактов. На частоту процессора в 8МГц ну примерно около 5 сек. (скидка еще на то что где-то видеочип слегонца в такты не попал и т.д.)

    Можно разумеется разворачивать циклы ускорять и прочую шнягу использовать, но это уже от лукавого.

    (вот только не надо господа с mos6502 бугага устраивать, навроде ахахах укнц тормоз, операция в 42 такта курам на смех как-бы и в 92 бывает ashc сдвиг на 15 бит если.. как-то с этим живем)
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  6. #5
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тут ещё надо учитывать, что время доступа тратится на считывание потока команд из памяти...
    Одна команда на перенос слова... Плюс одна команда для случая с SOB или две без оного или даже более в других случаях...
    Итого на копирование одного слова - выборка двух команд из той же памяти, как минимум.
    Можно провести оптимизацию кода за счёт увеличения объёма кода. Ну на 30% быстрее...
    Возможно ускорение будет ещё более за счёт предвыборки... Но это не точно. Надо смотреть каждый аппаратный случай отдельно.
    Типа того :
    Код:
    	
            mov	#100., R4
    	clr	VSYCNT	
    
    10$:	mov	#BUF1, R0
    	mov	#BUF2, R1
    	mov	#500., R3
    20$:	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    	mov	(R0)+, (R1)+
    ; SOB в коде выполняется в 10. раз реже  :)
    
    	sob	R3, 20$
    	sob	R4, 10$


    Плюс-минус можно оценить по скорости копирование на(с) VM: для компьютеров с MMU

  7. #6
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    435
    Спасибо Благодарностей отдано 
    110
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    124 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    Тут ещё надо учитывать, что время доступа тратится на считывание потока команд из памяти...
    Так с этим кодом стало ну почти 300кб/с. 294 или навроде. Впрочем логично.
    А насчет предварительного считывания очередной команды - у меня есть такие подозрение что видеоконтроллер в УКНЦ гробит эту хорошую фишку ВМ2 процессора (все-равно проц сидит и ожидает доступа к ОЗУ сколько-то тактов).
    Возможно для последовательных команд скажем inc R0 - оно и ускорится, а вот для команд с доступом к ОЗУ - даже не знаю.
    Последний раз редактировалось Arseny; 24.06.2023 в 13:33.
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  8. #7
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Надо бы другие случаи посмотреть...
    Другие системы.

    Но если есть живая УКНЦ, то почему бы ешё не посмотреть, что будет твориться, если скормить сее ПП...
    Понятно, что ПП медленнее, что тот же видеоконтроллер лезет в память... Но чисто из любопытства

  9. #8
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    435
    Спасибо Благодарностей отдано 
    110
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    124 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    Но если есть живая УКНЦ, то почему бы ешё не посмотреть, что будет твориться, если скормить сее ПП...
    Получилось СИЛЬНО тормознее почему-то. Не ставил разворачивание циклов. Копирование мегабайта с банальным sob - 435тиков. Тормознее в 1.7 раза.
    Довольно странно ибо ПП по мегагерцам не во столько раз медленнее.
    Может где-то код кривой написал. Там разумеется побольше оверхеда идет из-за адресации в ПП (ну и я буферы в половину уменьшил).
    Код для ПП в саааамом конце.

    (кстати эмулятор UKNCBTL показывает довольно близкие результаты к реальному железу, только ЦП там чуть медленнее, а ПП наоборот быстрее )

    А нечего на код смотреть :)

    Код:
    	.mcall	.ttyout .exit
    	.enabl	LC
    	.list	meb
    
    VSIOLD:	.word	0
    VSYCNT:	.word	0
    PPCOMM:	.word	0
    
    ; //////////////////////////////////////////////////////////////////////////////
    ; // START
    ; //////////////////////////////////////////////////////////////////////////////
    
    START:
    	; run PPU code
    	inc	PPCOMM			; ask PPU for 'phase 1 ready'
    	mov	#PPUSTA, R4		; run PPU code
    	mov	#<PPUEND-PPUSTA/2>, R5
    	call	PPRUN
    	tst	PPCOMM			; wait for 'ppu phase 1 ready'
    	bne	.-4
    
    	; set vsync interrupt for counting
    	mov	@#100, VSIOLD
    	mov	#VSYNCI, @#100
    
    	; ask PPU run test and wait for it to finish
    	inc 	PPCOMM
    	clr	VSYCNT
    	tst	PPCOMM
    	bne	.-4
    
    	; restore vsync interrupt
    	mov	VSIOLD, @#100
    	
    	; clear PPU RAM
    	call	PPRELE			; release PPU memory
    
    	; print results
    	mov	VSYCNT, R0
    	call	P00000
    
    	.exit
    
    ; //////////////////////////////////////////////////////////////////////////////
    
    ; 50Hz interrupt
    VSYNCI:	inc	VSYCNT
    	rti
    
    P00000:	mov	#5, R3
    PrintP:	mov	#Pri000+5, R5
    1$:	mov	R0, R1
    	clr	R0
    	div	#10., R0
    	add	#'0, R1
    	movb	R1, -(R5)
    	sob	R3, 1$
    PriOut:	movb	(R5)+, R0
    	beq	3$
    	.ttyout
    	br	PriOut
    3$:	return
    Pri000:	.ASCIZ	/00000/
    	.EVEN
    
    ; //////////////////////////////////////////////////////////////////////////////
    ; // CPU -> PPU exchange	
    ; //////////////////////////////////////////////////////////////////////////////
    
    ; PPU message
    ;
    PPMSG:	.WORD	PPARR	; address of beginning of array
            .WORD	177777	; end of transmission
    
    ; PPU data exchange array
    ;
    PPARR:	.BYTE	0	; return value (0 - OK)
    PPCMD:	.BYTE	0	; command
    	.WORD	32	; device type (32 - PPU mem)
    PPAPP:	.WORD	0	; address for PPU
    PPACP:	.WORD	0	; address for CPU
    PPLEN:	.WORD	0	; length in words
    
    ; send command to PPU with exch array
    PPSEN:	mov	R0, -(SP)
    	mov	R1, -(SP)
    	mov	#PPMSG, R0	; array address
    	mov	#5, R1		; bytes to send+1 (sending from @#PP_MSG)
    	br	1$
    2$:	movb	(R0)+, @#176676
    1$:	tstb	@#176674	; test if we are ready to send
    	bpl	1$		; cycle if >= 0 (not set last bit in byte)
    	sob	R1, 2$
    	mov	(SP)+, R1
    	mov	(SP)+, R0
    	return
    
    ; send and start PPU code
    ; R4 - start addr in CPU
    ; R5 - length / 2
    PPRUN:	movb	#1, PPCMD	; 1 - allocate memory
    	mov	R5, PPLEN
    	call	PPSEN
    	tstb	PPARR		; test if allocate success
    	beq	1$		; 0 - OK
    	; .print #MSG010
    	.exit			; fatal error - out of memory in PPU
    1$:	movb	#20, PPCMD	; 20 - write to PPU mem
    	mov	R5, PPLEN
    	mov 	R4, PPACP
    	call	PPSEN
    	movb	#30, PPCMD	; 30 - run
    	call	PPSEN
    	return
    
    ; release PPU memory in case of something..
    PPRELE:	movb	#2, PPCMD	; 2 - release memory
    	call	PPSEN
    	return
    
    
    ; //////////////////////////////////////////////////////////////////////////////	
    ; // PPU code
    ; //////////////////////////////////////////////////////////////////////////////
    
    PPUSTA:
    	; clear current command (phase 1 ready, code loaded)
    	mov	#PPCOMM/2, @#177010
    	clr	@#177014
    
    	; wait for 'start test'
    2$:	mov	#PPCOMM/2, @#177010
    	tst	@#177014
    	beq	2$
    
            mov	#200., R4
    10$:	mov	PC, R0
    	add	#PPBUF1-., R0
    	mov	PC, R1
    	add	#PPBUF2-., R1
    	mov	#2500., R3
    20$:	mov	(R0)+, (R1)+
    	sob	R3, 20$
    	sob	R4, 10$
    
    	; test ends
    	mov	#PPCOMM/2, @#177010
    	clr	@#177014
    	
    	return
    	
    PPBUF1:	.blkw	2500.
    PPBUF2:	.blkw	2500.
    
    ; //////////////////////////////////////////////////////////////////////////////
    ; // END PPU CODE 
    ; //////////////////////////////////////////////////////////////////////////////
    PPUEND:
    
    	.END	START
    [свернуть]
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  10. #9
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    А насчет предварительного считывания очередной команды - у меня есть такие подозрение что видеоконтроллер в УКНЦ гробит эту хорошую фишку ВМ2 процессора (все-равно проц сидит и ожидает доступа к ОЗУ сколько-то тактов).
    Возможно для последовательных команд скажем inc R0 - оно и ускорится, а вот для команд с доступом к ОЗУ - даже не знаю.
    Ускорится. Пока декодируется команда MOV (R0)+,(R1)+, по предвыборке уже читается следующая. Вот её чтение может притормозить исполняющуюся команду. Декодирование завершилось, надо память читать, а там ещё следующая команда по предвыборке не прочлась. Но это низкая вероятность.
    А вот если вместо SOB использовать DEC/BNE, будет ли быстрее?

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

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Получилось СИЛЬНО тормознее почему-то. Не ставил разворачивание циклов. Копирование мегабайта с банальным sob - 435тиков. Тормознее в 1.7 раза.
    Довольно странно ибо ПП по мегагерцам не во столько раз медленнее.
    А в ПП доступ к памяти 8-битный, потому что слово контроллером считывается за два приёма. С записью вроде там получше, положилось слово для записи в контроллер, он выдал RPLY, процессор дальше продолжает работу, а он за два приёма слово записывает.

  11. #10
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    И ещё, по поводу скорости обмена ...
    Вспомним о том, что ИРПР был и 16 бит шириной.
    И как мне утверждал парнишка, который крутился у комплекса где были связаны 16-битным ИРПР СМ-1400 и ДВК, скорость обмена была 240 Кбайт в секунду...
    Не ведаю откуда и куда при этом данные пересылались. И даже не ведаю что за софт там был
    Сам я этот комплекс видел только с пионерского расстояния
    Полазить по нему меня никто не пустил бы...

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

    Интересно бы было ещё попробовать на ПП уменьшить число SOB вышеописанным образом ...
    Любопытна была бы кратность ускорения.

Страница 1 из 41 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Материнки от УКНЦ и прочее.
    от tntpro в разделе Барахолка (архив)
    Ответов: 31
    Последнее: 13.06.2011, 23:21
  2. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16

Ваши права

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