
RISC-V. ինժեների մանրամասն քննադատությունը ճարտարապետությանը
Ինժեներ Դմիտրի Գրինբերգը հրապարակել է երկար էսսե, որում պնդում է, որ RISC-V-ն չի կարող լավագույնը լինել ոչ փոքր միկրոկառավարիչների, ոչ սերվերային միջուկների համար, իսկ պարտադիր չդարձված հատկանիշները ստանդարտին համապատասխանությունը դարձնում են գրեթե անիմաստ։
Ինժեներ Դմիտրի Գրինբերգը իր dmitry.gr բլոգում հրապարակել է երկար էսսե՝ «RISC-V: They Should Have Known Better» վերնագրով, որտեղ մեկ տեղում հավաքել է այն բոլոր փաստարկները, որոնց պատճառով թերահավատորեն է վերաբերվում բաց հրահանգների համակարգի ճարտարապետությանը։ Նրա խոսքով՝ տեքստը գրվել է, որպեսզի հաջորդ անգամ իր դիրքորոշումը բացատրելու խնդրանքին կարողանա պատասխանել մեկ հղումով։
Մեկ ճարտարապետությունը չի կարող սպասարկել բոլորին
Ոչ մի հրահանգների հավաքածու չի կարող լավագույնը լինել բոլոր կիրառությունների համար. բարձր արտադրողականության միջուկի և էժան միկրոկառավարչի պահանջները լրիվ հակադիր են։ Գրինբերգը կարծում է, որ RISC-V-ն ի վերջո կզբաղեցնի 8051-ի էժան միկրոկառավարիչների տեղը, բայց դա տեղի կունենա ոչ թե հրահանգների համակարգի դիզայնի շնորհիվ, այլ դրա հակառակ։ Օրինակը ընդհատումների մշակումն է. ստանդարտին համապատասխան ուղին պահանջում է Zicsr ընդլայնում և mscratch կամ sscratch ռեգիստր, և հեղինակի հաշվարկով C-ով գրված մշակիչը աշխատանքը սկսելուց առաջ ծախսվում է առնվազն 44 ցիկլ։ Cortex-M0-ը ընդհատման մեջ մտնում է 15 ցիկլում, դուրս գալիս՝ 12-ում, այսինքն՝ 27, քանի որ ռեգիստրները պահում է ապարատային եղանակով։ Նույնիսկ ավելի քիչ ռեգիստր ունեցող RV32E տարբերակը հասնում է 38 ցիկլի։ CLIC-ի և արտադրողների սեփական արագ IRQ ընդլայնումների գոյությունը լրացուցիչ մեղադրանք է. բազային հրահանգների հավաքածուն արտադրողներին ստիպում է կառուցել ոչ ստանդարտ սիլիկոն՝ տասնամյա միջուկի մակարդակին հասնելու համար։
Սեղմված հրահանգները և զանգվածները
Սեղմված հրահանգների դիզայնը հեղինակը հատկապես թույլ է համարում։ Բայթ գրելու 16-բիթանոց հրահանգը կոդավորում է միայն զրոյից մինչև երեք տեղաշարժ, կես բառ գրելը՝ զրո կամ երկու, բառ գրելը՝ զրոյից մինչև 124։ Cortex-M0-ը բայթերի համար թույլ է տալիս զրոյից մինչև 31, կես բառերի համար՝ մինչև 62։ Ավելին՝ բայթ և կես բառ գրելու հրահանգները C ընդլայնման մեջ չեն, այլ առանձին Zcb ընդլայնման։ Երկրորդ խնդիրը ինդեքսային հասցեավորումն է. x86-ում կա [ebx + esi * 4], ARM-ում՝ [R0, R1, LSL #2], իսկ RISC-V-ում զանգվածի մեկ դիմումը պահանջում է երեք հրահանգ։ Այն արդարացումը, թե արագ միջուկները դրանք կմիավորեն մեկի մեջ, թույլ է. ոչ մի հայտնի միջուկ չի միավորում ավելի քան երկու հաջորդական հրահանգ։ SHxADD հրահանգներով Zba ընդլայնումը վավերացվել է միայն 2021 թվականին՝ բազային սպեցիֆիկացիայից ավելի քան երկու տարի անց։
Ամեն ինչ պարտադիր չէ
Գրինբերգը RISC-V-ն համեմատում է USB-C-ի և RCS-ի հետ. ստանդարտին համապատասխանության հայտարարությունը գրեթե ոչինչ չի նշանակում, քանի որ գրեթե ամեն ինչ պարտադիր չէ։ Բազմապատկումը՝ պարտադիր չէ։ Բաժանումը՝ պարտադիր չէ։ Օգտագործողի և սուպերվիզորի ռեժիմները, CSR ռեգիստրները, սեղմված հրահանգները՝ նույնպես։ CSR-ները, որոնք ի սկզբանե մտնում էին բազային հավաքածուի մեջ, տեղափոխվել են առանձին Zicsr ընդլայնում, ուստի այսօր բազային հավաքածուն չի կարող ոչ ստանդարտ ձևով մշակել ընդհատումներ, ոչ էլ առանձնացնել արտոնությունները։ Այն ռեգիստրը, որը պետք է պատասխանի՝ արդյոք հատկությունը ներդրված է, misa-ն է, ինքը CSR, որի աջակցությունը պարտադիր չէ և որը կարող է կարդացվել որպես զրոներ։ Նույնը վերաբերում է համակարգային ժամաչափին, որը քարտեզագրված է հիշողության մեջ ներդրումով որոշված հասցեով, և ընդհատումների վեկտորացման երկու ռեժիմներին, որոնցից ոչ մեկը պարտադիր չէ։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։