Vlákno názorů k článku Instrukční sada procesorových jader s otevřenou architekturou RISC-V od kvr kvr - To kodóvání délky instrukcí, skoro to vypadá, že...

  • Článek je starý, nové názory již nelze přidávat.
  • 5. 11. 2015 12:48

    kvr kvr

    To kodóvání délky instrukcí, skoro to vypadá, že se autoři inspirovali u UTF-8 :-)

    Jinak by mě docela zajímalo, zda má nějaké výhody tříadresový kód. IMHO v 99% případů je většina (mezi)proměnných stejně temporary, takže těch dalších 5bitů navíc je plýtvání. Spíš by je šlo použít na komplikovanější adresace apod...

  • 5. 11. 2015 17:40

    Pavel Píša (neregistrovaný)

    V mnoha případech je potřeba dále zachovat i obě vstupní hodnoty. Zkusím z hlavy například na klasické binární vyhledávání), key x18 (a0), array start x19 (a1), array size x20 (a2), návrat index x16 (v0), a uvidíme jak to vyjde (za chyby neručím, nekompiloval jsem to)

    add x21, x0, x0 /* spodní limit */
    loop:
    beq x20, x21, not_found
    add x16, x21, x20
    srli x16, x16, 1 /* 1. 2op */
    slli x22, x16, 2
    add x22, x22, a1 /* 2. 2op */
    lw x22, x22, 0
    beq x18, x22, found
    blt x18, x22, smaller
    add x20, x16, x0 /* 3. 2op */
    jal x0, loop
    smaller:
    add x21, x16, x0 /* 4. 2op */
    jal x0, loop
    not_found:
    add x16, x9, -1
    found:
    jalr x0, x1

    Tak zrovna tady je to tak půl na půl. Na druhou stranu přidání více instrukcí v případě dvouoperandového kódování povede na více souběžné řešení více závislostí a více problémů s přejmenováváním registrů a jejich plánování v superskalární implementaci, takže to buď výkon zpomalí nebo bude vyžadovat složitější HW.

    Jinak si lze RISC-V také spustit v JavaScriptu

    http://riscv.org/angel/

    ale na rozdíl od jor1k se zdá, že přímo na webu není k dispozici image s GCC ani možnost si do běžícího simulátoru něco nahrát.

  • 6. 11. 2015 7:20

    kvr kvr

    Já tam teď vidím dohromady dvě tříadresové:

    add x16, x21, x20
    slli x22, x16, 2
    (chyba - měl být jednoduchý load immediate -1) add x16, x9, -1

    Ta druhá by šla eliminovat, kdyby procesor uměl adresování s indexem, navíc by ušetřil i následující instrukci add. Obě by šly možná eliminovat, pokud by se místo indexu udržovaly start a end jako pointer.

    Tak jako tak, je to s původním řešením 4:2.

    Link vypadá pěkně, až na to, že je to jenom busybox. Ale na obranu je třeba říct, že s downloadováním image s gcc by asi přišli brzo na buben :-)

  • 6. 11. 2015 9:21

    atarist (neregistrovaný)

    já bych se bál komplikací při použití dalších adresovacích režimů, dostaneš tam kolize v pipeline (například při takovém add x1, [x2], ještě mnohem hůř při add x1, [x2+const])

  • 7. 11. 2015 17:56

    Pavel Píša (neregistrovaný)

    Chyby v chybě byl překlep v x0 na 9 místo na 0 a copy paste ADD místo ADDI.

    Je pravda že zrovna tento kód není moc přesvědčivý. I přesto jsem ho do diskuze dal, i když moc argument nepodpoří. Celkově ale mám pocit, že se tříoparandové instrukce hodí v takovém počtu případů, že se vyplatí.