|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 13 posts ] |
|
Суперскалярное процессорное ядро Super-V (самоделка RISC-V)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Идея создать опен-сорцное супер-пупер RISC-V-совместимое ядро для FPGA под названием Super-V, которое будет работать с памятью по 64-битной шине, вычитывая за раз 2 обычные инструкции RISC-V по 32 бита либо 4 компактные инструкции RISC-V по 16 бит (возможно и скажем одну 32-битную и две 16-битные за раз вычитать), теоретически приближая производительность к ЧЕТЫРЁМ инструкциям на такт! Суперскалярность будет достигаться засчёт того, что некоторые идущие друг за другом инструкции могут быть независимыми и выполняться параллельно и необязательно в том порядке, в котором они расположены в памяти (Out-of-Order). Кроме того многотактовые инструкции типа умножения и деления (или инструкции по работе с плавающей точкой) могут медленно выполняться где-то в сторонке, пока быстрые однотактовые инструкции лупят одна за другой в основном вычислительном модуле (количество паралельных целочисленных и плавающих модулей надо прикинуть на эмуляторе, выполняя реальные вычисления). Также можно будет потом добавить кеши данных и команд (64-битные), что даст возможность задействовать в качестве памяти какую-нибудь обычную DDR (вся алхимия с суперскалярностью будет выполняться на уровне кеша инструкций). P.S. Для разнобезобразия можно выбрать в качестве опен-сорцной лицензии GPL v3 P.P.S. Прожэкт на Хакадее: https://hackaday.io/project/162859-super-v
|
17 Dec 2018 19:15 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Например BOOM (Berkeley Out-of-Order Machine), которая тоже по 2 инструкции за раз декодит, выдаёт вот такие результаты IPC (Instructions Per Cycle): Источник: https://riscv.org/wp-content/uploads/2016/01/Wed1345-RISCV-Workshop-3-BOOM.pdfТак вот хотелось бы эти показатели превзойти...
|
17 Dec 2018 23:44 |
|
|
starsnet
Junior
Joined: 18 Dec 2018 13:17 Posts: 2
|
а почему сразу не 128 бит? насколько я понял (не схемотехник ни разу - непинайте сильно;)) риск-5 - можно реконфигурировать как вверх, так и вниз. тогда почему бы сразу не проектировать 128-бит, в максимуме; и "свертывать" в 64 и 32 бита ? или, всё-таки (предполагаю..) каждый проц надо будет проектировать по отдельности (типа, реализация может быть разной -> не всегда универсальной) ? А давайте BSD или MIT З.Ы. Сложно самому этому научитья ?))))
|
18 Dec 2018 13:27 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Кто незнаком с суперскалярной архитектурой, может почитать википедию: https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%BF%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8CВ-краце, суперскалярность есть там, где система способна исполнять более одной инструкции за раз В нашем случае точно будет конвейер и, возможно, кэш, а кроме того предполагается иметь две основные фишки суперскалярности, описанные по ссылке выше: внеочередное исполнение - когда инструкции выполняются не по порядку следования в памяти, а по мере готовности аргументов, и переименование регистров - когда в реальности процессор имеет несколько больше физических регистров, чем описано в спецификации, и в процессе исполнения программы логические номера регистров подменяются на физические, убирая "ложные" взаимосвязи, когда, например какой-то регистр по ходу программы используется как временный в разных местах, но только лишь из-за того, что все остальные регистры были заняты - при этом процессор "переименовывает" этот регистр в этих разных местах в разные регистры, позволяя распаралеллить выполнение участков, которые изначально распараллелить было нельзя... P.S. Такой подход используется в современных x86-процессорах для увеличения производительности не углубляясь в дальнейшие гигагерцы (первым суперскалярным x86 считается пентиум с его двумя алу)
|
18 Dec 2018 18:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Спецификация 128 бит для RISC-V пока не готова, а лужайка с 64-битными рископятками уже достаточно плотно усижена большими дядьками Ну и потом до 64-битной потом можно при желании расширить (инструкции от 32-битной системы остаются как есть - просто добавляются несколько новых - см. тут) Чтобы каждый коммерсант мог себе это ядро воткнуть и обозвать своим именем? Неа Научиться создавать прожэкт на хакадее? Нет не сложно
|
18 Dec 2018 18:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
| | | | Shaos wrote: Кто незнаком с суперскалярной архитектурой, может почитать википедию: https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%BF%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8CВ-краце, суперскалярность есть там, где система способна исполнять более одной инструкции за раз В нашем случае точно будет конвейер и, возможно, кэш, а кроме того предполагается иметь две основные фишки суперскалярности, описанные по ссылке выше: внеочередное исполнение - когда инструкции выполняются не по порядку следования в памяти, а по мере готовности аргументов, и переименование регистров - когда в реальности процессор имеет несколько больше физических регистров, чем описано в спецификации, и в процессе исполнения программы логические номера регистров подменяются на физические, убирая "ложные" взаимосвязи, когда, например какой-то регистр по ходу программы используется как временный в разных местах, но только лишь из-за того, что все остальные регистры были заняты - при этом процессор "переименовывает" этот регистр в этих разных местах в разные регистры, позволяя распаралеллить выполнение участков, которые изначально распараллелить было нельзя... P.S. Такой подход используется в современных x86-процессорах для увеличения производительности не углубляясь в дальнейшие гигагерцы (первым суперскалярным x86 считается пентиум с его двумя алу) | | | | |
Ещё из фишек, которые хотелось бы поисследовать: предсказание переходов - это когда система предполагает заранее куда пойдёт условные переход и начинает его выполнение, если же в итоге выяснится, что система ошиблась, то все результаты этой работы отменяются и система идёт по другому пути, теряя несколько тактов на новое заполнение конвейера) и спекулятивное исполнение - это когда система выполняет некоторый набор команд, результаты работы которого могут оказаться ненужны - например то же предсказание переходов (даже с параллельным выполнением обоих веток), однако это также распостраняется на другие вещи - предсказание результата вычислений и продолжение вычислений с этим значением (если предсказание окажется неправильным, то все вычисленное откатывается), предсказание предзагрузки из памяти и т.д.
|
20 Dec 2018 01:39 |
|
|
starsnet
Junior
Joined: 18 Dec 2018 13:17 Posts: 2
|
А что, уже есть готовые 64-битные процы?? Где можно посмотреть/скачать/испечь ? Я бы пощупал) Этот момент меня всегда вводит в ступор.. С одной стороны, конторы могут воспользоваться готовым, и ничего не отдавать взамен (при BSD-like лицензии). С другой стороны, пока какой-нибудь коменрсант не займется/не заинтересуется - продукт развивается медленно. Асимптотически вниз. По больше части так до продакшена не доходит. В третьих, когда мы говорим про "свободное програмное обеспечение", почему-то, ПО ФАКТУ, получается эгоизм. Что bsd-like юзвери перестают делиться своими наработками - ващ вариант. Что gpl-юзвери ЗАСТАВЛЯЮТ других. GPL жешь требует делиться) И в том, и в другом случае - причина в человеческом нутре))) Ну, это офтоп. Не проект на хакадее. А проектировать процессор) Я тут прошелся по книжкам на вашем форуме. Есть, конечно интересные. Но, так или иначе, (как мне показалось) пока не изучишь "работу на уровне вентилей" (так обозву сие дело) процессор не слепить)
|
21 Dec 2018 05:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ну как бы да - желательно разбираться во всём снизу доверху... P.S. По поводу существующих коров и процов см. https://riscv.org/risc-v-cores/
|
21 Dec 2018 18:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Добавил больше статистики в эмуль: https://gitlab.com/nedopc/npc5/blob/master/emu-rv32i.cПо тесту быстродействия Dhrystone оно например теперь такую статистику собирает (обновлено 24 декабря 2018 - теперь с Top5): Это с кучей отладочной печати и подсчётом частоты вызова каждой инструкции (LI подсчитана отдельно, но на самом деле это ADDI c нулевым регистром), а если без лишней печати то так: т.е. эмуль гонит со скоростью почти 13 миллионов операций в секунду также отсюда видно, что 15% от всех пройденных инструкций занимают джампы (передача управления на другой адрес) большая часть джампов ведёт назад (backwards) а условные переходы в 56% не выполняются (в этом случае должен исполняться код, идущий непосредственно следом за командой условного перехода)
|
22 Dec 2018 02:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вот простейший пример для сравнения: который компилируется вот в такой код: | | | | Code: test1: file format elf32-littleriscv
Disassembly of section .text:
00010054 <_start>: 10054: 000107b7 lui a5,0x10 10058: 07878793 addi a5,a5,120 # 10078 <_start+0x24> 1005c: 04800713 li a4,72 10060: 400026b7 lui a3,0x40002 10064: 00e68023 sb a4,0(a3) # 40002000 <__global_pointer$+0x3fff0778> 10068: 00178793 addi a5,a5,1 1006c: 0007c703 lbu a4,0(a5) 10070: fe071ae3 bnez a4,10064 <_start+0x10> 10074: 00008067 ret
| | | | |
Собранная статистика: Как можно видеть тут наоборот, в подавляющем большинстве случаев условное ветвление успешно (93% для Branching True) P.S. По поводу псевдоинструкций ассемблера RISC-V (чтобы понять что спрятано под li и под ret) см. в соответствующем топике: http://www.nedopc.org/forum/viewtopic.php?p=149263#p149263
|
22 Dec 2018 02:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Статистика по некоторым другим тестам из набора https://github.com/riscv/riscv-tests/tree/master/benchmarksПопытаюсь объяснить зачем нужна такая статистика. Скажем мы делаем реализацию RISC-V с 5-шаговым конвейером, который в случае передачи управления сбрасывает своё состояние и запускает конвейеризацию заново, что приведёт к потере 5 тактов на каждый переход, если все остальные команды выполняются за 1 такт, то при 15% переходов среди исполняемых инструкций - 15 переходов и 85 непереходов - мы потеряем 15*5=75 тактов переходов на каждые 85 тактов обычных инструкций, что практически равно половине времени исполнения программы! Именно поэтому надо уходить в суперскалярность и спекулятивное исполнение...
|
22 Dec 2018 02:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
| | | | Shaos wrote: Вот простейший пример для сравнения: который компилируется вот в такой код: | | | | Code: test1: file format elf32-littleriscv
Disassembly of section .text:
00010054 <_start>: 10054: 000107b7 lui a5,0x10 10058: 07878793 addi a5,a5,120 # 10078 <_start+0x24> 1005c: 04800713 li a4,72 10060: 400026b7 lui a3,0x40002 10064: 00e68023 sb a4,0(a3) # 40002000 <__global_pointer$+0x3fff0778> 10068: 00178793 addi a5,a5,1 1006c: 0007c703 lbu a4,0(a5) 10070: fe071ae3 bnez a4,10064 <_start+0x10> 10074: 00008067 ret
| | | | |
Собранная статистика: Как можно видеть тут наоборот, в подавляющем большинстве случаев условное ветвление успешно (93% для Branching True) -------- P.S. По поводу псевдоинструкций ассемблера RISC-V (чтобы понять что спрятано под li и под ret) см. в соответствующем топике: http://www.nedopc.org/forum/viewtopic.php?p=149263#p149263 | | | | |
Можно на примере этой простой программи посмотреть как может работать наш суперскалярный процессор: 10054: 000107b7 lui a5,0x10 ; a5=0x10<<12=0x10000 10058: 07878793 addi a5,a5,120 # 10078 <_start+0x24> ; a5=a5+0x78=0x10078 эти 2 команды читаются за раз (два 32-битных слова по 64-битной шине данных) - более того, их и надо выполнять одновременно т.к. то что они делают это просто заносят число 0x10078 в 15й регистр a5 (инструкциями RISC-V это невозможно сделать в одну команду т.к. непосредственные значения там задаются только 12-ю битами) 1005c: 04800713 li a4,72 ; 000001001000 (0x048) 00000 (x0) 000 01110 (x14) 0010011 (ADDI) = addi a4,x0,72 10060: 400026b7 lui a3,0x40002 ; a3=0x40002<<12=0x40002000 это 2 независимые инструкции - первая записывает число 72 в 14й регистр a4, а вторая записывает число 0x40002000 в 13й регистр a3 - если железо допускает одновременную запись в регистры, то эти две команды можно выполнить одновременно 10064: 00e68023 sb a4,0(a3) # 40002000 <__global_pointer$+0x3fff0778> ; [a3]=a4 10068: 00178793 addi a5,a5,1 ; a5=a5+1 это запись младшего байта из 14го регистра a4 в память по адресу 0x40002000 хранимому в 13м регистре a3 и инкремент a5 - теоретически эти две команды можно выполнить одновременно т.к. они независимы 1006c: 0007c703 lbu a4,0(a5) ; a4=[a5] 10070: fe071ae3 bnez a4,10064 <_start+0x10> ; bne a4,x0,смещение до 0x10064 тут у нас чтение байта из памяти (адрес берётся из a5) и сохранение его в 14м регистре a4 (старшие байты в регистре заполняются нулями) и далее условие зацикливания a4!=0 - эти две команды зависят друг от друга - вторая не будет выполнена, пока первая полностью не отработает через все ступени конвейера (с обратной записью в регистр a4), однако если у нас имеется предсказание переходов и мы знаем, что оно обычно таки переходит на 0x10064, то мы не дожидаясь проверки можем спокойно отправляться вычитывать команды по адресу 0x10064, правда там идёт запись в память того же a4, которую мы делать не должны, пока не убедимся, что a4 обновлён и условие на предыдущем шаге таки выполнилось 10074: 00008067 ret ; jalr x0,x1,0 10046: ???? это возврат из подпрограммы - вторую команду тут можно игнорировать
|
24 Dec 2018 17:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вставил в эмулятор подсчёт 5 наиболее частых инструкций:
|
24 Dec 2018 21:03 |
|
|
|
Page 1 of 1
|
[ 13 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 7 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|