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.
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.
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.
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.