• naurM
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    1 month ago

    Ciekawe jak to by się skalowało do ISA z dużym zbiorem rozkazów. Podejrzewam, że w przypadku x86 złożoność byłaby gigantyczna.
    Tak czy inaczej, wynik niezły. Przydałby się fontend C. :-)

    • サぺルOP
      link
      fedilink
      Polski
      arrow-up
      1
      ·
      1 month ago

      Zawsze możesz ograniczyć ilość instrukcji. Jak to robią duże kompilatory.

      Może historia się powtórzy i ktoś odkryje, że mały zbiór instrukcji x86 jest szybszy niż cała reszta. Np ten zestaw o którym wspominał Keller. Że procesory głównie wykonują 6 instrukcji i optymalizacje w tym obszarze dają największy zysk.

      Pewnie dzisiaj nie jest to możliwe pod względem wydajności, ale może być pod względem zużycia energii lub zajętości pamięci/wykorzystania cache/przewidywania. Ewentualnie zbudowania bardziej wydajnego układu.

      • naurM
        link
        fedilink
        Polski
        arrow-up
        1
        ·
        1 month ago

        Z tymi 6 instrukcjami to jest na pewno jakieś uproszczenie.
        Może chodziło mu o klasy instrukcji (load, store, jmp, cmp, stos, arytmetyka),albo o reprezentację jako µops.

        W praktyce nawet dla prostego mov masz spory wybór, bo możesz przesyłać różne szerokości słowa. Masz rozkazy SIMD, które dają ogromny przyrost wydajności, ale nie wszędzie możesz ich użyć. Do tego wybór pomiędzy warunkowymi skokami i predykowanymi instrukcjami (CMOV, AVX-512). Znacznie bardziej złożona alokacja rejestrów (kilkanaście GPR w x86-64 vs dwa w 6502).

        Ale chyba jeszcze większym problemem byłby fakt, że architektura jest OoO i konstruując pętlę musisz w praktyce estymować dostępność zasobów w CPU i śledzić zależności między instrukcjami. Nie wiem, jak można by to pogodzić z założeniami tego projektu, bo już teraz jest on zaskakująco złożony jak na codegen do bardzo prostej architektury.

        • サぺルOP
          link
          fedilink
          Polski
          arrow-up
          1
          ·
          edit-2
          1 month ago

          Domyślam się, że chodziło mu o to, że procesory nie działają cały czas przetwarzając jakieś ogromne ilości danych. Większość czasu idlują, przetwarzają jakąś pętlę oczekiwania, reagują na przerwanie zegara. Nawet jeśli udamy się dalej. Też nie robią nic wyszukanego w standardowym scenariuszu użytkownika. Przez ułamek sekundy zajmują się reakcją na zdarzenie i przetworzeniem danych.

          Nie na darmo są rdzenie heterogeniczne.