Apple M1 vs x86

loza_wykletych
loza_wykletych
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 lata
  • Postów:854
1
Azarien napisał(a):

Kilka osób w tym wątku zachwalało jaka to zła niedobra jest architektura x86, a ARM taki wspaniały, RISCowy... zastanawiam się czy próbowaliście w ogóle napisać coś w asemblerze ARM?

Bo ja właśnie próbuję, i wiecie co? ARM też jest powalony, tylko w innych miejscach!

Argument w stylu pierwszych programistów taśm perforowanych - to się nie przyjmie skoro nawet najtęższe łby zawodzą przy programowaniu najprostszych rzeczy!


Z wszelkiego drzewa tego ogrodu możesz spożywać według upodobania - ale z drzewa poznania dobra i zła nie wolno ci jeść, bo gdy z niego spożyjesz, niechybnie umrzesz.
Zobacz pozostałe 5 komentarzy
loza_wykletych
loza_wykletych
Po prostu nie trafiłeś w swój czas - trzeba poczekać na Dżihad Butlerjański i takie fobie staną się kamieniem węgielnym nowego świata.
Azarien
świata w którym rolę komputerów pełnią ćpuny? :)
loza_wykletych
loza_wykletych
Hmm, w tych kategoriach (komputery klasyczne) to chyba nie ćpali (mentaci). Ćpuny to tam robiły za quantum computing xD
Azarien
mentaci chyba zbyt trzeźwi też nie byli.
loza_wykletych
loza_wykletych
Optymalizacja pod pik Ballmera.
AC
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:2
2

Być może trzeba poczekać na taki procesor RISC-V od Micro Magic Inc.— mała firma zajmująca się projektowaniem elektroniki w Sunnyvale w Kalifornii - wyprodukowała prototypowy procesor, który jest kilkakrotnie bardziej wydajny niż wiodący światowi konkurenci, zachowując jednocześnie rozsądną pierwotną wydajność. W CoreMark procesor Micro Magic RISC-V jest dużo szybszy od procesora Apple M1 i Ryzen 4700U.
https://arstechnica.com/gadgets/2020/12/new-risc-v-cpu-claims-recordbreaking-performance-per-watt/

edytowany 2x, ostatnio: any_case
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
4

Obiecałem, że coś napiszę nowego w temacie, więc w końcu piszę :)

@RequiredNickname:

Jak to możliwe, że mądre głowy z intela/AMD/nvidii (wydajność gpu podobno też ma być niesamowita) przez tyle lat same nie zaoferowały takich układów? Przecież w tych firmach pracuje sztab ludzi głowiący się jak zarobić więcej kasy a Apple nie ma technologii z kosmosu.

Apple ma dużo hajsu i może zatrudniać najlepszych specjalistów z branży. Specjaliści zmieniają pracodawcę tak samo jak "zwykli nie-specjaliści".

Inna kwestia która mnie nurtuje to czy te architektury (chociażby za pośrednictwem benchmarków) można od tak porównywać 1:1?

Każdy benchmark testuje trochę co innego, więc jeśli w benchmarku A procesor X jest szybszy od procesora Y o 20% to nie znaczy, że tak będzie w benchmarku B. Trzeba sprawdzić jakie są zasady w benchmarku, żeby ocenić co jest w ogóle porównywane.

@jarekr000000:

Ważnym elementem jest np. mniej restrykcyjny model pamięci ARM.. powodujący, że w programach niejawnie pisanych pod x86 mogą objawiać teraz różnego rodzaju race conditions. Nie wiem na ile kompilatory C/C++ to łapią... ale w takiej javie można obserwować inny wynik operacji wielowątkowych pod ARM i Intel (!!!). (Oczywiście - o ile program w javie jest niepoprawnie napisany).
Mniej restrykcji oznacza też więcej potencjalnej mocy z punktu widzenia procesora (mniej "synchronizowania cache", więcej możliwości przestawiania kolejności instrukcji na poziomie procesora)

DEC Alpha chyba wygrywało jeśli chodzi o kruczki modelu pamięci: https://www.cs.umd.edu/~pugh/java/memoryModel/AlphaReordering.html W czasach świetności byli liderem wydajności.

@sig:

ps coś mi się obiło kiedyś o oczy że rdzenie x86 mają wbudowanego "tłumacza" na zupełnie inną architekturę, bo bez tego nie dało by się dalej zwiększać wydajności. tak więc może się okazać że tam "pod spodem" coś na kształt ARM-a jest.

Wydajne procesory używają https://en.wikipedia.org/wiki/Micro-operation i https://en.wikipedia.org/wiki/CPU_cache#UOP-CACHE . Robią to zarówno x86 jak i ARMy. Np Cortex-A77:
https://en.wikipedia.org/wiki/ARM_Cortex-A77

The Cortex-A77 is a 4-wide decode out-of-order superscalar design with a new 1.5K macro-OP (MOPs) cache.

Jeśli chodzi o wydajność serwerową to:

Jeśli chodzi o oprogramowanie na architekturę ARM64 to moje przepowiednie się sprawdzają. Apple ma wystarczającą siłę przekonywania, by producenci oprogramowania szybko portowali je na nową architekturę. Google Chrome na Apple Silicon M1 pojawiło się bardzo szybko i ma dużo wyższą (prawie 2x) wydajność niż wersja x86 chodząca pod Rosettą 2: https://arstechnica.com/gadgets/2020/11/google-chrome-is-available-as-an-apple-m1-native-app-today/ Microsoft Edge też ma natywną wersją na ARMowe Maki. Adobe już na starcie miało kilka programów natywnie skompilowanych pod Apple M1, a jest ich coraz więcej. Microsoft przeportował Office 365 pod Apple M1: https://www.microsoft.com/en-us/microsoft-365/blog/2020/12/15/4-ways-microsoft-365-is-improving-the-experience-for-mac-users/ IntelliJ IDEA od JetBrainsów też ma wersję specjalnie przygotowaną dla Apple M1.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Zobacz pozostałe 5 komentarzy
piotrpo
@hauleth: Pytanie nie brzmi dlaczego Intel/AMD nie zrobiły równie wydajnego procesora zgodnego z x86, tylko dlaczego nie wpadli na pomysł porzucenia kompatybilności wstecznej na rzecz wydajności. Wiem, że dla części użytkowników możliwość uruchomienia jakiegoś 20 letniego softu jest kluczowa, ale jest to nisza i jak widać, da się to obejść emulacją, która mam mniejszy narzut niż trzymanie się oryginalnego zestawu instrukcji. Aktualnie mamy sytuację w której mój desktopowy CPU dostaje w dupę od kalkulatora, więc coś poszło nie tak.
Wibowit
@piotrpo: Wycięcie instrukcji służących do obsługi 20-letniego softu raczej wiele by nie zmieniło. Problem polega na tym, że całe ISA jest oparte o instrukcje zmiennej długości, masę prefiksów, itp itd
piotrpo
@Wibowit: Ja nie wiem co trzeba zmienić, po prostu patrzę na fakty i próbuję je interpretować. Jeżeli Apple było w stanie porzucić x86, przejść na ARM, zachować kompatybilność wsteczną i uzyskać wzrost wydajności, to pojawia się pytanie, dlaczego taki Intel robiąc procesory od 50 lat (czyli powinni umieć) na to nie wpadł. Bo teraz sytuacja wygląda w ten sposób, że zarówno Intel jak i AMD wydają się być głęboko w ... lesie.
Wibowit
Apple kontroluje teraz wszystko: procesor, kartę graficzną, pozostałe moduły SoCa, całe laptopy, system operacyjny, oprogramowanie biurowe, multimedialne, kompilatory, przeglądarkę, duży wpływ na twórców oprogramowania na Maki, itp itd Dzięki temu może przepchnąć przejście architekturalne z sukcesem. Poza tym iPhone był intratnym poletkiem doświadczalnym dla tworzenia super wydajnych rdzeni, więc wrzucając te rdzenie dodatkowo do laptopów Apple nie ponosi dużych kosztów. AMD ma licencję na tworzenie 64-bitowych ARMów: https://en.wikipedia.org/wiki/AMD_K12
hauleth
@piotrpo: chcę zauważyć, że Intel próbował to zrobić z IA-64 (Itanium) i słabo im to wyszło. Chwilę później AMD wyszło z amd64 (znaną też jako x86-64) i wygrało rynek właśnie przez kompatybilność wsteczną. A z racji, że ani Intel ani AMD nie kontrolują oprogramowania, to jak mieli zrobić zmianę architektury wraz z oprogramowaniem?
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 9 godzin
  • Postów:613
0

Jest na forum ktoś kto korzysta ze sprzętu Apple opartego o M1 do programowania?
Do soboty mam czas zdecydować, czy odbieram nowy sprzęt na x86-64 (Ryzen 7 5800H) czy może nie wejść do elektro marketu z kubkiem sojowego latte i nie kupić macbooka pro m1 w wersji z 16GB ram ;)

Zobacz pozostały 1 komentarz
RequiredNickname
Fejm z bycia programistą nieco ulatuje i coraz ciężej patrzeć mi na innych z góry. Szukam katalizatora.
cerrato
To sobie zrób dziarę kutasa na czole. Nadal będzie to mniej obciachowe niż posiadanie Apple :p
RequiredNickname
Bardziej byłoby tylko "I <3 Apple" :D
cerrato
No to już w ogóle jest poniżej jakiekolwiek krytyki ;)
.andy
@cerrato: z tym kutasem to zrobiłeś mi dzień :D ;) No ale co jak co masz rację ;)
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:17 minut
  • Postów:5105
1

@RequiredNickname: bierz m1 i się pochwalisz jak to śmiga

wpadnie z 10 łapkuf na forum, co jest bezcenne

edytowany 2x, ostatnio: WeiXiao
RequiredNickname
jednak wziąłem asusa ;)
GH
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 3 lata
  • Postów:811
0

Bierz Apple, emulowanie javy na arm to świetny pomysł, będzie pan zadowolony

Zobacz pozostałe 20 komentarzy
GH
Ale .net ma też tak samo głęboko
Wibowit
Nie ma bezpośredniego powodu, by Apple miało obowiązek mieszania się w Javę. Analogiczna sytuacja dotyczy Node.js, Pythona, PHP, itp itd Apple nie musi wszystkiego portować na swoją nową platformę. Nad przeportowaniem Javy na macOS + ARM64 pracowały dwie firmy: Azul Systems, Inc. i Microsoft. MS miał dużo mniejszy bezpośredni wkład, ale z drugiej strony na https://github.com/openjdk/jdk/pull/2200 jest napisane (...) the implementation of JEP 391: macOS/AArch64 Port. It's heavily based on existing ports to linux/aarch64, macos/x86_64, and windows/aarch64.
Wibowit
Nawet na JEP 391: macOS/AArch64 Port widać: Depends JEP 388: Windows/AArch64 Port oraz An AArch64 port already exists for Linux (JEP 237), and work is underway on an AArch64 port for Windows (JEP 388). We expect to reuse existing AArch64 code from these ports by employing conditional compilation Co jeszcze ciekawsze, na https://www.microsoft.com/openjdk widać: Microsoft is proud to have contributed the Windows on Arm port in 2020 as well as having made major contributions to the macOS M1 port.
somekind
@Ghost_: who cares? Widziałem w życiu raptem jednego masochistę, który odpalał na Maku wirtualkę, aby w .NET kodzić. W ogóle nie rozumiem wchodzenia do rezerwatu, żeby uprawiać programowanie w technologiach spoza rezerwatu. To się nie kompiluje.
GH
Tak samo i java. Dlatego już pisałem, że pytający, który jak się zdaje, programuje w Javie, ma dość dziwny pomysł jeśli chce kupować maka i to jeszcze w dodatku na arm. Moim zdaniem to nie ma sensu.
P1
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 5 godzin
0

Pod poniższym linkiem znajdziesz filmiki gościa co porównywał wydajność M1 z Intelem/AMD w różnych językach i frameworkach.

sebek6543210
  • Rejestracja:prawie 4 lata
  • Ostatnio:2 miesiące
  • Postów:17
1

Ja czekam na ruch ze strony intela i amd. Szczególnie jak okaże się, że apple w M2 pokaże kolejny spory wzrost wydajności.
Jak na mnie to intel i amd już nie za wiele mogą zrobić z tym co mają. W zasadzie to żeby tworzyć coś wydajnego to trzeba korzystać z SIMD, enkoderów i innych rzeczy. Dla przeciętnego programisty pozostają biblioteki, które są optymalizowane do obliczeń na danej architekturze, albo liczenie na automatyczne optymalizacje kompilatora.
Ktoś wspominał o problemach jakie pojawiają się przy Machine Learningu. W mojej opinii jeśli mamy jakieś z definicji równoległe zadanie do wykonania to warto je wykonywać na równoległej architekturze, czyli np. na gpu. Daje to często spore przyrosty wydajności, a praktycznie zawsze daje to spadek użycia energii na to samo zadanie. Procesor z natury jest stworzony do zadań sekwencyjnych.

GH
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 3 lata
  • Postów:811
0

Każdy zdaje sobie sprawę, że architektura x86 ma swoje ograniczenia. Co nie znaczy, że teraz wszyscy rzucą się na arm, zwłaszcza że jak na razie to może oprócz mniejszego poboru mocy, to żaden arm niczym się nie wyróżnił na plus.

Zobacz pozostały 1 komentarz
sebek6543210
Moim zdaniem konkurencja przyniesie nam dobre rozwiązania. Jeśli nie będzie to przejście na ARM to pewnie będzie to poprawa obecnej architektury. A może przejdą na ARM ale zachowają jakiś mały rdzeń x86 dla kompatybilności wstecznej. W dzisiejszych czasach poza grami to w wielu przypadkach oprogramowanie mogłoby być przekompilowane, a biblioteki przystosowane do innej architektury i po drobnych poprawkach wydane. Intel teraz kombinuje z dużymi i małymi rdzeniami. Może szykuje się pod taką hybrydową architekturę.
GH
Tylko problem w tym, że nie można sobie ot tak przeskoczyć na arm. Bo jest jeszcze kwestia oprogramowania
sebek6543210
Apple właśnie pokazuje jak to wygląda. Starsze oprogramowanie trzeba będzie uruchamiać poprzez wirtualizację. Trzeba by opracować jakiś niewidoczny dla użytkownika mechanizm, który by to robił. Nowe oprogramowanie wystarczyłoby zwykle przekompilować do nowej architektury. Wiem, że może przy okazji wyjść masa rzeczy, które trzeba by poprawić lub nawet napisać od zera, ale dziś coraz bardziej w popularnym oprogramowaniu korzysta się z wysokopoziomowych języków, a ewentualne wstawki zależne od architektury są w bibliotekach i to nad nimi będzie najwięcej pracy.
piotrpo
Kompilujesz JVM, .NET i już masz 90% tego co chodzi w chmurze. Wirtualizacja ogarnia resztę.
Wibowit
Apple ma w poważaniu kompatybilność wsteczną dla starych programów. Jakiś czas temu wycięli całkowicie obsługę 32-bitowego oprogramowania w macOSie. Rosetta 2 też całkowicie wyleci za parę lat.
PR
PR
  • Rejestracja:około 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:204
1

Jeju... Jak to czytam to mam wrażenie że nikt nie wie o czym pisze. X86 to CISC - czyli długie rozkazy, których jest od groma do wszystkiego. Tysiące opcodow. Rozkaz może trwać kilka cykli zegara jak złożona funkcja i powstaje nawet maszynowo implementowany mikrokod do tworzenia takich instrukcji. Pamięć nie jest za to bardzo obciążana. RISC to krótkie instrukcje mieszczące się w słowie maszynowym (64b) i przetworzenie ich zajmuje 1 cykl zegara. Tutaj jest nastawienie na optymalizacje przez kompilatory w postaci używania krótkich instrukcji. Zużycie ramu jest większe. ARM to skrót od Advanced RISC Machine. Czyli ARM to RISC. Przez to ze mniej implementuje - raptem garść jednocyklowych rozkazów jest prostszy w konstrukcji i zużywa mniej energi. Kto robił cis w bramkach TTL ten wie ile tranzystorów jest potrzebne do zrobienia parsera,instrukcji warunkowych czy maszyny stanów a x86 wiele implementuje sprzetowo. Ci co mówią o hybrydach... no ale to już jest - Intel Core ma w środku rdzenie RISC i ABI CISC czyli de facto Intel mistrzowsko emuluje x86 i tak już. Teraz mogli by iść w udostępnienie ABI RISC ale maja tyle tałatajstwa, ze fizycznie staje się do skomplikowane . x86 ma w sobie sprzętowa kartę sieciowa, klienta DHCP i w zasadzie może połączyć się z siecią z pominięciem systemu hosta. Co więcej ma jakieś układy fpga i maszynę wirtualna w środku i kawałki kodu Minixa - teoretycznie do zarządzania flotą maszyn w technologii Intel Pro. Nie wiadomo co będzie z ARM jak dołożą takie fajerwerki ale pytanie czy dołożą? Jeśli laptop pracuje dobę na baterii to jest to fenomenalne.To, że świat idzie z CISC na RISC to fakt, a nie opinia czy uczucia religijne - już przepowiedziane ponad dekadę temu przez mojego profesora od architektury komputerów.

Sam mam m1 i w pracy codziennej pracuje lepiej niż i5 w Macu. Do większych obliczeń zawsze są serwery developerski i chmura - pytanie po co więcej mocy lokalnie? Podejrzewam, ze zobaczymy maszynę z 16rdzeniami, 64GB ram i 4TB dysku i to do developerski starczy - przecież nie potrzeba mocy podczas procesu developerskiego a profilowanie i tak odbywa się na środowiskach 1-1 produkcyjnych. Coraz mniej tez zależy id wydajności CPU a od zaprojektowania przepływu w mikroserwisach i wąskich gardeł tam.

edytowany 2x, ostatnio: pragmaticdev
Zobacz pozostałe 14 komentarzy
PR
pragmaticdev
Dodatkowo możesz sobie grać w najnowsze gry na ultrabooku na full detalach przez kilkanaście godzin na baterii w terenie - jaki gamingowy łapek to uciągnie?
sebek6543210
Ja również uważam, że najpierw należy na coś zarobić, a potem dopiero można to kupić. Kredyt na konsumpcję uważam za jeden z gorszych pomysłów na jaki można wpaść w sferze finansów osobistych. Wskazuję, że takie jest coraz częściej podejście ludzi i z tym trzeba się niestety liczyć. Osobiście wolę posiadać dobry komputer niż wykupywać jakieś abonamenty na granie, tym bardziej, że mi wystarcza sprzęt sprzed 7 lat :)
PR
pragmaticdev
No nie powiem, mam kilka konsol i komputerów do starszych gier i dają radę. Ale np. niedawno był na Epicu za darmo Frost Punk - nie mam sprzętu, żeby to uruchomić a na GeForce Now sobie gram po godzinkę dziennie i to za free - czyli nie wydałem złotówki na tą rozrywkę, a dodatkowo automatycznie kontroluje czas jaki marnuje bo po 1h kończy się darmowa sesja gry ;)
SI
A co jak szpiedzy przemysłowi się do tej chmury włamią? USA, Rosjanie, Chińczycy i tak dalej. Dane różnych firm w jednym miejscu, więc warto poświęcić na to ogromną ilość zasobów. Ludzkich, sprzętowych i finansowych (np kupić właściciela przez jakąś spółkę-krzak, albo wręcz stworzyć takową i rozreklamować). Dla mnie chmura to co najwyżej zewnętrzny backup po bardzo ale to bardzo dobrym szyfrowaniu po mojej stronie.
PR
pragmaticdev
Też tak sądziłem, ale zmieniłem zdanie jak zacząłem używać. SQS, XRay, CloudFormation i inne z setek serwisów AWS sprawiają, ze systemy rozproszone zupełnie inaczej się pisze. To całe infrastruktury i frameworki. Nie postawisz tego lokalnie. Istnieje localStack ale to bardziej do testów integracyjnych i developerki niż do działania na prodzie. Niemniej racja - dostawce platformy musisz traktować jako gwaranta bezpieczeństwa i mu ufać. Żeby postawić coś takiego u siebie wydał byś wielokrotnie więcej na oprogramowanie samej chmury niż na system który piszesz.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
5
pragmaticdev napisał(a):

Jeju... Jak to czytam to mam wrażenie że nikt nie wie o czym pisze. X86 to CISC - czyli długie rozkazy, których jest od groma do wszystkiego. Tysiące opcodow. Rozkaz może trwać kilka cykli zegara jak złożona funkcja i powstaje nawet maszynowo implementowany mikrokod do tworzenia takich instrukcji. Pamięć nie jest za to bardzo obciążana. RISC to krótkie instrukcje mieszczące się w słowie maszynowym (64b) i przetworzenie ich zajmuje 1 cykl zegara. Tutaj jest nastawienie na optymalizacje przez kompilatory w postaci używania krótkich instrukcji. Zużycie ramu jest większe. ARM to skrót od Advanced RISC Machine. Czyli ARM to RISC. Przez to ze mniej implementuje - raptem garść jednocyklowych rozkazów jest prostszy w konstrukcji i zużywa mniej energi.

To brzmi jak jakieś mity i legendy. ARM ISA to garść jednocyklowych rozkazów? Hmm, popatrzmy co Arm Armv9-A A64 Instruction Set Architecture nam oferuje: https://developer.arm.com/documentation/ddi0602/latest . Ja tam widzę masę instrukcji (chyba setki, jeśli połączyć wszystkie ich rodzaje), włącznie z dzieleniem i to nawet wektorowym dzieleniem liczb całkowitych (o ile dobrze rozumiem). Nawet x86 tego nie ma. Jeśli to jest "garść jednocyklowych rozkazów" to szacun dla Arma.
https://developer.arm.com/documentation/ddi0602/latest/SVE-Instructions/UDIV--Unsigned-divide--predicated--?lang=en
https://developer.arm.com/documentation/ddi0602/latest/SVE-Instructions/SDIV--Signed-divide--predicated--?lang=en

Obecnie główne różnice między ARM, a x86 to nie liczba instrukcji (w obu architekturach jest masa instrukcji), a raczej kodowanie instrukcji (x86 ma skomplikowane kodowanie ze względów historycznych) czy model pamięci (x86 ma silniejsze gwarancje dotyczące widoczności modyfikacji pamięci, ARM potrzebuje większej liczby memory barriers).

O ile dobrze zrozumiałem artykuły o ARMie to Scalable Vector Extension (SVE) ma swoje korzenie w superkomputerach. Fujitsu produkuje superkomputery, które do niedawna były oparte o architekturę SPARC (od Suna, a później Oracle), dla której Fujitsu rozwijało rozszerzenia wektorowe. Niedawno Oracle zarzuciło całkowicie rozwój SPARCa i Fujitsu przeniosło się na ARMa, przenosząc przy okazji swoje mechanizmy obliczeń wektorowych. Dokładniej rzecz biorąc to SVE nie jest własnościowym rozszerzeniem Fujitsu tylko zostało we współpracy z Armem włączone do standardowej ARM ISA.

Co do ARMów w serwerowniach/ chmurach obliczeniowych, to sztandarowym przykładem sukcesu jest AWS Graviton:
aws-graviton2.png

Z innych ciekawostek, to procki ARMowe też mają dekodery instrukcji i tłumaczą z RISC na RISC. Cortex-A77 i późniejsze (obok pamięci podręcznej dla niezdekodowanych instrukcji) mają pamięć podręczną dla zdekodowanych instrukcji (micro-op cache, analogicznie jak w x86). Procki ARMowe potrafią nawet kompresować instrukcje, by zwiększyć efektywną pojemność wewnętrznych buforów procesora:
https://www.anandtech.com/show/16693/arm-announces-mobile-armv9-cpu-microarchitectures-cortexx2-cortexa710-cortexa510/2

The core also increases its out-of-order capabilities, increasing the ROB (reorder buffer) by 30% from 224 entries to 288 entries this generation. The effective figure is actually a little bit higher still, as in cases of compression and instruction bundling there are essentially more than 288 entries being stored. Arm says there’s also more instruction fusion cases being facilitated this generation.

(notabene: Intel Skylake ma ROB o rozmiarze 224, a u Apple M1 pojemność ROB to podobno ponad 600)


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 12x, ostatnio: Wibowit
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
1

Dokładnie jak @Wibowit mówi. Największą zaletą ARMa nie jest to, że instrukcje są "jednocyklowe" (bo nie są), a to, że mają ustaloną długość przez co dekoder jest zdecydowanie prostszy (i jego zrównoleglona implementacja jest zdecydowanie prostsza, bo nie trzeba "zgadywać" długości instrukcji). To jest po prawdzie główne źródło oszczędności zarówno prądu jak i powierzchni krzemu. Tego problemu w x86 nie da się rozwiązać bez zrywania kompatybilności wstecz z czym ARM nie ma większego problemu.

Przy okazji, jest ich w manualach dużo nie tylko dla tego, że ARM faktycznie ma ich dużo, co z tego powodu, że wiele mnemonik to aliasy na inne polecenia, a polecenia procesora opisują więcej niż 1 rzecz. To trochę jak w Vimie składasz je z poszczególnych elementów (podstawa, rejestry, skok warunkowy, przesunięcie, wartość, etc.). Przykładowo:

Kopiuj
MOV X2, X1

To to samo co:

Kopiuj
ADD.AL X2, X1, #0 LSL #0

Czyli bezwarunkowe dodanie wartości X1 do 0 (przesuniętego o 0 bitów w lewo) i zapisanie wyniku w X2. Więc nawet jak mamy sporo mnemonik, to część z nich jest po prostu inną nazwą na te same instrukcje (bo zobaczmy, że instrukcja ADD wyżej może zostać użyta również do implementacji - JMP, wszelkie skoki warunkowe, rotacje, przypisania warunkowe, etc.). Więc mając jedną instrukcję możemy zrobić wiele rzeczy na raz (prawie jak MOV w x86-64).

EDIT: Tutaj można zobaczyć jak wiele jest jeszcze miejsca w przestrzeni instrukcji A64:

Źródło - https://weinholt.se/articles/arm-a64-instruction-set/


edytowany 3x, ostatnio: hauleth
Zobacz pozostałe 11 komentarzy
Azarien
@Wibowit: ale dałoby się (jeśli zachodziłaby taka potrzeba) dla każdego bajta w cache procesora określić ile bajtów ma teoretyczna instrukcja zaczynająca się od danego bajta (można założyć 0 jeśli instrukcja jest nieprawidłowa). mógłby to robić bardzo szybko niezależny układ już w momencie zaciągania bajtów do cache. zajęłoby to 1/3 pojemności cache (4 dodatkowe bity na każdy bajt dla instrukcji od długości od 1 do 15 bajtów).
Wibowit
@Azarien: dałoby się, ale weź pod uwagę dwie rzeczy. Po pierwsze: micro-op cache i tak zostaje, bo ma wysoką przepustowość i niskie zapotrzebowanie na prąd. Mniejsze zużycie prądu = mniejsze nagrzewanie procesora = więcej okazji do podniesienia taktowania (różne rodzaje turbo). W materiałach reklamowych producenci CPU zwykle piszą, że ponad 80% wykonywanych instrukcji pochodzi z micro-op cache. Reszta jest dekodowana od zera i pochodzi z L1I$ (level 1 instruction cache). Obstawiam, że to co wychodzi poza micro-op cache to instrukcje i tak szybko wylatujące z cache'a.
Wibowit
Po drugie: transfer danych z np. L2$ do L1I$ ma przepustowość np 64 bajty na takt. Opóźnienia są oczywiście na tyle duże (kilkanaście taktów), że w przypadku takiego pojedynczego transferu średnia prędkość to kilka bajtów na takt. Trzeba jednak wziąć pod uwagę to, że zaciąganie danych do L1I$ jest robione z wyprzedzeniem, a więc może być wiele takich transferów naraz i opóźnienia się amortyzują. Co to oznacza w praktyce? Być może to, że otagowanie 64 bajtów oddzielnie wymagałoby 64 rozbudowanych dekoderów? To by potrzebowało dużo krzemu i dużo prądu, co mija się z celem.
Wibowit
Coś się zmieniło w temacie jednak: https://www.anandtech.com/show/16881/a-deep-dive-into-intels-alder-lake-microarchitectures/4 Back on the decoder, Intel supports on-demand decode which stores a history of previous decodes in the instruction cache and if recent misses are recalled at the decode stage, the on-demand stream will pull directly from the instruction cache instead, saving time – if the prefetch/decode works, the content in the instruction cache is updated, however if it is doing poorly then the scope is ‘re-enabled for general fetches’ to get a better...
Wibowit
...understanding of the instruction flow. This almost sounds like a micro-op cache without having a physical cache, but is more to do about instruction streaming. Either way, the decoders can push up to six uops into the second half of the front end. - strasznie enigmatycznie opisane moim zdaniem. W przyszłości pewnie będą lepsze opracowania tego tematu. Sam mechanizm jest tylko w tzw. małych rdzeniach (Intel idzie w kierunku podobnym do ARMowego big.LITTLE).
Marcin Marcin
  • Rejestracja:prawie 6 lat
  • Ostatnio:19 dni
  • Postów:610
0



Fan moderatora somekind
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 9 godzin
  • Postów:613
XY
  • Rejestracja:ponad 6 lat
  • Ostatnio:16 dni
  • Postów:257
0

Apple prawdopodobnie wypuści nowe wersje Maca Pro z procesorami Intela, więc może z tym zmiataniem z planszy wszystkiego przez ich własne procesory nie jest jeszcze tak różowo. ;)
https://www.notebookcheck.net/Evidence-of-a-refreshed-Apple-Mac-Pro-with-Intel-Ice-Lake-processors-emerges.544549.0.html

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
3

O ile dobrze pamiętam to jest to zgodnie z planem, tzn zapowiedziami Apple'a na samym początku, że jeszcze przez 2 lata od premiery Apple Silicon będą wydawać nowe modele komputerów opartych o procesory Intela.

Jest to ukłon w stronę ludzi, którzy bardzo chcą używać oprogramowania od producentów ociągających się z portowaniem oprogramowania na Apple Silicon natywnie. Dzięki temu ci użytkownicy nie są skazani na lewiznę typu emulacja x86 po Rosettą 2.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 3x, ostatnio: Wibowit
lgtk
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 20 godzin
0

Ktoś ma japko z arm m1 i sprawdzał jak parallels z visual studio działa? Mam 2 projekty legacy które muszę jeszcze ze 2-3 lata utrzymywać w net framework (jeden jakieś asp, drugi winforms) i się zastanawiam czy by to poszło na macu z arm czy bym musiał nadal w podróży z rdp lecieć.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
2

Właśnie oficjalnie wyszła Java 17 z natywnym wsparciem dla macOS+ARM64: https://openjdk.java.net/projects/jdk/17/jeps-since-jdk-11

Prawdopodobnie będzie szybko i (jak to przy informatycznych debiutach bywa) z okazjonalnymi błędami :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 4x, ostatnio: Wibowit
Zobacz pozostałe 5 komentarzy
GH
Czyli, zasadniczo nie ma. A C miał już w latach 80. Ot, Java
Wibowit
Nie ma bezpośrednio, bo takie jest założenie, że ma nie być. C ma też arytmetykę wskaźników, goto, makra preprocesora i inne cuda na kiju.
GH
Tak, jedno z dziwnych założeń. W odróżnieniu od goto akurat unsigned może być przydatne
Wibowit
w biznesowym kodzie nie widziałem potrzeby stosowania unsigned. unsigned to świetny sposób na strzał w stopę, gdy np. iterujemy w dół, albo odejmiemy większą liczbę od mniejszej. po co dawać taką możliwość w języku, w którym i tak to unsigned bardzo rzadko by się przydawało? od unsigned to już ze 100x bardziej przydaje się np. programowanie funkcyjne.
hauleth
@Ghost_: goto też może być przydatne.
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
1

@kajmetro: zależy jaka praca. Dużo nie powinno się zmienić IMHO. Trochę wydajność na pewno skoczy w górę, ale jakichś wielkich wodotrysków bym się nie spodziewał.


.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • Postów:1524
1

@kajmetro: no są alternatywy ;) Jeżeli szukasz niewielkiego laptopa głównie do zabawy, to od Della XPS albo Inspiron.


Software is like sex: it's better when it's free.
- Linus Torvalds
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:408
0

Przydałoby się nowe porównanie z procesorami Ryzen 6xxx od AMD. Zintegrowany Radeon 680M potrafi nawet odpalić Cyberpunka w 30 fps na niskich detalach w full HD bez funkcji od obniżania jakości grafiki i podwyższania fps jak np. dlss od Nvidii. To byłoby ciekawe porównanie.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)