Thread View: alt.pl.matematyka
15 messages
15 total messages
Started by Wlodzimierz Holsztynski
Sun, 09 Aug 2009 10:17
Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wlodzimierz Holsztynski
Date: Sun, 09 Aug 2009 10:17
Date: Sun, 09 Aug 2009 10:17
338 lines
16368 bytes
16368 bytes
Firma Martin Marietta (MM) była niemal gigantem. W samym Orlando (Floryda) w latach, kiedy tam pracowałem, 1981-1984, zatrudniała blisko dziesięć tysięcy ludzi, a może w pewnych momentach nawet ponad 10K. Potem upadł Sojuz i komuna, więc zatrudnienie spadło. Poza Orlando, firma miała główny oddział w Denver (Kolorado), a wierchuszka firmy miała swój dział w stolicy, w DC, lub obok w Aleksandrii. Mimo to, do mojego przybycia, MM w Image Processing nie liczyła się. Tak bardzo się nie liczyła, że do podań o rządowe granty musiała dopisywać za partnerów mniejsze firmy, jak w przypadku Image Processing właśnie ERIM, żeby wykazać sie ekspertyzą w Image Processing. W szczególności, do obróbki obrazów używała MM ERIMowskiego cytocomputera, którego głównym wynalazcą był St^2. UWAGA Cytocomputer miał chyba kłopoty w urzędzie patentowym z oryginalnościa, i patent otrzymali późno, może po moim (z Wilsonem) TIPPie. Sam pamiętam wcześniejsze "designs", po których cytocomputer nie wydawał się niczym nowym, poza detalami. Zresztą z powodu wcześniejszyhc designs zrezygnował z walki o patent sam S.W., który ponoć miał podobną ideę wcześniej niż St^2 (o ile ST^2 w ogóle sam ją miał, a nie od S.W.). W kilka tygodni (dwa? cztery?) po przybyciu do Orlando, i zaaklimatyzowaniu się, miałem już GAPPa. Czyli w zasadzie już dojrzały "design" komórki i globalny. Ponadto konserwatywnie oszacowałem liczbę potrzebnych tranzystorów poprzez zaprojektowanie hardware nie tylko na poziomie logicznym,, ale i tranzystrowym. Na poziomie logicznym serio, a tranzystorowy tylko dla oceny wielkości design, bo to jest zajęcie dla fachowców, którzy poza tranzystorowym VLSI design niczego innego nie robią. Ponadto na ten nieistniejący hardware pisałem programy z Image Processing. Dzięki temu pokazałem, że nawet przy najbardziej konserwatywnych oszacowaniach mój GAPP pobije inne procesory, w tym cytocomputer, na łeb i szyję. Szef, AA, całego działu w MM od Image Processing, chętnie mi płacił (dawał godziny) na te zajęcia, ale na tym się sprawa kończyła. Jak mi w końcu wytłumaczył, MM w podaniach o granty zachwalała, że ma ERIMowski cytocomputer, i nie mogła sponsorom naraz powiedzieć: Hej! Mniejsza o cyto! Mamy coś lepszego!! - wyglądałoby to niepoważnie. Bo gdy inwestuje się w coś, to chce się z tego dostać zysk, a nie na nowo inwestować w coś lepszego (a potem co? znowu w coś jeszcze lepszego? - tak się biznesu nie robi). Pierwszy przełom biznesowy nastąpił, gdy inżynier WS zaproponował, żeby GAPP użyć marginesowo, do obrabiania na boku malutkich obrazów, gdy wielkie dalej byłyby procesowane przez cytocomputer. GAPP faktycznie mógł procesować i małe obrazy, ale co tam małe - nawet gdy się je obrobi w zero czasu, to zasługa wciąż niewielka. A jaśniał GAPP na całego przy wielkich obrazach. Ale co tam, jak tylko GAPP wstawił nogę w drzwi, to w szybkim tempie cytocomputer znalazł się w muzeum firmy. W szybkim tempie, bo napisałem system oprogramowania dla GAPP, w STOIC (!), oraz szereg inżynierów nauczyłem i elementów myślenia w kategorii Image Processing, jak i programowania GAPPu. Mój system był niezwykle łatwy i mało podatny na robaki (bugs). Jednocześnie ze mną przyjęto do pracy Eugene Cloud. Miałem najwyższą rangę poniżej "executive", a on o jedną niżej, ale był nie tylko 'inżynierem, ale także managerem. Początkowo moim managerem był inny miły człowiek, który dał mi pierwsze wprowadzenie do tranzystorów, w jednym zdaniu! Wynalazek i symulacje, dowodzące efektywności GAPPa zrobiłem, gdy on jeszcze pracował w Orlando. Po czym odszedł, a jego projekty przejął Gene Cloud, po czym napisałem (z własnej inicjatywy, wręcz wbrew planom) wspomniany system oprogramowania dla GAPP - assembler & simulator. Ten system pozwalał pisać programuy GAPP w mnemonikach, oraz dawał programiście moc języka STOIC. Następnie program źródłowy system tłumaczył na 0-1 kod GAPPu lub/oraz program wykonywał. Dałem przy tym inżynierom wiele wygodnych konstrukcji, pozwalających na wgląd w to co się działo, wszelakie pośrednie prezentacje, itd. Odszedł mniej więcej w tym okresie szef MM od Image Processin, a przyszedł na jego miejsce WP. Wtedy GAPP wciąż nie stał się jeszcze wielkim zwycięzcą, stawiał pierwsze biznesowe kroki, i wciąx wokół GAPPa bylo miło, entuzjastycznie. Ludzie, których wprowadzałem w GAPPa, w tym Gene, mieli z tego radość. WP twierdził, że dzięki jego znajomościom w firmie GAPPowi nie ukręcono łba. Może. Gdy na zebraniu WP powiedział, że "tego GAPP oczywiście nie może rozwiązać" to wykształceni przeze mnie inżynierowie chórem mu odpowiedzieli, że "może!!!". Trudność programowania geometrycznych SIMD procesorów, w tym i szczególnie GAPPa polega na ich prostocie, która zmusza do myślenia o obrazach na poziomie bitów, do czego mało kto jest przyzwuyczajony, i co może być trudne, może wymagać twórczego podejścia i głębokiego zrozumienia natury algorytmów. Wraz z nadejściem sukcesu GAPPa szybko skonczyła się sielanka, i zaczęlą się antypatyczna walka o zyski. Bardzo wcześnie byłem odgrodzony od decyzji dotycząych GAPPa, co kosztowało MM ogromne straty w $$ i czasie. Dowiadywałem się o różnych problemach przypadkowo, bo akurat przechodziłem obok, bo ktoś mnie zapytał o coś na korytarzu, ... Nawet miłemu Gene zdarzały się "managerskie" odruchy, więc go opieprzałem, po czym dalej byliśmy przyjacielami. Jednak zasada skrywania informacji w ramach walki o wpływy była okropna. Wciąx pamiętam wiele przypadków. Pal licho straty dla firmy, ale nieuczciwość takiego standardowego postępowania jest obrzydliwa, a na dodatek traciło w przypadku najpierw TIPP, a potem GAPP całe społeczeństwo. Już w ERIMie prosiłem-błagałem, żeby skontaktowali się na przykład z Disney, że mogę robić filmy z pomocą image processing, i ppokazywałem im na ekranie potencjał. Potem także w MM. Ale ich obchodziły tylko kontrakty rządowe. Bo wtedy oni byli ważni, jako że na znajomym gruncie. Chciałem, żeby GAPP stosowano w medycynie... W wyniku walki ciut mi schrzaniono pierwotny design, narzucając mi zbędny dodatek, bo pewien inżynier chciał być ważny. Usunięto to dopiero po latach. To jeszcze realtywny drobiazg. Ale za moimi plecami zronili z NCR pierwszy design. Okropnie! Raz mi to Gene pokazał, i myślałem że to jakiś zły żart. Początkowo NCR, jak to czynią w biznesie, obiecało kostkę z 7 x 14 komórkami na kości. Idiotycznie wykonali, tracąc czas, itd, najpierw 3 x 6, a potem zaczęli się wycofywać, bo widzieli, że potrafią uzyskać tylko niewiele więcej. GAPPowi groziło skasowanie. Szczęsliwie dotarło to do mnie pod koniec pewnego dnia. Natychmiastw nocy napisałem dwa memos (noty, memoranda). Jedno uratowało design. W NCR umarł VLSI designer, a nowy skorzystał z mojego memo i zamiast NCR technologii arrayowej po prostu wykonał indywidualny (custom) VLSI design. Podobnie było z kryzysem na poziomie board design. Chcieli zmienić kość z tego powodu(!), co popsułoby kość, i stanowiłoby czasochłonną, wielką i kosztowną operację. Popsułoby kość, bo ze względu na architekturę komórki (z powodu wspomnianego wcześniej dodatku), komórki w kości ustawiłem nie w kwadrat, lecz w prostokąt o proporcji 2:1. To minimalizowało liczbę" pins". "Pins" są miejscem krytycznym, gdzie wszystko zwalnia, przegrzewa się, komplikuje. Im ich mniej tym dla zdrowia kostki lepiej. A tu z powodu deski (board) chcieli zmieniać kość, bo chcieli mieć z grubsza kwadrat. Pojęcia nie mieli o priorytetach. Szczęśliwie pewien kolega, RH, powiedział mi o tym na korytarzu. Zatkała mnie ta ich ignorancja. Po czym w kilka minut wymysliłem wężowy design deski (board). Idealnie i za frajer. Ten pomysł, na moich oczach, na zebraniu po jakimś czasie przywłaszczył sobie ten sam dobry, ale fałszywie ambitny i bezwzględny w robieniu kariery inżynier. Wciąć byłem nie przygotowany na taką bezczelność. On, przy tablicy, nie mówił, że to zrobił, a jedynie się uśmiechał, gdy inni mu gratulowali tak zaskakującego i prostego pomysłu. A ja jakoś wtedy nie wydobyłem z siebie głosu. Może bezgłośnie powinienem był mu splunąć w twarz. Musiałbym szeregu ludziom pluć w twarz przy różnych okazjach. Szef WP bardzo szybko odgradzał mnie od wizytujących gości, którzy chcieli się zapoznać między innymi z GAPPem i całą wokół niego operacją. Kontaktowalimsię tylko z pewną inżynier, moją najlepszą uczennicą. Gdy mieli trudniejsze pytania, to przychodziła z nimi do mnie na kilka minut, żebym pomógł, wyjaśnił. Gdy przyszło do pisania manualu GAPP, to WP postąpił wrednie, bo polecił to szeregu ludziom, i pewnego inżyniera, od Image processing, ale nie mającego z GAPPem nic wspólnego, uczynił liderem. Pracowała cała grupa. (Jeden z nich stale do mnie przychodził. Nie umiałem mu odmawiać :-). Zależalo mi na dobrym opracowaniu, to było piekielnie ważne. To byłaby trudna, wyczerpująca praca, wymnagająca talentu i poświęcenia. Bosa to nie obchodziło. Skonfrontowałem go. Także inżyniera-lidera. Powiedziałem mu, że robi coś nieetycznego, nielojalnego, że powinien odmówić zajęcia się tym projektem. Tylko się niewyraźnie usmiechał. W firmach pracujących dla rządu etyka na ogół po prostu nie istnieje. NCR opublikowało o GAPP, z błogosławieństwem MM, całą serię artykułów w "Electronic Design", w tym pierwszy był tytułowy, to znaczy zapowiedziany graficznie na frontowej okładce. Kłamali (NCR) o swojej roli jak psy, i pomniejszyli ekstremalnie moją - oczywiście nie wspomnieli, że to ja ich GAPPa uczyłem, że to mój patent, itd. Przykre było, że moi zaprzyjaźnieni koledzy, WS z MM oraz VLSI designer z NCR byli wśród autorów artykułów, i wcale się nie krępowali tym, że mnie skrzywdzono. Ani nikomu nie przeszkadzało, że stracona została okazja do przekazania publice ostrej wiedzy, zamiast mętnego szambo mambo. Napisałem w pewnym momencie jeden artykuł z Gene Cloud, i nawet uparłem się i wciąż pilnowałem, żeby matematycznym zwyczajem kolejność autorów była alfabetyczna, bo wciąż mnie pakowano na pierwsze miejsce (tylko appendix był wyłącznie mojego autorstwa, bo był uproszczoną i bardzo skróconą wersją mojej teorii kowariantnych transformacji obrazów, z ogólnym zastosowaniem do projektowania hardware'owego procesorów obrazów). Wkrótce odszedłem z MM, a Gene za naszą publikację otrzymał prestiżowe wyróżnienie jako "autor roku" Martin Marietty. Potem już beze mnie publikował nowe wersje tego artykułu (nawet mnie o tym zbytnio nie informował, i nigdy nie dał odbitek - takie pomysły dobremu człowiekowi, ale wychowanemu w biznesie firm pracujących dla rządu, nie przychodzą). A teraz ta menda Kolany próbuje na apmatcie coś z tego mieć, coś mi naświnić. Jeszcze kilka drobiazgów (:-) - mowy nie ma o pełnej historii, za dużo gadania: - GAPP jest jedynym z geometrycznych SIMD, który wciąż działa komercjalnie (w nowej wersji oczywiście); wszystkie inne padły ofiarą konkurencji ze strony postępu komputerów osobistych. Miał i ma szereg rekordów światowych (ale nie chce mi się pisać do Guiness Record Book). - MM na konto GAPP wygrało kilkadziesiąt bilionów $$ w kontraktach. Pod koniec mojego pobytu mieli mi załatwić wyższy stopień zaufania, bo budowali laboratoria dla GAPP, o których nawet nie miałem prawa wiedzieć, że je budują. Bo w czasie pewnego zebrania byłem w holu z dwójką innych inżynierów, tak to zebranie było sekretne, a oni wychodzili z zebrania, by mnie pytać o to i owo. Cała ta sekretność na ogół jest lipą, jest częścią walki o wpływy, metodą na unikanie odpowiedzialności, kompetycji, ... ot, jedna więcej kosztowna dla społeczeństwa gierka. (Wspomnianą sytuację, i w ogóle życie w takich firmach, niektóre aspekty, opisałem w pewnym dłuższym wierszu po angielsku). - MM reklamował swój "Image Processing" w oparciu o GAPP nawet w Newsweek, na całą stronę. W sposób nieco zaowalowany, a wydało się, bo występowała w reklamie liczba 72, czyli 72 = 6x12 z kości GAPP II. Mówiono o GAPP w ogólnoamerykańskiej (USA) tv oraz w Europie w tv, w czasie pierwszej wojny nad zatoką, że niby GAPP pozwalał liczyć i strącać wraże rakiety. Naraz w tv zobaczyłem swojego byłego bosa (już w MM nie pracowałem), który był tuż pod VP i tuż nad moim bosem WP od Image Processing. Prawdopodobnie to gadanie o GAPP w danym kontekście bylo jednak lipą, blefem. Nie wiem. -- Natomiast naprawdę oprogramowanie/algorytmy rozwinięte na systemie GAPPa ratowało życie minerów, rozminowujących miny w (byłej) Jugosławii. Co prawda GAPP zastąpiono w końcu zwykłymi procesorami, ale zrozumienie i stworzenie algorytmów dała technologia GAPPowska. *** Zmachałem się, pora kończyć rozdział Orlando. Podsumowując, nie tylko, że mam główny patent GAPP (w sensie bycia wynalazcą, a nie w sensie posiadania materialnego), oraz jestem współwynalazcą na wcześniejszych i późniejszych patentach, ale także stworzyłem cały system i wykształciłem wielu inżynierów, a niektórzy kształcili dalszych. Kłamstwem jest, że ktokolwiek w MM poza mną cokolwiek z GAPP rozumiał lub przewidywał (miał wizję :-), nie mówiąc o planowaniu, zanim ich do tematu nie wprowadziłem, a i potem też przecież nie byłi znowu żadnymi orłami w Image Processing (chociaż byli dobrymi, inrteligentnymi inżynierami, nie gorszymi i nie lepszymi niż gdzie indziej). Na przykład grupa ze wspomnianym liderem dokumentacji (ale oddzielna grupa, inna) zdecydowała, żeby z GAPP zrezygnować dla rozwinięcia pewnego prostego algorytmu, że to niemożliwe. Dotarło do mnie. Wyraziłem zdziwienie. Powiedzieli, że to wymagałoby kilkaset tysięcy operacji. Napisałem algorytm potrzebujący ich tylko kilkadziesiąt. Do "dekoracji" prezentacji (napisy, objaśnienia) chcieli kupić i stosować oddzielny, specjalny harware. Nauczyłem Gene Clouda jak to robić na GAPPie. Dobrze się tym bawił, i zazdrośnie pilniował, żebym mu tej przyjemności czasem nie odebrał :-) Oszczędność była wieloraka. Itd, itd. Czasem były to proste rzeczy, czasem mniej proste. W literaturze naraz mnie kiedyś uznano, ale wciąż w sposób drastycznie okrojony, dolepiając mi łatkę matematyka w wyświechtamnym, negatywnym nieco sensie. Wlod PS. Mam nadzieję, że teraz widzicie, że kretyn Kolany zachował się w wątku obok jak bydlę. Nie wie dureń, ale nadużywa zwroty jak parszywy propagandzista.
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wojciech Muła
Date: Sun, 09 Aug 2009 11:41
Date: Sun, 09 Aug 2009 11:41
24 lines
1885 bytes
1885 bytes
On Sun, 9 Aug 2009 03:17:37 -0700 (PDT) Wlodzimierz Holsztynski <sennajawa@gmail.com> wrote: > W kilka tygodni (dwa? cztery?) po przybyciu > do Orlando, i zaaklimatyzowaniu się, miałem > już GAPPa. Czyli w zasadzie już dojrzały > "design" komórki i globalny. Ponadto konserwatywnie > oszacowałem liczbę potrzebnych tranzystorów > poprzez zaprojektowanie hardware nie tylko na > poziomie logicznym,, ale i tranzystrowym. Na poziomie > logicznym serio, a tranzystorowy tylko dla oceny > wielkości design, bo to jest zajęcie dla fachowców, > którzy poza tranzystorowym VLSI design niczego > innego nie robią. Jakie to były liczby - tzn. ile bramek, ile tranzystorów? W jakiej technologii były wykonane pierwsze GAPP? Jaki był czas otrzymania wyniku? Istnieją kompilatory języków wyższego poziomu dla GAPP? w. -- Kupię: http://wm.ite.pl/kupie.html
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: usenet
Date: Sun, 09 Aug 2009 18:55
Date: Sun, 09 Aug 2009 18:55
10 lines
1202 bytes
1202 bytes
"Wlodzimierz Holsztynski" <sennajawa@gmail.com> wrote in message news:0b4a1a5a-28bc-4a93-9391-df8b5f309e7e@o9g2000prg.googlegroups.com... [...] odleciales gosciu -- usenet
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: usenet
Date: Sun, 09 Aug 2009 20:15
Date: Sun, 09 Aug 2009 20:15
11 lines
1299 bytes
1299 bytes
"Wlodzimierz Holsztynski" <sennajawa@gmail.com> wrote in message news:0b4a1a5a-28bc-4a93-9391-df8b5f309e7e@o9g2000prg.googlegroups.com... [...] jeszcze jedno, strasznie zmyslasz miszczu ale olewam to, najlepsze jest to ze ty nie potrafisz po angielsku wow -- usenet
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wlodzimierz Holsztynski (Wlod)
Date: Sun, 09 Aug 2009 21:26
Date: Sun, 09 Aug 2009 21:26
262 lines
13337 bytes
13337 bytes
On Aug 9, 4:41 am, Wojciech Muła
<wojciech_m...@poczta.null.onet.pl.invalid> wrote:
> Jakie to były liczby - tzn. ile bramek, ile tranzystorów?
Moje wstępne oszacowania liczby tranzistorów były
prowizoryczne. Celem był dowód konceptu.
Design prototypowego GAPP I był zrobiony przez NCR
(w ich arrayowej technologi PLA) i ludzi z MM, za moimi plecami,
choć to była implementacja mojej architektury, wcześniej
wykonanej w MM z części z pólki (of shelf parts). Ten GAPP I
byl straszny, idiotyczny. Potem musiałem się wstydzić za nich,
bo przy patencie prawo wymaga poinformowania o najlepszym
istniejącym wykonaniu. To było jedyne VLSI (PLA), więc
"najlepsze". NCR początkowo obiecało array 7x14. Potem,
po GAPP I wycofali się z obietnicy, wątpiąc, czy uda im
się uzyskać 6x6. Rozpatrywano możliwość skasowania projektu.
Szczęśkiwie o tym dowiedziałem się "na korytarzu" pod koniec
pewnego dnia, więc w nocy napisałem dwa memoranda.
W jednym pokazałem jak w ramach PLA zaprojektować kość
GAPPa wydajnie. W drugim podałem główne idee GAPP III.
W tym czasie umarł w NCR VLSI desgner, a z nowym
wspólpracowałem, zaprzyjaźniliśmy się. On z mojego
memorandum skorzystał przy swoim custom VLSI design
(zrezygnował z PLA). Wziął moje moduły i je upchał.
Architektura GAPP II jest podana w "Parallel Supercomputing..."
R. Michaela Horda, rozdział 6. Nigdy nie miałem z nim
żadnego kontaktu (lub nic o tym nie wiem, ale chyba po prostu
nie i kropka). Jestem mu wdzięczny, że starał się napisać
jak naprawdę było. Do końca nie był w stanie, bo musiał
opierać się na tym co jakoś usłyszał, przeczytał. Stąd wciąż
w jego monografii są mylące wytarte zwroty. Pisze na przykład:
"Martin Marietta intentionally designed the GAPP cell
as simple as possible. The simplicity was the driving
principle resulting from Dr. Holsztynski's work. ..."
Drugie zdanie powyżej jest prawdziwe. Pierwsze zupełnie nie.
Martin Marietta niczego nie design, a tylko WH. Gdy MM
przykładała do czegoś rękę poza moimi plecami, to kopała
niemiłosiernie, a ja to potem ratowałem. Wpadło mi do głowy,
że może nie zawsze to był przypadek, że dowiadywałem się
o tych rzeczach i mogłem naprawić. Po zastanowieniu się
jednak sądzę, że to był jakby brak zwykły dyscypliny wśród
managerów i kolegów. Bo jednak straty były drastyczne, i
materialne i czasowe. A oni jednak byli moimi kolegami.
Dodam uwagi, zakładając, że możesz Wojtku zajrzeć
do Horda.
Liczba tranzystorów w kości GAPP II chyba jest nieznana.
NCR dokładnie opisało typ kości, jej wymiar, specyfikacje.
Na kości było 6x12 = 72 komórki. Połowa real estate idzie
na połączenia. Moja architektura miała tylko 13 control
lines, czyli bardzo mało (elegancko, ekonomicznie).
Dochodziło 7 linii adresowych, bo każda komórka
miała 128 bitów własnej pamięci RAM. Poza tym miała
cztery 1-bitowe registry CM NS EW C. Stąd już 13+7 pinów.
Ponadto geometryczne shifts wymagały 2*(12 + 6 + 6) = 48
pinów. To w zasadzie niemal wszystkie pins (dochodzą
"inżynieryjne": zasilanie i clock-zegar). Czyli pinów było
nieco ponad 20+48 = 68. Razem może 70-72, nie pamiętram.
Niska liczba linii kontrolnych jest ekstremalnie ważna,
bo większość miejsca na kości zajmują połączenia.
Logiki było relatywnie mało. Każdy register miał swój
input multypleksor (multiplexor):
CM -- 4x2
NS -- 7x3
EW -- 7x3
C -- 7x3
oraz pamięć też miała swój multypleksor:
RAM - 3x2
Może dziwić, że lewe wymiary nie są potęgą dwójki.
Zaokrąglenie 7 do 8 nie spowodowałoby zwiększenia
liczby linii kontrolnych. Jednak poza tym rozmiar
samego multypleksora wzrósłby z grubsza 2-krotnie.
Ponadto inputy 0 były przy każdym registrze, bo
były - jak przyuważyłem - za darmo. Gdyby nie to, to
dałbym tylko dla C.
Output procesora komórki był 1-bitową *pełną*
sumą/różnicą registrów NS EW C, oraz szedł
do RAM -suma/różnica (tutaj suma i różnica była
tym samym), i do C (carry/borrow), znowu wydajnie.
Figure 26 u Horda ciut myli (dla większości czytelników
to nie ma wielkiego znaczenia), bo sugeruje 3 outputy,
a to są naprawdę tylko dwa różne. (Zresztą Hord nie
mówi explicite, że opisuje akurat GAPP II). A tak było
mu prościej. Sztuka polega na tym że 3 inputowe
linie kontrolne registra C mogą modyfikować output C,
ewentualnie go logicznie zaprzeczając w przypadku
kombinacji borrow, nim ten output dotrze do pełnego
sumatora/odejmowacza.
> W jakiej technologii były wykonane pierwsze GAPP?
Prototyp GAPP I używał NCR PLA, ale mniejsza.
GAPP II był custom made VLSI design. Chyba stosowano
w końcu więcej niż jedną technologię (rodzaj) kości,
oraz różnie je pakowano.
Opisy inżynieryjne kości GAPP II są dostępne
publicznie, bo NCR je sprzedawała komercjalnie -
ale MM miała monopol na "military grade". Te
"militarne" miały szybkość 9.8MHz. Hord i inni
zaokrąglali do 10MHz. NCR nawet nie mogło testować
takiej szybkości (dziś jest śmieszna :-), więc
wszystkie kości wysyłało do MM, która dla siebie
wybierała te, które przeszły testy, a reszta wracała
do NCR jako comercial. Lepsze opakowania, dla
mil-spec też były robione w MM. Początkowo
wkradły się jakieś elektryczne "bugs" i wydajność
NCR ("yield") była rozpaczliwie niska. Komercjalne
kości miały chyba około 5Mhz.
***
Pisałem o multypleksorach zamiast o bramkach
logicznych, gdyż multypleksory mają dobrą szansę
na bezpośredni design tranzystorowy, bez pośredniego
etapu bramek logicznych. Co więcej, gdybym dłużej
pracował w przemyśle elektronicznym, to spełniłbym
swoją ideę bogatych komórek, co dotąd chyba jest
ledwo w powijakach. Nawer mialem konkretne przykłady.
Zamiast logikę dawać na zewnątrz komórek, to warto dać
dla specjalnych zastosowań, jak sortowanie, do wewnątrz.
Wtedy hardware byłby znacznie szybszy.
Pełny adder jest klasyczną konstrukcją, więc znowu
się tu nad tym nie rozwodzę. Pełny adder/subtractor
był jednym z moich pomysłów. Czy sam w sobie byl
zauważony wcześniej (bez kontekstu Parallel
Processing)? Nie wiem. Podejrzewam, że tak, ale
nie wiem.
***
Każdy kulturalny człowiek powinien znać
teorio-mnogościową kostrukcję zbioru
potęgowego Y^X (zbiór wykresów
wszystkich funkcji z X do Y), wraz
z towarzyszącą naturalną transformacją,
oraz powinien rozumieć, że w elektronice
to jest to samo co pełny multypleksor czyli
selektor (ciekawe jaki procent elektroników
rozumie, że multypleksor i selektor to w zasadzie
to samo: 99%? 5%?). Może gdzieś o tym
dla publiki ogólnej napiszę, może.
***
> Jaki był czas otrzymania wyniku?
Nie jestem pewny jak interpretować to pytanie
(znałem tylko angielską terminologię - a i to słabo :-).
Czy chodzi Ci o clock rate w MHz, czy też ile czasu
spędzono nad projektem, nim otrzymano kości?
> Istnieją kompilatory języków wyższego poziomu dla GAPP?
Najpierw mój system rozpowszechniony był
w oddziałach w Orlando, Denver i Waszyngton DC
(może to była Aleksandria, wszystko jedno).
Bīł tak napisany w STOIC (jakby Forth), że każdy
użytkownik z łatwością mógł tworzyć narzędzia, bo
dalem mu do ręki cały STOIC + mój system, t.zn.
mój GAPP assembler and simulator był przedłużeniem
STOICu, wzbogaceniem STOIC o GAPP.
Potem pracowałem dla małego start-up w Boca Raton,
i napisałem im jeszcze lepszy system w Forth.
Ale ta mała firma się rozwaliła, była zbyt zwariowana,
jak to małe firmy na Florydzie, więc ten system się
zmarnował. Doświadczenie wykorzystałem potem
w Lockheed, gdzie napisałem jeden, a dwa inne
napisano pod moim kierunkiem, w tym jeden
super szybki (idee miałem już w MM, ale je
ulepszyłem). Szybkie korzystają z równoległości
bitowej działn na słowach w PC, więc są mniej
elastyczne, gdy chodzi o wymiar symulowanego array
- musi być wielokrotmością długości słowa procesora
PCetu. Dlatego dla eksperymentów algorytmicznych
warto mieć także wolniejszą wersję, ale która
dopuszcza dowlne wymiary EW x NS. Taka dowolność
jest także ważna dla teoretycznej matematyki i fizyki.
Przy małym wymiarze EWxNS szybkość nie ma tak
wielkiego znaczenia. Wszystkie systemy w Lockheed
projektowałem w języku C. Ale udało mi się zachować
dawną elastyczność systemu. Jeden z inżynierów-
programistów (z Wietnamu) był swietny, dorobił
fachowe konstrukcje w C, typu biblioteki... i w ogóle
doskonale nam się współpracowała (zawsze mi sie dobrze
pracowało z programistami - bo sam maczałem
palce w programowaniu, co wielce ułatwia współpracę;
moje opisy zadań dla programistów były software'owo
zaawansowane, odwalały kawał roboty).
Potem pisano systemy (nie od razu!!) w NCR.
Już mnie nie było w MM, ale oni i tak nie chcieli,
bym w czymkolwiek brał udział. Główny manager
napalał się na chama na sławę i władzę, stąd taka
bezsensowna polityka. Zatrudnili całą firmę software'ową.
Jak to bywa, nikt nie wiedział w umowie o czym
mówił, więc się pokłócili i rozeszli. W końcu NCR
miało dwa systemy. Jeden kiepski w C, drugi
w Forth, lepszy, bo programista Forth był ostrzejszy.
Ale konkurs na najkrotszy program Life wygrał
u nich w NCR mój przyjaciel, VLSI designer.
Parę lat wcześniej, bez konkursu, miałem jednak
w MM. Stworzyła swoje nowe systemy także MM,
łącząc je ze stacjami, ael wiem o tym tyle co nic.
Powstały nowe firmy, specjalizujące się wyłącznie w GAPP,
z blogosławieństwem MM. Jedna mnie kiedyś zaprosiła
na swoją konferencję (zwali się wtedy chyba Paralogic -
niby równoległa logika, ale brzmiało to jak jakiś
paraliż :-). Proponowałem zaadoptowanie APL,
ale nikt poważnie nie słuchał. Dziś istnieje nowa wersja APL,
język J chyba, ktora nie wymafa specjalnej klawiatury
(APL bez specjalnej klawiatury tracił swój urok).
Obawiam się, że nie istnieją kompilatory do Image
Processing, które by działały i uniwersalnie i na wysokim
poziomie abstrakcji. (Czy Wolfram uzyskał już coś
takiego?) Można taki system napisać nie oglądając się na
żadne istniejące Im. Proc. hardware, po czym łatwo coś
takiego podłączyć (dodatkowym modułem oprogramowania)
do dowolnego sensownego hardware. Zaczęloby się od
fikcyjnej, bardzo mocnej i bardzo regularnej/super eleganckiej
architektury, co już daloby wysoki poziom. Więc inne architektury
w Image Processing, już prawdziwe, byłyby eleganckim
redukcjami tej hyper mocnej - prawdziwe zależałyby od zastosowań
i środowiska hardware'owego. Łatwo byłoby software'owo
połączyć to w jedną harmonijną rodzinę hardwere'owo-
softwarowo. Ba!
Po odejściu z MM stworzyłem architekturę HOPE, ale
nic z tej nadziei nie wyszło, nie namówiłem na to żadnych
inwestorów. Biznesmani i około- biznesowcy (różni executives
i hochsztaplerzy :-) ciągną jedni do drugich całkiem irracjonalnie,
może jakiś zapach wydzielają, nie wiem co za licho. Nawet
zabawnie patrzeć jak się nabierają, tracą grube $$, ale i tak
dobrze się czują wśród swoich. Żal tylko, że marnuje się potencjał
robienia efektywnie pożytecznych rzeczy. Nabrał się na przykład
na Steve Jobsa ten miliarder z Teksasu, gdy dał Jobsowi
miliony na NeXT. NeXt splajtowal, a Jobs wskoczył
z powrotem do Appla. Nieporozumienie polegało na tym,
że ten teksańczyk (Perrot?) sam był przecież jak Jobs,
więc potrzebował kogoś jak Woźniak, a nie jak Jobs=Perrot.
Jobs kiedyś miał Woźniaka, więc uzyskał sukces.
Ale Perrot+Jobs = Jobs+Jobs to disaster, to klęska.
Pozdrawiam,
Włodek
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Mateusz Grotek
Date: Sat, 12 Sep 2009 01:35
Date: Sat, 12 Sep 2009 01:35
25 lines
2339 bytes
2339 bytes
> Output procesora komórki był 1-bitową *pełną* > sumą/różnicą registrów NS EW C, oraz szedł > do RAM -suma/różnica (tutaj suma i różnica była > tym samym), i do C (carry/borrow), znowu wydajnie. > Figure 26 u Horda ciut myli (dla większości czytelników > to nie ma wielkiego znaczenia), bo sugeruje 3 outputy, > a to są naprawdę tylko dwa różne. (Zresztą Hord nie > mówi explicite, że opisuje akurat GAPP II). A tak było > mu prościej. Sztuka polega na tym że 3 inputowe > linie kontrolne registra C mogą modyfikować output C, > ewentualnie go logicznie zaprzeczając w przypadku > kombinacji borrow, nim ten output dotrze do pełnego > sumatora/odejmowacza. > Mam dwa pytania. 1. Czy FAS robił NS-EW czy EW-NS ? 2. Nie zrozumiałem tego fragmentu z wypowiedzi powyżej o liniach wyjściowych. O jakich liniach tutaj mowa. Niestety nie mam książki Horda, więc mógłbyś może wyjaśnić coś więcej. Z tego co wiem to wejścia/wyjścia całego układu to między innymi W, N, S, E. Wejścia to CMS i 7 bitów adresu. Wyjście to CMN. Natomiast jeśli chodzi o FAS to wejścia idą od rejestrów NS EW i C, a wyjścia to SM, CY, BW. Więc o jakie 3 vs. 2 "outputy" chodzi?
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wlodzimierz Holsztynski (Wlod)
Date: Sat, 12 Sep 2009 06:39
Date: Sat, 12 Sep 2009 06:39
75 lines
4121 bytes
4121 bytes
On Sep 11, 6:35 pm, Mateusz Grotek <unodue...@poczta.onet.pl> wrote:
> > Output procesora komórki był 1-bitową *pełną*
> > sumą/różnicą registrów NS EW C, oraz szedł
> > do RAM -suma/różnica (tutaj suma i różnica była
> > tym samym), i do C (carry/borrow), znowu wydajnie.
> > Figure 26 u Horda ciut myli (dla większości czytelników
> > to nie ma wielkiego znaczenia), bo sugeruje 3 outputy,
> > a to są naprawdę tylko dwa różne. (Zresztą Hord nie
> > mówi explicite, że opisuje akurat GAPP II). A tak było
> > mu prościej.
Być może Hord miał ograniczony czas, więc zamiast
do końca sprawę przemyśleć, to ją sobie uprościł
(w GAPP było nieco lepiej).
> > Sztuka polega na tym że 3 inputowe
> > linie kontrolne registra C mogą modyfikować output C,
> > ewentualnie go logicznie zaprzeczając w przypadku
> > kombinacji borrow, nim ten output dotrze do pełnego
> > sumatora/odejmowacza.
Mgliście to napisałem. Poniżej cierpliwie
pokaże o co chodzi. Będzie to ilustracją,
choćby drobną, o tym jak dobrze być
matematykiem w zastosowaniach.
> Mam dwa pytania.
>
> 1. Czy FAS robił NS-EW czy EW-NS ?
Chyba NS - EW (minęło ćwierć wieku, więc
na 100% nie mogę być pewny; gdyby mi nie
narzucono raczej zbędnego CM, to design
byłby w pełni elegancki i symetryczny, i wtedy
zupełnie n ie miałoby znaczenia czy to było
NS-EW czy też EW-NS, byłby automorfizm).
Napiszę poniżej jak wygląda 1-bitowa
suma wraz z bitem carry/borrow - użyję
notacji + na XOR, & na AND, v na OR,
oraz ~ na NOT:
SUM(NS EW C) := NS + EW + C
carry(NS EW C) := NS&EW v NS&C v EW&C
borrow(NS EW C) := carry(~NS EW C)
Widzimy, że jedna z linii kontrolnych multipleksora C
po prostu neguje linię NS zanim wchodzi ona jako
input do carry/borrow.
> 2. Z tego co wiem to wejścia/wyjścia całego układu
> to między innymi W, N, S, E. Wejścia to CMS i 7 bitów
> adresu. Wyjście to CMN.
Lepiej mówić o wejściach/wyjściach RAM oraz
registrów NS EW C oraz nieszczęsnego CM.
> Natomiast jeśli chodzi o FAS to wejścia idą od rejestrów NS EW i C, a
> wyjścia to SM, CY, BW. Więc o jakie 3 vs. 2 "outputy" chodzi?
FAS istnieje tylko koncepcyjnie. W zasadzie
istnieje w sensie bezpośrednim tylko RAM
i registry, których stan zmienia się z każdym
cyklem pod wpływem ich zawartości oraz
linii kontrolnych.
(Oczywiście hardwerowiec doda jako wejścia,
czy "pins", także zasilanie czyli "power" oraz
"clock", ale softwarowiec o to się nie martwi).
Pozdrawiam,
Włodek
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Mateusz Grotek
Date: Sat, 12 Sep 2009 17:32
Date: Sat, 12 Sep 2009 17:32
26 lines
2394 bytes
2394 bytes
Wlodzimierz Holsztynski (Wlod) pisze: > On Sep 11, 6:35 pm, Mateusz Grotek <unodue...@poczta.onet.pl> wrote: > > Napiszę poniżej jak wygląda 1-bitowa > suma wraz z bitem carry/borrow - użyję > notacji + na XOR, & na AND, v na OR, > oraz ~ na NOT: > > SUM(NS EW C) := NS + EW + C > carry(NS EW C) := NS&EW v NS&C v EW&C > > borrow(NS EW C) := carry(~NS EW C) > > Widzimy, że jedna z linii kontrolnych multipleksora C > po prostu neguje linię NS zanim wchodzi ona jako > input do carry/borrow. Tzn. jak rozumiem wirtualny FAS miałby dwa wyjścia, jedno carry/borrow a drugie sum. Ale w takim razie jakbyśmy chcieli odczytać najpier carry a potem borrow (nie możemy tego zrobić równocześnie oczywiście) to FAS przeprowadzałby obliczenie dwukrotnie. Raz z niezanegowanym NS a drugi raz z zanegowanym. Ale a priori nie wiemy czy będziemy potrzebować carry czy borrow. Czyli po wykonaniu rozkazu zawierającego C=CY on odczytuje po prostu carry z FAS. A gdy dostaje rozkaz C=BW to najpierw odwraca stan NS, a potem odczytuje carry. Czy tak to działało? A jeśli tak, to czy to nie powodowało opóźnień? Czy dobrze to zrozumiałem?
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wlodzimierz Holsztynski (Wlod)
Date: Mon, 14 Sep 2009 11:08
Date: Mon, 14 Sep 2009 11:08
123 lines
6649 bytes
6649 bytes
On Sep 12, 10:32 am, Mateusz Grotek <unodue...@poczta.onet.pl> wrote:
> Tzn. jak rozumiem wirtualny FAS miałby dwa wyjścia,
> jedno carry/borrow a drugie sum.
Tak. (Pamiętajmy, że połączenia - "druty" :-) - zajmują
więcej miejsca na kości niż logika, więc należy je
ograniczać).
> Ale w takim razie jakbyśmy chcieli odczytać najpier carry a
> potem borrow (nie możemy tego zrobić równocześnie
> oczywiście) to FAS przeprowadzałby obliczenie dwukrotnie.
Tak - 3 cykle (instrukcje) wystarczą na pewno;
zastanowię się potem czy może nawet 2. Co prawda
takie oszacowania na ogół należy dokonywać w
sytuacji serialnej, więc trzeba zwracać uwagę na RAM.
Niech // oznacza koniec instrukcji gappowskiej, oraz
RAM niech oznacza w kodzie ustalony adres. W ramach
jednej instrukcji inputy podisntrukcji są te same dla tych
samych adresów i registrów (zawartość pamięci i registrów
zmienia się dopiero po //), a operacje podinstrukcji
dokonywane są równolegle. Popatrzmy na naturalny
GAPP-program (3 instrukcje):
RAM := C C := carry //
C := RAM RAM := C //
C := borrow //
W sytuacji ciągu takich operacji, gdy inputy
pochodzą z pamięci, należy to zegrać z
czytaniem pamięci, i dopiero policzyć liczbę
instrukcji per obliczenie, plus jednorazowy
dodatek.
> Raz z niezanegowanym NS a drugi raz z zanegowanym.
> Ale a priori nie wiemy czy będziemy potrzebować carry
> czy borrow.
Na ogół wiemy. Powiedzmy przy wielobitowym
dodawaniu potrzebujemy wciąż carry, a przy
odejmowaniu wciąż borrow. Czasem faktycznie
potrzebujemy carry lub borrow w zależności
od wyniku. Gdy w zależności od globalnego wyniku,
to GAPP to nieźle potrafi, bo ma globalne OR
czyli GLOR, które może wpływać na kontroler
(na ciąg instrukcji w czasie bieżącym). Proponowałem
też bardziej subtelne konstrukcje (chyba ich nawet
nie patentowałem, nie jestem pewny). Ponadto
wybór carry lub borrow może być lokalny, w zależności
od lokalnych wyników. To trochę koncepcyjnie jest
coś do obgadania (ma to sens i nie ma, że tak powiem).
Wtedy GAPP stosuje software'owe rozwidlenie
(fork). Tworzy się 1-bitową płaszczyznę, która decyduje
o operacjach dla każdej komórki (punktu). Na przykład
można dokonać każdego obliczenia na całym "array",
i zachować je w pamięci. Następnie z płaszczyzn
jednego wyniku można wykroić część odpowiadającą
zeru 0 wspomnianej płaszczyzny warunkowej, z drugiego
odpowiadającą części 1, oraz te wykrojone częśći
skleić. (Nic się nie kroi, ale tak to sobie można dla
ułatwienia wyobrażać).
> Czyli po wykonaniu rozkazu zawierającego C=CY on odczytuje
> po prostu carry z FAS. A gdy dostaje rozkaz C=BW to najpierw
> odwraca stan NS, a potem odczytuje carry. Czy tak to działało?
Prawie tak. Liczenie borrow nie wpływa to na zawartość NS.
> A jeśli tak, to czy to nie powodowało opóźnień?
Czas GAPPu jest dyskretny. Więc zarówno carry
jak i borrow wykonuję się w czasie 1 cyklu, czyli
tak samo szybko. Jednak borrow z punkty widzenia
designera być może utrudnia w utrzymaniu obliczeń
instrukcji w ramach jednego pulsu. Gdyby akurat
borrow było krytyczne, to puls (one clock) trzeba by
wydłużyć. Chcę jednak podkreślić, że przy projektowaniu
na poziomie VLSI nie można z góry łatwo przewidzieć
czy i co jest szybsze, carry czy borrow. To akurat jest
zupełnie marginesowy problem (mam na myśli różnicę
czasu na carry i borrow).
Pozdrawiam,
Włodek
PS. Myślałem w 1981 o wprowadzeniu mojej
konstrukcji oprogramowania "//" jako standardowej
do wszystkich klasycznych języków komputerowych.
Chodzi o "puls". Pamięć zmienia się dopiero
z końcem pulsu. To byłoby wspaniale wygodne.
O wiele łatwiej by się myślalo i pisało. Na przykład
zamiana zawartość lokacji (zmiennych) A oraz B
wyglądałaby tak (jak w mojej symulacji GAPPu):
A=B B=A //
Myślałem też o konkretnym, bardzo symetrycznym
języku, który zamiast GAPP symulowałby SuperGAPP.
Taki język bardzo by mi odpowiadał, bo łatwo by
we mnie wsiąknął. Wyobrażalbym sobie supersilny
hardware, symetryczny, więc nauka takiego języka
byłaby pestką, umiałbym go momentalnie. Myślę,
że taki język odpowiadałby wielu ludziom. Przy tym
byłby to język algorytmów masowo-równoległych
(drobnicowo). Nawet na zwykłym komputerze (PeCecie)
takie algorytmy często są szybsze.
Oczywiście APL oraz jego następca
są świetnymi językami arrayowymi, ale mój byłby
jednak naturalniejszy, można by go stale mieć
przed oczami. Zresztą można by w nim rozwinąć
bibliotekę "APL", by dał w efekcie także APL.
Byłby to też język wyższy dla wielu procesorów
równoległych, słabszych od SuperGAPPa. Łatwo
dopisałoby się bibliotekę, która pozwoliłaby
programować taki prawdziwy procesor, jakby to
był SuperGAPP, co byłoby bez porównania
łatwiejsze niż programowanie w asemblerze
danego procesora. wh
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Wlodzimierz Holsztynski (Wlod)
Date: Mon, 14 Sep 2009 11:28
Date: Mon, 14 Sep 2009 11:28
56 lines
3483 bytes
3483 bytes
On Sep 14, 4:08 am, "Wlodzimierz Holsztynski (Wlod)"
<sennaj...@gmail.com> wrote:
> Niech // oznacza koniec instrukcji gappowskiej, oraz
> RAM niech oznacza w kodzie ustalony adres. W ramach
> jednej instrukcji inputy podisntrukcji są te same dla tych
> samych adresów i registrów (zawartość pamięci i registrów
> zmienia się dopiero po //), a operacje podinstrukcji
> dokonywane są równolegle. Popatrzmy na naturalny
> GAPP-program (3 instrukcje):
>
> RAM := C C := carry //
> C := RAM RAM := C //
> C := borrow //
Pamięć (registry i RAM), która w danej instrukcji
nie występuje po lewej stronie znaku := pozostaje
prze taką instrukcję niezmieniona. Powyżej
registry NS oraz EW cały czas zachowują swoją
wartość - mamy mikro nop NS := NS oraz EW := EW
(nie warto ich pisać, są domyślne).
> W sytuacji ciągu takich operacji, gdy inputy
> pochodzą z pamięci, należy to zegrać z
> czytaniem pamięci,
i z wpisywaniem do pamięci.
> i dopiero policzyć liczbę instrukcji per obliczenie,
> plus jednorazowy dodatek.
>
> [...] przy projektowaniu
> na poziomie VLSI nie można z góry łatwo przewidzieć
> czy i co jest szybsze, carry czy borrow. To akurat jest
> zupełnie marginesowy problem (mam na myśli różnicę
> czasu na carry i borrow).
Na poziomie tranzystorów na ogól mamy dostęp
zarówno do wartości registra, jak i do jego negacji,
i nie jest jasnym, który jest wygodniejszy.
Ponadto często i tak dodaje się podwójne przeczenia,
żeby sygnały zsynchronizować, co znowu stwarza
dodatkowe szanse sięgania po sygnał lub jego
zaprzeczenie.
Hardware w rękach specjalisty jest czymś
bardzo plastycznym, jak pozycja szachowa
dla arcymistrza lub język pod piórem świetnego
pisarza. Zapomina się o dyskretności, "wszystko"
wydaje się możliwe, wszystko można modyfikować,
itp.
Pozdrawiam,
Włodek
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Mateusz Grotek
Date: Mon, 14 Sep 2009 15:55
Date: Mon, 14 Sep 2009 15:55
180 lines
10391 bytes
10391 bytes
Wlodzimierz Holsztynski (Wlod) pisze: > On Sep 12, 10:32 am, Mateusz Grotek <unodue...@poczta.onet.pl> wrote: > >> Tzn. jak rozumiem wirtualny FAS miałby dwa wyjścia, >> jedno carry/borrow a drugie sum. > > Tak. (Pamiętajmy, że połączenia - "druty" :-) - zajmują > więcej miejsca na kości niż logika, więc należy je > ograniczać). > Dlatego użyłem słowa "wirtualny". >> Ale w takim razie jakbyśmy chcieli odczytać najpier carry a >> potem borrow (nie możemy tego zrobić równocześnie >> oczywiście) to FAS przeprowadzałby obliczenie dwukrotnie. > > Tak - 3 cykle (instrukcje) wystarczą na pewno; > zastanowię się potem czy może nawet 2. Co prawda > takie oszacowania na ogół należy dokonywać w > sytuacji serialnej, więc trzeba zwracać uwagę na RAM. > > Niech // oznacza koniec instrukcji gappowskiej, oraz > RAM niech oznacza w kodzie ustalony adres. W ramach > jednej instrukcji inputy podisntrukcji są te same dla tych > samych adresów i registrów (zawartość pamięci i registrów > zmienia się dopiero po //), a operacje podinstrukcji > dokonywane są równolegle. Popatrzmy na naturalny > GAPP-program (3 instrukcje): > > RAM := C C := carry // > C := RAM RAM := C // > C := borrow // > > W sytuacji ciągu takich operacji, gdy inputy > pochodzą z pamięci, należy to zegrać z > czytaniem pamięci, i dopiero policzyć liczbę > instrukcji per obliczenie, plus jednorazowy > dodatek. > No tak. A jak rozumiem niewyprowadzenie dwóch wyjść było podyktowane ówczesną technologią. Tzn. dzisiaj właściwie możnaby zrobić FAS który w jednej instrukcji daje carry i borrow. Wtedy można by je wrzucać nie tylko do C. Ale oczywiście wtedy będzie bardziej skomplikowana logika i będzie można upakować to mniej gęsto. Ale do zastosowań to będzie szybsze, bo obrazy i tak mają właściwie dość mało pikseli. Czyli możnaby powiedzieć, że do tych samych zastosowań co wtedy możnaby zrobiś używając dzisiejszej technologii jeszcze lepszego GAPPA. >> Raz z niezanegowanym NS a drugi raz z zanegowanym. >> Ale a priori nie wiemy czy będziemy potrzebować carry >> czy borrow. > > Na ogół wiemy. Powiedzmy przy wielobitowym > dodawaniu potrzebujemy wciąż carry, a przy > odejmowaniu wciąż borrow. Czasem faktycznie > potrzebujemy carry lub borrow w zależności > od wyniku. Gdy w zależności od globalnego wyniku, > to GAPP to nieźle potrafi, bo ma globalne OR > czyli GLOR, które może wpływać na kontroler > (na ciąg instrukcji w czasie bieżącym). Proponowałem > też bardziej subtelne konstrukcje (chyba ich nawet > nie patentowałem, nie jestem pewny). Ponadto > wybór carry lub borrow może być lokalny, w zależności > od lokalnych wyników. To trochę koncepcyjnie jest > coś do obgadania (ma to sens i nie ma, że tak powiem). > Wtedy GAPP stosuje software'owe rozwidlenie > (fork). Tworzy się 1-bitową płaszczyznę, która decyduje > o operacjach dla każdej komórki (punktu). Na przykład > można dokonać każdego obliczenia na całym "array", > i zachować je w pamięci. Następnie z płaszczyzn > jednego wyniku można wykroić część odpowiadającą > zeru 0 wspomnianej płaszczyzny warunkowej, z drugiego > odpowiadającą części 1, oraz te wykrojone częśći > skleić. (Nic się nie kroi, ale tak to sobie można dla > ułatwienia wyobrażać). > Jak rozumiem mówisz tu o optymalizacjach. >> Czyli po wykonaniu rozkazu zawierającego C=CY on odczytuje >> po prostu carry z FAS. A gdy dostaje rozkaz C=BW to najpierw >> odwraca stan NS, a potem odczytuje carry. Czy tak to działało? > > Prawie tak. Liczenie borrow nie wpływa to na zawartość NS. > No tak, przez odwracanie stanu nieprecyzyjnie wyraziłem fakt, że linia idąca od NS do wirtualnego FAS przechodzi (tylko wirtualnie) przez bramkę która odwraca lub nie odwraca sygnału zależnie od podanego rozkazu. Nie chodziło mi o zmianę zawartości rejestru NS. >> A jeśli tak, to czy to nie powodowało opóźnień? > > Czas GAPPu jest dyskretny. Więc zarówno carry > jak i borrow wykonuję się w czasie 1 cyklu, czyli > tak samo szybko. Jednak borrow z punkty widzenia > designera być może utrudnia w utrzymaniu obliczeń > instrukcji w ramach jednego pulsu. Gdyby akurat > borrow było krytyczne, to puls (one clock) trzeba by > wydłużyć. Chcę jednak podkreślić, że przy projektowaniu > na poziomie VLSI nie można z góry łatwo przewidzieć > czy i co jest szybsze, carry czy borrow. To akurat jest > zupełnie marginesowy problem (mam na myśli różnicę > czasu na carry i borrow). > No tak. Chodziło mi tylko, że musi tam być bramka która neguje lub nie neguje linię od NS do FAS. Ale oczywiście na poziomie elektroniki można to tak zoptymalizować, żeby dostać to za darmo niejako. Ale tak czy owak chyba to rozwiązanie z uniemożliwieniem jednoczesnego odczytu carry i borrow sporo upraszcza elektronikę. Czyli mówiąc inaczej, należałoby się zastanowić na czym nam bardziej zależy i co jest bardziej korzystne do danych zastosowań, a także do istniejącej technologii. Najprawdopodobniej algorytmy przetwarzania obrazów rzadko potrzebują jednocześnie jednego i drugiego, a dzięki temu ograniczeniu byćmoże elektronika będzie szybsza, gdyż będzie prostsza. Ciekawy pomysł. > Pozdrawiam, > > Włodek > > PS. Myślałem w 1981 o wprowadzeniu mojej > konstrukcji oprogramowania "//" jako standardowej > do wszystkich klasycznych języków komputerowych. > Chodzi o "puls". Pamięć zmienia się dopiero > z końcem pulsu. To byłoby wspaniale wygodne. > O wiele łatwiej by się myślalo i pisało. Na przykład > zamiana zawartość lokacji (zmiennych) A oraz B > wyglądałaby tak (jak w mojej symulacji GAPPu): > > A=B B=A // > > Myślałem też o konkretnym, bardzo symetrycznym > języku, który zamiast GAPP symulowałby SuperGAPP. > Taki język bardzo by mi odpowiadał, bo łatwo by > we mnie wsiąknął. Wyobrażalbym sobie supersilny > hardware, symetryczny, więc nauka takiego języka > byłaby pestką, umiałbym go momentalnie. Myślę, > że taki język odpowiadałby wielu ludziom. Przy tym > byłby to język algorytmów masowo-równoległych > (drobnicowo). Nawet na zwykłym komputerze (PeCecie) > takie algorytmy często są szybsze. > > Oczywiście APL oraz jego następca > są świetnymi językami arrayowymi, ale mój byłby > jednak naturalniejszy, można by go stale mieć > przed oczami. Zresztą można by w nim rozwinąć > bibliotekę "APL", by dał w efekcie także APL. > > Byłby to też język wyższy dla wielu procesorów > równoległych, słabszych od SuperGAPPa. Łatwo > dopisałoby się bibliotekę, która pozwoliłaby > programować taki prawdziwy procesor, jakby to > był SuperGAPP, co byłoby bez porównania > łatwiejsze niż programowanie w asemblerze > danego procesora. wh Hmm, w mojej opinii SIMD nie jest dobrym rozwiązaniem do ogólnego przetwarzania danych. Jest świetny do grafiki, gdzie tą samą operację chcemy wykonać na wielu danych. Ale w innych wypadkach może nie być taki dobry. W mojej opinii MIMD sprawdzi się lepiej, gdyż oczywiście może emulować SIMD, ale ma poza tym większe możliwości. Aczkolwiek jest jescze drugi punkt widzenia, a mianowicie punkt widzenia elektroniki. Jeżeli SIMD będzie DUŻO szybszy niż MIMD to preferowałbym SIMD. Ale chyba nie ma aż tak wielkiej zależności. Poza tym mózg jeżeli możemy tak powiedzieć, jest architekturą MIMD. Każdy neuron to jednostka obliczeniowa, ale pomimo faktu, że ma początkowo zapisany ten sam "program", wywołuje w zależności od warunków środowiska inne jego "instrukcje", więc ścieżki się rozchodzą. Według mnie to przyszłość komputerów. Już widać odchodzenie od SISD w kierunku MIMD nawet wśród komputerów "domowych", a co dopiero powiedzieć o farmach serwerów, gdzie każdy serwer jest sam w sobie kolekcją procesorów. Sądzę, że wreszcie dojdą do wniosku, że jednostka obliczeniowa ma być jak najprostsza i SISD w ogóle odejdzie do lamusa nawet w zastosowaniach domowych. Ale żeby zaprogramować taki komputer będą potrzebne nowe języki programowania, w których równoległość obliczeń jest oczywista, widoczna na poziomie języka i łatwo dająca się pojąć. I co najciekawsze sądzę, że takie języki nie powstaną. Już programowanie 5 równoległych procesów jest trudne bez zatrzymywania żadnego z nich. A co gdy będziemy musieli zaprogramować 1000000? Według mnie pójdzie to w stronę systemów uczących się i sztucznej inteligencji. Bo bez tego nie wyobrażam sobie mówienie 1000000 nanoprocesorów co mają robić. Aczkolwiek możliwe jest także skonstruowanie architektury która może zrobić 1000000 forków. Ale im więcej forków tym prostsze instrukcje może interpretować. Takie coś byłoby całkiem ciekawym pomysłem i działało by trochę jak ludzki mózg. Przyszłość pokaże.
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: A.L.
Date: Mon, 14 Sep 2009 16:34
Date: Mon, 14 Sep 2009 16:34
52 lines
3462 bytes
3462 bytes
On Mon, 14 Sep 2009 17:55:06 +0200, Mateusz Grotek <unoduetre@poczta.onet.pl> wrote: >"instrukcje", więc ścieżki się rozchodzą. Według mnie to przyszłość >komputerów. Już widać odchodzenie od SISD w kierunku MIMD nawet wśród >komputerów "domowych", a co dopiero powiedzieć o farmach serwerów, gdzie >każdy serwer jest sam w sobie kolekcją procesorów. Przyszlosc komputerow juz byla, ale sie rozmyla. Mam na mysli transputer ktory zmarl smeircia tragiczna sporo lat temu i byl wlasnei MIMD >Sądzę, że wreszcie >dojdą do wniosku, że jednostka obliczeniowa ma być jak najprostsza i >SISD w ogóle odejdzie do lamusa nawet w zastosowaniach domowych. Ale >żeby zaprogramować taki komputer będą potrzebne nowe języki >programowania, w których równoległość obliczeń jest oczywista, widoczna >na poziomie języka i łatwo dająca się pojąć. I co najciekawsze sądzę, że >takie języki nie powstaną. A jezyk zwany Occam?... Na przyklad, tylko. Implementacja mechanizmow Occama w Javie zwana jest JCSP i programuje sie przy pomocy tego doskonale >Już programowanie 5 równoległych procesów >jest trudne bez zatrzymywania żadnego z nich. Jak sie wie jak to robic, to nie. Poza tym, na ogol nei ejst mozliwe "nei zatrzymywanie zadnego z nich" i nei wynika to z naszej nieumiejetnosci a z powodu ograniczen zwiazanych z natura algorytmow. Nei wszystko daje sie prosto zrownoleglic. >A co gdy będziemy musieli >zaprogramować 1000000? A Thinking Machines?... Ile oni mieli procesorow?... 16 tysiecy, zdaje sie, ale to bylo dawno. I jakos sie programowalo. A BlueGene?... "The 1-PFLOPS Blue Gene/P configuration is a 294,912-processor, 72-rack system harnessed to a high-speed, optical network. Blue Gene/P can be scaled to an 884,736-processor, 216-rack cluster to achieve 3-PFLOPS performance. A standard Blue Gene/P configuration will house 4,096 processors per rack"... "new configuration has started at April 6, the system will go into production end of June 2009. The new configuration will include 294 912 processor cores, 144 terabyte memory, 6 petabyte storage in 72 racks" I tez sie jakos programuje. A.L.
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Mateusz Grotek
Date: Tue, 15 Sep 2009 00:56
Date: Tue, 15 Sep 2009 00:56
83 lines
5602 bytes
5602 bytes
A.L. pisze: > On Mon, 14 Sep 2009 17:55:06 +0200, Mateusz Grotek > <unoduetre@poczta.onet.pl> wrote: > >> "instrukcje", więc ścieżki się rozchodzą. Według mnie to przyszłość >> komputerów. Już widać odchodzenie od SISD w kierunku MIMD nawet wśród >> komputerów "domowych", a co dopiero powiedzieć o farmach serwerów, gdzie >> każdy serwer jest sam w sobie kolekcją procesorów. > > Przyszlosc komputerow juz byla, ale sie rozmyla. Mam na mysli > transputer ktory zmarl smeircia tragiczna sporo lat temu i byl wlasnei > MIMD > BlueGene o którym piszesz niżej to też MIMD. >> Sądzę, że wreszcie >> dojdą do wniosku, że jednostka obliczeniowa ma być jak najprostsza i >> SISD w ogóle odejdzie do lamusa nawet w zastosowaniach domowych. Ale >> żeby zaprogramować taki komputer będą potrzebne nowe języki >> programowania, w których równoległość obliczeń jest oczywista, widoczna >> na poziomie języka i łatwo dająca się pojąć. I co najciekawsze sądzę, że >> takie języki nie powstaną. > > A jezyk zwany Occam?... Na przyklad, tylko. Implementacja mechanizmow > Occama w Javie zwana jest JCSP i programuje sie przy pomocy tego > doskonale > >> Już programowanie 5 równoległych procesów >> jest trudne bez zatrzymywania żadnego z nich. > > Jak sie wie jak to robic, to nie. Poza tym, na ogol nei ejst mozliwe > "nei zatrzymywanie zadnego z nich" i nei wynika to z naszej > nieumiejetnosci a z powodu ograniczen zwiazanych z natura algorytmow. > Nei wszystko daje sie prosto zrownoleglic. > Cała zabawa polega właśnie na stworzeniu takich algorytmów które zatrzymywanie ograniczają do minimum. >> A co gdy będziemy musieli >> zaprogramować 1000000? > > A Thinking Machines?... Ile oni mieli procesorow?... 16 tysiecy, zdaje > sie, ale to bylo dawno. I jakos sie programowalo. > Spojrzałem zarówno na manuala do occama jak i do C*. I nadal podtrzymuję to co napisałem. Pewnie się nie zrozumieliśmy, (może trochę niejasno napisałem). Wiem, że można programować równolegle. Wiem także że można zaprogramować MIMD, żeby elementy wykonywały równolegle inne procesy. Jednakże twierdzę, że nie można zaprogramować komputera z 1000000 elementów, żeby każdy z nich wykonywał KOMPLETNIE różny program w rozsądnym czasie i od zera, gdyż równałoby się to programowaniu 1000000 komputerów równocześnie. Co innego jeśli każdy z tych programów będzie umiał dopasowywać się do przychodzących danych. W takim wypadku możemy mówić o sztucznej inteligencji, szczególnie programowaniu ewolucyjnym, genetycznym itp. Inaczej mówiąc chodziło mi o to, że będzie odchodzić się od programowania w stylu pisania dokładnych przepisów co kiedy maszyna ma robić i jak reagować na polecenia użytkownika, a włączy się także do tego czynniki ewolucyjne i inne rozwiązania sztucznej inteligencji, które wcale nie muszą być przewidywalne. Już dzisiaj nie można przewidzieć jak będzie przebiegało uczenie bardzo dużej sieci neuronowej a priori, lub nawet prostej gry w życie, gdyż zabrałoby to zbyt dużo czasu. Dlatego napisałem, że w tym kierunku pójdzie programowanie, zamiast pisać elementom jak mają obrabiać dane które chcemy przetworzyć, napiszemy im co mają zrobić by przetrwać, lub wykorzystamy inne pomysły sztucznej inteligencji. Mówiąc jeszcze inaczej, nie będziemy opisywać w programach dokładnie jak krok po kroku przetwarzać dane które nas interesują, ale tylko jak procesy mają przetrwać i pozwolimy im samym znaleźć rozwiązanie problemu. Mam nadzieję, że teraz jest jasno i klarownie. > A BlueGene?... "The 1-PFLOPS Blue Gene/P configuration is a > 294,912-processor, 72-rack system harnessed to a high-speed, optical > network. Blue Gene/P can be scaled to an 884,736-processor, 216-rack > cluster to achieve 3-PFLOPS performance. A standard Blue Gene/P > configuration will house 4,096 processors per rack"... > > "new configuration has started at April 6, the system will go into > production end of June 2009. The new configuration will include 294 > 912 processor cores, 144 terabyte memory, 6 petabyte storage in 72 > racks" > > I tez sie jakos programuje. > Jakoś na pewno ;-) > A.L.
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: A.L.
Date: Tue, 15 Sep 2009 13:31
Date: Tue, 15 Sep 2009 13:31
17 lines
2192 bytes
2192 bytes
On Tue, 15 Sep 2009 02:56:22 +0200, Mateusz Grotek <unoduetre@poczta.onet.pl> wrote: o. >> >Spojrzałem zarówno na manuala do occama jak i do C*. I nadal podtrzymuję >to co napisałem. Pewnie się nie zrozumieliśmy, (może trochę niejasno >napisałem). Wiem, że można programować równolegle. Wiem także że można >zaprogramować MIMD, żeby elementy wykonywały równolegle inne procesy. >Jednakże twierdzę, że nie można zaprogramować komputera z 1000000 >elementów, żeby każdy z nich wykonywał KOMPLETNIE różny program w >rozsądnym czasie i od zera, gdyż równałoby się to programowaniu 1000000 >komputerów równocześnie. Programowales cos na komputerach rownoleglych i piszesz na podstawie praktyki, czy tez tak ci sie zdaje?... A.L.
Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.
Author: Mateusz Grotek
Date: Tue, 15 Sep 2009 17:12
Date: Tue, 15 Sep 2009 17:12
19 lines
2273 bytes
2273 bytes
A.L. pisze: > On Tue, 15 Sep 2009 02:56:22 +0200, Mateusz Grotek > <unoduetre@poczta.onet.pl> wrote: > o. >> Spojrzałem zarówno na manuala do occama jak i do C*. I nadal podtrzymuję >> to co napisałem. Pewnie się nie zrozumieliśmy, (może trochę niejasno >> napisałem). Wiem, że można programować równolegle. Wiem także że można >> zaprogramować MIMD, żeby elementy wykonywały równolegle inne procesy. >> Jednakże twierdzę, że nie można zaprogramować komputera z 1000000 >> elementów, żeby każdy z nich wykonywał KOMPLETNIE różny program w >> rozsądnym czasie i od zera, gdyż równałoby się to programowaniu 1000000 >> komputerów równocześnie. > > Programowales cos na komputerach rownoleglych i piszesz na podstawie > praktyki, czy tez tak ci sie zdaje?... > > A.L. Nie muszę programować, żeby to ocenić. Chyba znowu się nie rozumiemy. Użyłem słowa "kompletnie".
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads