🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.matematyka
Article #10023

Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor (GAPP). Orlando.

#10023
From: Wlodzimierz Holsztynski (Wlod)
Date: Mon, 14 Sep 2009 11:08
123 lines
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
Technical Details
Message-ID: <b855f3a1-5e0e-4c27-a60e-f14f866551d0@12g2000pri.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!plix.pl!newsfeed1.plix.pl!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!news.glorb.com!postnews.google.com!12g2000pri.googlegroups.com!not-for-mail
References: <0b4a1a5a-28bc-4a93-9391-df8b5f309e7e@o9g2000prg.googlegroups.com> <20090809134143.0d66729f@cat.tac> <fbf87ecb-78ac-45db-b36b-788077b1e498@y4g2000prf.googlegroups.com> <h8etrv$18v$3@news.onet.pl> <518cc6c9-c24c-49ec-b26e-7a2fb59287aa@e4g2000prn.googlegroups.com> <h8glue$9l3$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!plix.pl!newsfeed1.plix.pl!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!news.glorb.com!postnews.google.com!12g2000pri.googlegroups.com!not-for-mail
From: "Wlodzimierz Holsztynski (Wlod)" <sennajawa@gmail.com>
Newsgroups: alt.pl.matematyka
Subject: Re: Moje (wh) "dziecko": Geometric-Arithmetic Parallel Processor  (GAPP). Orlando.
Date: Mon, 14 Sep 2009 04:08:48 -0700 (PDT)
Organization: http://groups.google.com
Lines: 123
Message-ID: <b855f3a1-5e0e-4c27-a60e-f14f866551d0@12g2000pri.googlegroups.com>
References: <0b4a1a5a-28bc-4a93-9391-df8b5f309e7e@o9g2000prg.googlegroups.com>  <20090809134143.0d66729f@cat.tac> <fbf87ecb-78ac-45db-b36b-788077b1e498@y4g2000prf.googlegroups.com>  <h8etrv$18v$3@news.onet.pl> <518cc6c9-c24c-49ec-b26e-7a2fb59287aa@e4g2000prn.googlegroups.com>  <h8glue$9l3$1@news.onet.pl>
NNTP-Posting-Host: 76.195.160.242
Mime-Version: 1.0
X-Trace: posting.google.com 1252926530 29007 127.0.0.1 (14 Sep 2009 11:08:50 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Mon, 14 Sep 2009 11:08:50 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: 12g2000pri.googlegroups.com; posting-host=76.195.160.242;  posting-account=UrCXdgoAAADLYEIMhLgC9DXK7KdryJbT
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US;  rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit