eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsortowanieRe: sortowanie
  • Data: 2012-10-17 22:28:30
    Temat: Re: sortowanie
    Od: Baranosiu <r...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 17.10.2012 Edek Pienkowski <e...@g...com> napisał/a:
    >> Nie mam pojęcia co przyświecało "geniuszowi" który postanowił
    >> zaoszczędzić na pamięci rejestrów, przecież gdyby to były fizycznie
    >> osobne komórki pamięci w procesorze, to nie byłoby żadnych problemów z
    >> tym związanych.
    >
    > Rejestr to nie jest komórka pamięci. To znaczy może masz generalnie
    > rację, ale to nie jest takie proste. Na wszystkim większym od jakiegoś
    > małego Atomka istnieje "register rename", "retire unit", i pozostałe
    > elementy pipeline, a z tego wynika, że rejestr o ile w ogóle
    > istnieje jako komórka pamięci (jedna lub w ogóle) to łączy się z całą
    > architekturą wokoło. Być może MMX/FPU są prościej zaimplementowane,
    > być może też jest to historyczna naleciałość - nawet nie wiedziałem.

    Z technicznego punktu widzenia rejestr to taka sama pamięć jak RAM czy
    cache, a że nie jest podpięty do szyny adresowej i że jego
    szyna danych jest podpięta pod inne komponenty, to już inna
    bajka, tak po prostu jest w przypadku x86, ale już na przykład w
    niektórych procesorach RISC (choćby takie małe Atmegi z rdzeniem AVR)
    rejestry są jak najbardziej adresowalne. Takie pierdoły jak "register
    rename" wynikają z prostego faktu, że nawet tanie mikrokontrolery za
    20zł mają 32 ortogonalne rejestry (nawet Amiga 30 lat temu miała
    16 rejestrów 32-bitowych, choć nie w pełni ortogonalnych) a Intel robi
    "wielką rewolucję" że w 64-bitowej maszynie raptem dodaje 8
    dodatkowych rejestrów do 4 już istniejących (reszta to indeksowe i
    segmentowe) i tylko dlatego, że AMD to zrobiło wcześniej, więc trzeba
    było "dogonić" konkurencję :D

    Pipeline? W 1996 roku na studiach programowałem procesor
    SparcUltra, który (pomijając że w pełni 64-bitowy) wykonywał dwie
    instrukcje w jednym cyklu zegara i trzeba było uważać jak się pisało
    programy w assemblerze, bo jak się po CALL _adres nie dało instrukcji
    NOP, to drugi potok mógł zdążyć wykonać instrukcję za "CALL" zanim się
    skok wykonał :D Nie daj się złapać na Intelowski marketing, tam po
    prostu wewnętrznie siedzi "normalny" RISC na którym chodzi
    "interpreter" x86 tylko po to, żeby że tak powiem API procesora było
    zgodne w dół (zresztą Intel sam oficjalnie twierdzi, że nie jest to
    procesor hardwired, tylko działa na zasadzie mikrokodu :D).

    Programowałem w swoim życiu w assemblerze na kilkanaście różnych
    architektur, od małych mikrokontrolerów, które nie miały nawet pamięci
    RAM (jedyną pamięcią było 16 rejestrów, nawet stosu nie było,
    architektura harvardzka, program w pamięci EPROM), do
    wieloprocesorowych maszyn SunMicrosystems (EP10000 z 32 dwurdzeniowymi
    64-bitowymi, wielopotokowymi procesorami na pokładzie :D) i przyznam
    szczerze, że moim zdaniem dwa najgorzej zaprojektowane procesory z
    jakimi miałem do czynienia, to rodzina Zilog Z80 i rodzina Intel
    x86 (no i mój własnego projektu 6-bitowy procesor zbudowany na
    układach TTL, ale to inna bajka, po pół roku pracy cieszyłem się, że w
    ogóle ruszył, a zainspirował mnie projekt www.homebrewcpu.com :D)

    Podejrzewam (to tylko hipoteza), że w momencie gdy AMD zaczęło
    stanowić poważną konkurencję dla Intela (na samych początkach Intel
    współpracował z AMD i nawet zlecał im niektóre projekty :D), to trzeba
    było wymyśleć jakiś chwyt marketingowy i wymyślili MMX,
    zaimplementowali te instrukcje w mikrokodzie i wykorzystali rejestry
    FPU aby nie trzeba było hardware modyfikować :D No a potem zgodnie z
    filozofią pełnej zgodności wstecz, ta niedoróbka ciągnie się do
    dzisiaj (AMD miało odwagę zrezygnować z 3DNow! :D).

    > W każdym razie takie eax na pewno istnieje w asm i jako zapisany
    > przed context switchem stan (czy w core), ale istnienia fizycznego
    > dawno nikt nie udowodnił. Asm definiuje maszynę a procesor ją
    > implementuje, ale ma wolną rękę jak to robi.

    Definiuje to specyfikacja a nie assembler, assemblerów na dany
    procesor może być bardzo wiele i nie mam tu na myśli samych programów
    assemblujących czy mnemoniki rozkazów tylko kod maszynowy. Na
    przykład w procesorach zrealizowanych na bazie układów FPGA można w
    trakcie pracy zmieniać ich architekturę (nie poprzez podmianę
    mikrokodu, tylko fizycznie zmienić konfigurację bramek logicznych!).

    "Nikt nie widział eax" bo pewnie nikt do środka nie zaglądał :D A tak
    na serio, to Intele nie są procesorami tzw. hardwired (takie są na
    przykład ARM-y, AVR-y itd.) tylko mają prosty rdzeń i mikrokodem
    załatwiają resztę :D W sumie mogliby udostępnić możliwość ładowania
    własnego mikrokodu, wtedy każdy mógłby stworzyć swój assembler (choć
    od takich rzeczy, to akurat układy FPGA są lepsze :D).

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: