10 najdziwniejszych instrukcji w procesorach x86

Autor przedstawia najdziwniejsze instrukcje które znajdują się w nowoczesnych procesorach x86_64 wraz z wytłumaczeniem co dokładnie robią.

  •  

    pokaż komentarz

    Nie mam pojęcia co ja właśnie oglądłem (humanista here) ale dla mnie programiści wszelkiej maści będą uchodzić za magików i żałuję że sam jestem za tępy żeby być jednym z nich :(

    •  

      pokaż komentarz

      żałuję że sam jestem za tępy żeby być jednym z nich

      @shemmy: E tam, każdy ma coś w czym jest mocny i co lubi. Bo aby być dobrym to trzeba szlifować, a aby do tego była ochota - trzeba lubić.

    •  

      pokaż komentarz

      @shemmy: spokojnie, większość dzisiejszych "programistów" na takie samo pojęcie o informatyce co Ty, a w pracy zajmują się banałami typu klepanie ładnych stron www, co można robić po kilkumiesięcznym bootcampie :)

    •  

      pokaż komentarz

      @shemmy: Większość programistów nie tyka tego poziomu, który jest w znalezisku.

    •  

      pokaż komentarz

      @ToJestNiepojete: Nie wiem za co dostajesz minusy, ale to najprawdziwsza prawda, zdecydowana większość klepie w językach wysokiego poziomu, nie mając absolutnie pojęcia o tym co dzieje się wyżej. Pracowałem z takimi dla których operacje na bitach, rozumienie wskaźników, jak działa alokacja pamięci czy zarządzanie wątkami / procesami to czarna magia. Instrukcje procesora i ich przetwarzanie to już poziom Voldemort.

    •  

      pokaż komentarz

      @PlesniakPospolity: a każdy mechanik to niby wyjaśni procesy fizyczne zachodzące podczas spalania paliwa?

    •  

      pokaż komentarz

      @shemmy: Magicy to są ci co projektują CPU GPU i ogólnie całe układy komputerowe. Zwykły człowiek skali skomplikowania dzisiejszego komputera nie jest w stanie ogarnąć.

    •  

      pokaż komentarz

      @shemmy: w sumie to programowanie jest jak j!$?nie - nap?$$@#?asz nap?$$@#?asz, starasz się żeby się za wcześnie nie wyj!$?ło, ale z czasem jak się nazbiera to musi trysnąć na produkcji exceptionami ( ͡° ͜ʖ ͡°)

    •  

      pokaż komentarz

      @PlesniakPospolity:

      Nie wiem za co dostajesz minusy
      Ode mnie dostała minusa, bo programowanie czegoś innego niż asm to nie jest klepanie prostych stron internetowych, a po za tym nikt po bootcampie nie dostanie pracy jako webdev.

      zdecydowana większość klepie w językach wysokiego poziomu, nie mając absolutnie pojęcia o tym co dzieje się wyżej. Pracowałem z takimi dla których operacje na bitach, rozumienie wskaźników, jak działa alokacja pamięci czy zarządzanie wątkami / procesami to czarna magia. Instrukcje procesora i ich przetwarzanie to już poziom Voldemort.
      Fakt klepania w językach wysokopoziomowych czyni programistę gorszym? To są narzędzia do zupełnie innych rzeczy, przy których spotyka się z zupełnie innymi programistycznymi problemami. Nie muszą wiedzieć co się dzieje na niższym poziomie, a i dobrze, bo ani nie ma na to czasu, ani też prawie żaden niskopoziomowiec nie zrobi tego lepiej niż już zrobili twórcy. A tak w ogóle wątki masz właściwie na każdym poziomie.

    •  

      pokaż komentarz

      Fakt klepania w językach wysokopoziomowych czyni programistę gorszym? To są narzędzia do zupełnie innych rzeczy, przy których spotyka się z zupełnie innymi programistycznymi problemami.

      @push3k-pro: Gorszym? Nie szczególnie, podstawowa wiedza na temat tego jak działa system na niższych warstwach pomaga jednak w poszerzaniu horyzotów i zmiany myślenia, a to przekłada się na bardziej wydajną pracę, większą niezależność i pisanie lepszej jakości kodu jeśli byłby to nawet Javascript. Ze swojego doświadczenia jako programista 40k (flex) przeszedłem przez cały stack co pozwoliło mi na dużo łatwiejszy awans względem kolegów, którzy utknęli na poziomie mida przez lata. I bynajmniej nie pisałem własnego systemu operacyjnego czy nie projektowałem procesora, mam ogólne zrozumienie, a to już ułatwia mi rozwiązywanie problemów z poza swojej domeny i zwyczajnie zmniejsza strach przez "nieznanym".

    •  

      pokaż komentarz

      @PlesniakPospolity:

      podstawowa wiedza na temat tego jak działa system na niższych warstwach pomaga jednak w poszerzaniu horyzotów i zmiany myślenia, a to przekłada się na bardziej wydajną pracę, większą niezależność i pisanie lepszej jakości kodu jeśli byłby to nawet Javascript.
      W jaki sposób?

    •  

      pokaż komentarz

      @shemmy: nawet początkowo osoby ogarniające komputery były w kulturze anglojęzycznej z okresu lat 70. czy 80. nazywane właśnie "computer wizzards" czyli dosłownie czarodziejami komputerowymi.

      Jako ci, którzy ówcześnie przez swoje zajawki i dostępność do sprzętu informatycznego i wiedzy o programach potrafili ogarniać komputery pomimo braku przystępnych domowemu użytkownikowi interfejsów.

      Tak więc nie jesteś z takim myśleniem pierwszy.

    •  

      pokaż komentarz

      @shemmy: 90% programistów nie mają pojęcia o czym jest mowa na tym filmiku. Patrzę na was front endowcy, Javowcy, Pythonowcy i innej maści wysokopoziomowcy.

    •  

      pokaż komentarz

      @push3k-pro: Przykładowo piszesz kod, wyjebuje się interpreter, dostajesz gigaloga ze stacktrace. Siadasz i płaczesz z braku rozwiązania na stacku bądź próbujesz to analizować. Wiedząc jak działają podstawy interpretera namierzasz problem z przepełnieniem stery (tak, w garbage collector też są wycieki pamięci), podpinasz profiler / debugger, analizujesz alokacje i znajdujesz wiszące referencje bo jakiś kawałek kodu robi coś poj??$nego. Problemów może być bez liku, czy to IO, czy problemy z ABI, binarnymi bibliotekami, które u ciebie w kodzie sprowadzają się do wywołania kilku linii, a pod spodem się kręci dużo więcej itp itd. Takie problemy oczywiście zdarzają się w mniej oklepanych zadaniach, ale przynajmniej u mnie taka wiedza zwiększa świadomość i jeśli sam nie umiem rozwiązać problemu to wiem gdzie potencjalnie może leżeć i gdzie szukać / spytać by go rozwiązać.

    •  

      pokaż komentarz

      @PlesniakPospolity: 3 lata klepię Androida i nigdy nie było potrzeby wchodzić tak głęboko, choć tykałem różne badziewie, w tym wysyłanie poleceń do drukarki termicznej.

    •  

      pokaż komentarz

      @PlesniakPospolity:

      I bynajmniej nie pisałem własnego systemu operacyjnego czy nie projektowałem procesora
      A ja w czasie studiów tak i wiesz co? Nie jest mi to do niczego w pracy potrzebne.

    •  

      pokaż komentarz

      @shemmy: Magicy to są ci co projektują CPU GPU i ogólnie całe układy komputerowe. Zwykły człowiek skali skomplikowania dzisiejszego komputera nie jest w stanie ogarnąć.

      @snejq2: Tez pracuje nad procesorami i powiem ci, ze nikt tego nie ogarnia. To jest podzielone na milion kawalakow i kazdy z miliona ludzi zna tylko swoj kawelek, troche zna kawalkei, ktore sie bezposrednio lacza z jego kawalkiem, a juz absolutnie nie ma zadnego pojecia o kawalku,ktory jest dwa kawalki dalej.
      Nad jednym procesorem pracuje tyle ludzi, ze sam sie dziwie, ze w calosci to jakos dziala.

      Co do programowania to ja tez zaczynalem od assemblera i mialem powazny problem przestawic sie na C/++.
      Ale ja od zawsze programowalem tylko krytyczne kawalki, a nie bylem bezmyslnym klepaczem.
      Programowalem kawalki, gdzie wymagania byly np.:
      -funkcja ma zajmowac nie wiecej niz 512 komorek pamieci ROM,
      -ma uzywac nie wiecej niz 16 komorek pamieci RAM, wspoldzielonej z reszta programu,
      -ma sie wykonywac dokladnie w 104 taktach maszynowych procesora.
      Sprobujcie napisac to w C++ albo Javie.
      Jak dostalem kompilator C++ to mowilem, jak ja mam to zrobic??

    •  

      pokaż komentarz

      @tomilipin Oj tam taka zabawa jezykiem ;) Myslalem ze odbierzesz jako zart :P Tak dlugo sie znamy przeciez...

    •  

      pokaż komentarz

      Fakt klepania w językach wysokopoziomowych czyni programistę gorszym?

      @push3k-pro: absolutnie nie!

      Nie muszą wiedzieć co się dzieje na niższym poziomie, a i dobrze, bo ani nie ma na to czasu

      @push3k-pro: a takie podejście już czyni programistę gorszym, a już na pewno mniej dobrym, niż mógłby być. Wiedza jak to działa niżej daje ci olbrzymie pole do popisu na wielu płaszczyznach. Po pierwsze, używasz narzędzi swidomie, więc dopasowujesz je lepiej do swojego przypadku. Po drugie, możesz świadomie ocenić narzędzie, którego używasz. Niektóre, nawet popularne, rozwiązania nie są tak doskonale, jak myślisz. Po trzecie, lepiej rozumiesz błędy i problemy (pamięciowe, wydajnościowe, związane z wielowątkowością lub asynciem). Po czwarte, masz intuicję, co powinno być rabialne, a co faktycznie może być trudne lub niemożliwe.

      Przykłady z życia:
      - jakie znaczenie ma rezerwowanie miejsca na obiekty w wektorach/listach/innych kolekcjach,
      - kiedy hashmapa jest dobra,a kiedy wystarczy posortowana lista,
      - jaki jest prawdziwy koszt stringów (mutowalność, kodowanie, ffi), kiedy i jak go uniknąć,
      - jak sobie poradzić, gdy twoje liczby mogą być większe niż 64/128 bitów,
      - czemu ceny nie są dokład ex gdy używasz floatow,
      - jaka jest cena rekurencji i kiedy jest zerowa?,

    •  

      pokaż komentarz

      @sasik520:

      Przykłady z życia:
      - jakie znaczenie ma rezerwowanie miejsca na obiekty w wektorach/listach/innych kolekcjach,

      Tu, gdzie robię? Zerowe.

      - kiedy hashmapa jest dobra,a kiedy wystarczy posortowana lista,
      A czy to rzeczywiście jest rozważanie niskopoziomowe?

      - jaki jest prawdziwy koszt stringów (mutowalność, kodowanie, ffi), kiedy i jak go uniknąć,
      Również nie ma znaczenia tu gdzie robię, większość z tego załatwia się tam, gdzie nie jest to wiedzą niskopoziomową.

      - jak sobie poradzić, gdy twoje liczby mogą być większe niż 64/128 bitów,
      j.w.

      - czemu ceny nie są dokład ex gdy używasz floatow,
      Ok, to jest dobry przykład, ale to nie jest coś co sprawi, że taka osoba, która nie wie jak działa float, nie znajdzie info o tym po przetestowaniu tego co robi.

      - jaka jest cena rekurencji i kiedy jest zerowa?,
      A co to takiego "cena" rekurencji?

      Po trzecie, lepiej rozumiesz błędy i problemy (pamięciowe, wydajnościowe, związane z wielowątkowością lub asynciem).
      Znowu - czy wszystko co tu wymieniłeś to są rozważania zarezerwowane dla niskiego poziomu?

      rabialne
      Co to za słowo?

    •  

      pokaż komentarz

      Większość programistów nie tyka tego poziomu, który jest w znalezisku.

      @push3k-pro: Nie tyka, ale mogliby.

    •  

      pokaż komentarz

      @Pivoo: Nie tyka na zasadzie, że nie spotykają się w tym w czasie pracy.

    •  

      pokaż komentarz

      @push3k-pro: Tak. Ale wielu po prostu potrafiłoby to ogarnąć, tylko po co jak można 15k zarabiać klepiąc crudy ctrl+c ctrl+v. W takim sense mogliby ( ͡° ͜ʖ ͡°)

    •  

      pokaż komentarz

      @PlesniakPospolity: Spotkałem się z tym samym. Programista (stka właściwie) i to taka 15k. Chciałem coś zagadać o "informatyce". Ja akurat dłubałem sobie w C++ i zacząłem coś o wskaźnikach i pamięci a ona na to że ona bardziej zajmuje się "programowaniem" www :) Wyszło że robi frontpadże w reakcie i nie bardzo wiedziała co to są w ogóle wskaźniki :)

    •  

      pokaż komentarz

      @PlesniakPospolity: powinieneś napisać, że nie wiedzą, co dzieje się niżej :)

    •  

      pokaż komentarz

      @piwotomojepaliwo: Problem w tym, że tacy ludzie często nawet są słabi w swojej wąskiej specjalizacji, znam takich co rzekomo "umieją w Reacta", a w praktyce ich wiedza kończy się na zbudowaniu komponentu, w którym dostają stan z góry i mają wyrenderować tabelkę. Nie twierdzę, że wiedza odnośnie takich wskaźników jest niezbędna, ale jak już jesteśmy przy Javascript to mi pozwoliło lepiej skumać różnicę między wartością, a referencją (defacto sprytniejszym wskaźnikiem).

    •  

      pokaż komentarz

      co się dzieje "niżej"

      @lusk: Ajć faktycznie mea culpa

    •  

      pokaż komentarz

      rabialne

      Co to za słowo?

      @push3k-pro: wykonalne, dające się zrobić. to się chyba nazywa kalka (z ang. doable).

      Ceną rekurencji jest rosnący stos i, co za tym idzie, możliwość przepełnienia stosu (Stack Overflow, prawdopodobnie znasz tę nazwę ;)). Ale w pewnych sytuacjach to nie problem.

      Ogólnie,powiedziałbym, że jesteś ignorantem. W sumie, nie wiem, czy to źle. Pracy jest na tyle dużo, że można i tak. Ale namawiam do rozszerzenia horyzontów.

    •  

      pokaż komentarz

      @sasik520:

      wykonalne, dające się zrobić. to się chyba nazywa kalka (z ang. doable).
      Widziałem nawet takie wyjaśnienie, ale chciałem się upewnić.

      Ogólnie,powiedziałbym, że jesteś ignorantem. W sumie, nie wiem, czy to źle. Pracy jest na tyle dużo, że można i tak. Ale namawiam do rozszerzenia horyzontów.
      To nie tak. Ja to wszystko znam. Znam struktury, wiem jak działa procesor, wiem jakie są polecenia, co się dzieje za kodem, który robię itd. Większość z tych rzeczy łoiłem w czasie studiów, a oprócz tego sam sobie co jakiś czas sięgam po wiedzę, głównie z nudów. Chodzi mi o to, że choć mam taką wiedzę, to tam, gdzie ja wykonuję pracę w ogóle tego nie używam.

      Ceną rekurencji jest rosnący stos
      "cena rekurencji" (-‸ლ)
      Skąd wziąłeś ten tekst? Daj mi jakiekolwiek miejsce w internecie polskojęzycznym, gdzie używa się takiego zwrotu, pojęcia, frazy czy co to jest oraz to o zerowej cenie rekurencji. Chcę zobaczyć, że to jest prawdziwe, a nie, że ktoś to na poczekaniu wymyślił i nazwał tak zupełnie inne rzeczy, które już są od dawna nazwane albo nie są nazwane tylko opisane prostymi słowami.

    •  

      pokaż komentarz

      @BigArtoo: Chyba doszliśmy do momentu, w którym dokumentacje techniczne są jak magiczne księgi. Nikt tego nie ogarnia, a tylko garstka wybrańców jest w stanie w ogóle skorzystać z wiedzy w nich zawartych. Ale nawet oni - najpotężniejsi magowie są w stanie okiełznać jedynie drobny wycinek i potrzeba zebrać najwybitniejszych przedstawicieli wielu szkół, żeby z ich połączonych mocy i pradawnej (20 lat temu, to w IT zamierzchła przeszłość) wiedzy przodków zawartej w księgach powstał nowy, potężny artefakt, którego moc zaklęta jest w kawałku krzemu.

    •  

      pokaż komentarz

      Skąd wziąłeś ten tekst?

      @push3k-pro: z głowy, a skąd? (: nie kumam, o co się spinasz, nie piszemy tu książki, a poza tym, to i blisko temu do popularnego angielskiego określenia "zero-cost", jak i polskich określeń że coś ma wysoką/niską cenę, które niekoniecznie odnoszą się do pieniędzy (pierwszy z brzegu przyklad - Ogień, błoto i łzy. Wysoka cena sukcesów Polaków w Dakarze.

      Przyznaje, że jestem trochę przejedzony i cukier zaburza funkcjonowanie mózgu, ale mam wrażenie, że w tym przypadku aż tak nie bredzę.

    •  

      pokaż komentarz

      @sasik520:

      z głowy, a skąd? (: nie kumam, o co się spinasz, nie piszemy tu książki, a poza tym, to i blisko temu do popularnego angielskiego określenia "zero-cost", jak i polskich określeń że coś ma wysoką/niską cenę
      Ok, to napisz mi tym razem jakie są prawidłowe polskie określenia na to co opisałeś.

    •  

      pokaż komentarz

      Wiedza jak to działa niżej daje ci olbrzymie pole do popisu na wielu płaszczyznach.

      @sasik520:

      Równie dobrze może być kotwicą, która cię zatrzyma przy nieistotnych detalach.
      (i nie przekonuj mnie do poznawania co się dzieje niżej bo wiem)

    •  

      pokaż komentarz

      @push3k-pro: określenia na to, że coś ma wysoką cenę, czyli wiąże się z poniesieniem kosztów, wysiłku, ryzyka itp.? A to nie wiem, daleko mi w tej materii do eksperta, ale wydaje mi się, że to w miarę po polsku.

      Ewentualnie teraz nie kumam już zupełnie, o co chodzi :p

    •  

      pokaż komentarz

      Równie dobrze może być kotwicą, która cię zatrzyma przy nieistotnych detalach.

      @BladyJoe: interesujące, czemu? Mnie się nie przytrafiło ani nigdy tak o tym nie pomyślałem, chętnie poznam inny punkt widzenia.

    •  

      pokaż komentarz

      @sasik520:
      Wrócę do pierwotnego zwrotu.

      - jaka jest cena rekurencji i kiedy jest zerowa?
      To brzmi jak jakieś realne pojęcia. Rozumiem, że to nie jest żadne pojęcie, tylko tak sobie zadałeś takie pytanie mając na myśli, pytanie o to jakie są problemy z użyciem rekurencji?

      Ewentualnie teraz nie kumam już zupełnie, o co chodzi :p
      No to teraz razem w tym siedzimy.

    •  

      pokaż komentarz

      @BladyJoe: chyba, że masz na myśli "premature optimization" ? Ale wtedy to, hm, mam wrażenie, że to inny problem.

    •  

      pokaż komentarz

      To brzmi jak jakieś realne pojęcia. Rozumiem, że to nie jest żadne pojęcie, tylko tak sobie zadałeś takie pytanie mając na myśli, pytanie o to jakie są problemy z użyciem rekurencji?

      @push3k-pro: ok, to ja już kumam, czego ty nie rozumiesz :) chodziło mi o to, że mając trochę wiedzy dziś uznawanej za niskopoziomową, w tym przypadku czym jest i jak działa stos i na czym polega wywołanie funkcji, można wyrobić sobie pewne intuicję, kiedy rekurencja może doprowadzić do kłopotów. Przy okazji rozumiejąc, że jest jakiś interpreter czy kompilator, które wykonują pewne optymalizację, można te intuicję ulepszyć o brak obaw w przypadku rekurencji ognowej.

      Domyslam sie, że to dla ciebie nic nowego, ale tym razem starałem się być precyzyjny. Wtedy wymienialem punkty, więc starałem się skracać.

    •  

      pokaż komentarz

      @sasik520:

      Za mało czasu by wątek rozwinąć. :)
      Jednakże dostrzegam łatwość jaką posiadają ignoranci w posługiwania się wysokopoziomowymi frameworkami / narzędziami.
      Do zdumienia mnie doprowadził gość (programista www), który na pytanie o serwer http zapytał co to jest.

    •  

      pokaż komentarz

      @sasik520: Dziękuję za objaśnienie. Ja uważam, że struktury danych, algorytmika, pewne szczegóły architektury, cechy kompilatora, IDE, SDK czy czegoś to nie jest wiedza ekskluzywna dla niskiego poziomu, choć też większość aspektów z tym związanych najprawdopodobniej nigdy się nie przyda w pracy, no chyba, że chcesz się pochwalić na rozmowie rekrutacyjnej, że wiesz co to jest tail-call.

  •  

    pokaż komentarz

    zgaduję w ciemno, że będzie POPCNT

    edit: tak się kończy zgadywanie w ciemno po tytule znaleziska, wykopki xD popcnt pod względem ciekawości nawet nie stało koło instrukcji z filmiku, leci SOG

  •  

    pokaż komentarz

    Programiści assemblera to zawsze były dla mnie freaki, o ile umiałem przestawić się na jakiś wysokopoziomowy język i coś tam w nich napisać a na pewno przeczytać, tak zawsze jak widziałem kod assemblera to było takie... yyyyyyy....

    Magicy.

  •  

    pokaż komentarz

    Przy okazji ciekawostka. Dwie z przedstawionych instrukcji - PDEP i PEXT są obsługiwane sprzętowo przez procesory Intela, ale AMD do niedawna "emulowało" je w mikrokodzie.
    W efekcie CPU Intela potrzebowały 1 cyklu do wykonania tych instrukcji, a dwie pierwsze generacje Zenów od 18 do prawie 300 (w zależności od przekazanej do rozkazu wartości).
    Dopiero od Zen3 AMD wprowadziło odpowiednią logikę na poziomie sprzętowym i obecnie nie ma istotnych różnic w wydajności tego rozkazu względem procków Intela.

  •  

    pokaż komentarz

    Rdseed mnie zaciekawiło hmmm