W świecie komputerowego tekstu
Zastanawialiście się kiedyś jak komputery "widzą" tekst? Albo dlaczego różne
urządzenia elektroniczne pod kontrolą różnych systemów operacyjnych widzą i
rozumieją ten sam tekst?
To zasługa w niemałej części American National Standards Institute, w skrócie
ANSI. Ta znana niegdyś jako American Standards Association organizacja utworzyła
komitet o fascynującej ;] nazwie X3, którego zadaniem było zestandaryzowanie
sposobu wymiany tekstu między różnymi urządzeniami. Standard ten znany jako
ASCII (American Standard Code for Information Interchange) wyparł stosowany
wcześniej kod Baudota-Murraya i do dziś stanowi podstawę wymiany informacji
między urządzeniami elektronicznymi. Zupełnie przypadkiem Intel jest członkiem
ANSI. ;)
Ale jak działa ASCII? - ktoś zapyta. Już wyjaśniam. Historycznie większość
komputerów (nie wszystkie!) operowała na bajtach o wielkości 8 bitów. Zaistniała
potrzeba stworzenia jednolitego sposobu reprezentowania tekstu w postaci bajtów.
Jako że w czasie powstawania standardu dalekopisy były wciąż kawałkiem szalenie
zaawansowanej techniki, ASCII musiało odpowiadać także na ich zapotrzebowania,
takie jak np. przewijanie papieru i powrót do początku wiersza (tzw. powrót karetki).
No i te nieszczęsne urządzenia, które miały tylko 7 bitów na bajt...
ASCII stworzyło zatem tablicę kodów dla wartości od 0 do 127 (7 bitów), które to
reprezentowały zarówno komendy sterujące (przewiń papier, uderz w dzwoneczek
przywołujący operatora urządzenia - nie żartuję! - i temu podobne) jak i znaki
niezbędne w tekście: litery, cyfry, znaki przestankowe i szereg mniej istotnych.
Wartości 128-255, z których mogły skorzystać 8-bitowe urządzenia, miały kilka
wariantów, dla większości pewnie znanych pod postacią stron kodowych w DOS.
Tabela kodów jest łatwo osiągalna z poziomu wyszukiwarki Google, ale dla wygody
umieściłem ją także poniżej.
Sposób, w jaki rozdystrybuowano kody ASCII niesie ze sobą kilka interesujących
właściwości. Po pierwsze, jak już wspomniałem, wszystkie "naturalne" kody (w tym
litery i cyfry) znajdują się w przedziale 0-127, a więc mają zero na najstarszym bicie
klasycznego, 8-bitowego bajtu. Co więcej wszystkie litery mają jedynkę na drugim
najstarszym bicie.
Widzicie już dokąd zmierza ten wpis? :)
Każda kratka grafiki to bit. Biały - zero, czarny - jeden. W każdym rzędzie mamy
zatem 16 bitów, czyli dwa bajty (dwa znaki informacji).
Konkursowe pytanie to grafika 16x6 punktów. Daje nam to w sumie 12 liter. Gdyby
spojrzeć na trzeci MSB (most significant bit) od lewej, da się także zauważyć, że
pierwszych 8 znaków to litery małe (jedynka na 3. bicie) a kolejne cztery to litery
duże (zero w tym samym miejscu). Jaki to zatem tekst? Część z Was na pewno już
wie: "pierwszySIMD". :)
Trzeba sobie zatem odpowiedzieć na pytanie: jaki był pierwszy powszechnie
oferowany przez Intel SIMD? I co w ogóle znaczy SIMD?
SIMD to skrót od single instruction, multiple data. Idea jest następująca: by
przyspieszyć działanie urządzenia, wykonujmy identyczne operacje na wielu danych
jednocześnie, a nie jedna po drugiej. Pierwotnie komputery wykonywały operacje
szeregowo: weź dwie wartości, zsumuj, zapisz wynik; weź dwie kolejne, zsumuj,...
Jest wiele zadań, które wymagają takich samych, powtarzalnych operacji na
pokaźnych objętościowo danych. Układy wspierające SIMD pozwalają na pobranie
nie dwóch, a większej liczby wartości (4, 8, 16,...), wykonanie na parach tej samej
operacji oraz zapisanie wyników. Wszystko to jednocześnie! Jeśli zatem nasza
aplikacja (np. program do kompresji video) operuje w jednolity sposób na bardzo
dużej ilości danych, wykorzystując SIMD możemy uzyskać poważne przyspieszenie
w ich przetwarzaniu.
Pierwsze oferowane w procesorach x86 rozszerzenie SIMD to oczywiście rok 1996 i
technologia MMX (ponoć pierwotnie nie był to żaden skrót, choć powszechnie mówi
się o rozwinięciu MultiMedia eXtension). Podkreślenie w podpowiedzi, że chodzi o
technologię Intela jest o tyle istotne, że rok wcześniej zadebiutowało rozszerzenie
VIS w procesorach SPARC a dwa lata wcześniej MAX w procesorach PA-RISC od
HP. Przeczy to wprost idei architektur RISC (do których należy także SPARC), ale
ciężko wymagać od inżynierów konsekwencji. ;>
Czasy świetności RISCów już mocno przeminęły a architekturę PA-RISC wyparło
Itanium znane także jako IA-64 od - nomen omen - Intela. Która to architektura,
jeśli wolno mi wyrazić opinię, jest potwornie uciążliwa w debugowaniu. ;) Dziś
procesory RISC pozostają architekturą wyspecjalizowaną, niszową (zrezygnowało z
nich nawet Apple), natomiast x86 z MMX i jego zmiennoprzecinkowymi następcami
z rodziny SSE święcą triumf. I to technologii MMX właśnie poświęcone było
pierwsze zadanie specjalne. :]
Gratulacje dla wszystkich, którzy sobie z zadaniem poradzili. Mam nadzieję, że
obeszło się bez siwych włosów. :) Bolesna chłosta czeka wszystkich tych, którzy
chcieli popsuć zabawę innym publicznie odpowiadając lub podpowiadając.
Wstydźcie się! :P
Padało wiele różnych odpowiedzi. Część z grających uznała, że wystarczy
wpatrywać się w grafikę wystarczająco długo i nadejdzie olśnienie. Stąd zapewne
takie odpowiedzi jak fxk, fyk, RYK, "i, zygzaki, schodki" czy "biały, czerwony,
czarny". :) Część ewidentnie nie lubi podpowiedzi, bo na pytanie dotyczące Intela
odpowiadała IBM lub AMD. ;] Wiele osób strzelało wpisując TLA związane z
Intelem: QPI, C2D, GMA, DUO,... Część celowała bardziej ogólnie: x86 czy też w
szalenie popularne CPU.
Wreszcie były i odpowiedzi zaskakujące. Część z nich to nazwy części ciała, których
opublikować nie mogę. ;> Kolejna grupa to wyrazy zdziwienia. Trafiło się "haha!!!",
"ale jaja!", popularne "LOL" i kilka wezwań o łaskę z nieba. Niektórzy z grających
podzielili się opinią na temat pytania, kilkoro postanowiło zadać nam pytanie.
Odpowiadam na jedno z nich: nie, to nie jest alfabet Braille'a. :) Trafił się też link do
akcji Pajacyk i, moje ulubione: "jakie ładne... co to?". :D