Useimmilta on ehkä jäänyt huomaamatta, että tietokonetekniikka elää ***__ juuri nyt ___**** merkittävintä murrostaan sitten mikroprosessoritekniikan käyttöönoton 70-luvulla.
Vielä muutama vuosi sitten suorittimen laskentateho kaksinkertaistui 1,5-2v välein nostamalla kellotaajuutta, lisäämällä sisäistä rinnakkaisuutta, väylänleveyksiä, välimuistien kokoja ym. Tämä siis koski yksittäisiä suorittimia joiden monimutkaisuus kasvoi periaatteessa ohjelmoijalta piilossa nykyiselle tasolleen.
Nyt tämä tie on kuljettu ihan virallisesti loppuun!!!!!
Tästä lähtien laskentatehot kasvavat edelleen, mutta ei kasvattamalla yksityisen suorittimen tehoja vaan lisäämällä yhdellä piipalalla olevien prosessoreiden niin, että tämä määrä kaksinkertaistuu n. kahden vuoden välein. Nyt on juuri menossa (yleissuorittimissa) 2 -> 4 suorittimeen per piipala. Kuuden vuoden päästä on meneillään sukupolvenvaihdos 16 -> 32 suoritinta piipalalla.
Tämä paradigman muutos on radikaali, koska se tulee näkymään ohjelmoijillekin. Ohjelmointitekniikoita on muutettava, on siirryttävä rinnakkaisajatteluun. Se on isompi siirros kuin 10-15v sitten, jolloin siirryttiin oliohjelmointiin.
Tämä muutos uusi ei vielä näy, mutta pinnan alla kuohuu. Piirivalmistajat ovat nostaneet kädet pystyyn antautumisen merkiksi: yksittäisten suorittimien tehojen nousu on loppu. Nyt keskitytään MIPS/Watti tai MIPS/dollari tai molempia. Ei enään MIPS/suoritin.
Sulautetuissa järjestelmissä, robotiikassa ja tekoälyssä muutos ei ole niin radikaali, koska siellä on jo vuosikymmeniä sovellettu multitasking- ja jopa multiprosessoriohjelmointia. Minä tein koodia monelle rinnakkaiselle prosessorille jo 80-luvulla, mutta monilla aloilla muutos tulee olemaan vaikea ja voi merkitä kehityksen hidastumista. Toiset sovellukset sopivat luonnostaan jaettavaksi useisiin säikeisiin, mutta toisissa tulee seinä eteen.
Vielä muutama vuosi sitten suorittimen laskentateho kaksinkertaistui 1,5-2v välein nostamalla kellotaajuutta, lisäämällä sisäistä rinnakkaisuutta, väylänleveyksiä, välimuistien kokoja ym. Tämä siis koski yksittäisiä suorittimia joiden monimutkaisuus kasvoi periaatteessa ohjelmoijalta piilossa nykyiselle tasolleen.
Nyt tämä tie on kuljettu ihan virallisesti loppuun!!!!!
Tästä lähtien laskentatehot kasvavat edelleen, mutta ei kasvattamalla yksityisen suorittimen tehoja vaan lisäämällä yhdellä piipalalla olevien prosessoreiden niin, että tämä määrä kaksinkertaistuu n. kahden vuoden välein. Nyt on juuri menossa (yleissuorittimissa) 2 -> 4 suorittimeen per piipala. Kuuden vuoden päästä on meneillään sukupolvenvaihdos 16 -> 32 suoritinta piipalalla.
Tämä paradigman muutos on radikaali, koska se tulee näkymään ohjelmoijillekin. Ohjelmointitekniikoita on muutettava, on siirryttävä rinnakkaisajatteluun. Se on isompi siirros kuin 10-15v sitten, jolloin siirryttiin oliohjelmointiin.
Tämä muutos uusi ei vielä näy, mutta pinnan alla kuohuu. Piirivalmistajat ovat nostaneet kädet pystyyn antautumisen merkiksi: yksittäisten suorittimien tehojen nousu on loppu. Nyt keskitytään MIPS/Watti tai MIPS/dollari tai molempia. Ei enään MIPS/suoritin.
Sulautetuissa järjestelmissä, robotiikassa ja tekoälyssä muutos ei ole niin radikaali, koska siellä on jo vuosikymmeniä sovellettu multitasking- ja jopa multiprosessoriohjelmointia. Minä tein koodia monelle rinnakkaiselle prosessorille jo 80-luvulla, mutta monilla aloilla muutos tulee olemaan vaikea ja voi merkitä kehityksen hidastumista. Toiset sovellukset sopivat luonnostaan jaettavaksi useisiin säikeisiin, mutta toisissa tulee seinä eteen.
Vastaukset 22
Vanhimmat
"Ohjelmointitekniikoita on muutettava, on siirryttävä rinnakkaisajatteluun"
Tai compilereita on muutettava niin ettei tarvitse. Se rinnakkaisajattelu on automatisoitava.
"Kuuden vuoden päästä on meneillään sukupolvenvaihdos 16 -> 32 suoritinta piipalalla. "
Jos piitä, on puhuttu muovisiruista.
Entä molekyylikytkintietokoneet?
Toinen muutos tulee olemaan se mitä on jo muistipiireissä; valmistusvirheiden sieto. Suorittimia on _noin_ 32 tai _noin_ 1024. Osaa ei pilaa se jos osa suorittimista on virheellisiä.
>"Ohjelmointitekniikoita on muutettava, on siirryttävä rinnakkaisajatteluun"
>Tai compilereita on muutettava niin ettei tarvitse. Se rinnakkaisajattelu on automatisoitava.
Tätä on yritetty ehkä 30v ajan. Lähdekoodi, jossa ei ole ajatustakaan rinnakkaisuudesta, on hyvin rajoitetusti pelkällä compilerilla muutettavissa rinnakkaisutta hyödyntäväksi, toimii vain erikoistapauksissa.
Asia helpottuu, jos kielen tasolle lisätään uusia avainsanoja yms, kuten occamissa tai sC :ssa.
Mutta käytännössä paras tulos saavutetaan, jos koko sovelluksen arkkitehtuuri suunnitellaan huomioimaan rinnakkaisten prosessoreiden käyttö. ja tämä edellyttää suurta ajattelutavan uudelleenjärjestelyä. Käytännössä usein tarvitaan uusi ohjelmoijasukupolvi.. monet vanhatkoodarit siirtyvät projektipäälliköiksi tai vanhojen koodien ylläpitoon. Mutta toiset pystyvät muuttamaan ajattelutapansa...
"valmistusvirheiden sieto": No tämä on onneksi valmistajan ongelma. Esim piipalalle tehdäänkin 33 suoritinta, joista aina yksi jätetään käyttämättä ja suoritinten paikalliset osoitteet jaetaan vasta testauksen jälkeen esim antifuse-tekniikkaa käyttäen.
"Tätä on yritetty ehkä 30v ajan"
Yritys lienee ollut vähäistä, koska tarve on ollut vähäistä. Sadoista miljoonista tietokoneista ehkä promille on ollut sillä tavalla rinnakkaisia? Nyt aiheen tutkimuksen ainakin pitäisi räjähtää.
Ellet väitä, että rinnakkaisuusohjelmoinnissa pitäisi tietää millaista dataa ohjelma ottaa käytännössä? Sekään ei välttämättä ole ylitsepääsemätön este; compileriin voi syöttää myös käyttölokeja ja esimerkkidataa.
"toimii vain erikoistapauksissa. "
Siis nykyisillä kääntäjillä, ettet tarkoita mitään teoreettista estettä? Jos ihmisohjelmoijalle antaa lähdekoodin, niin kyllä kai siitä pystyy tekemään rinnakkaisen version? Ja jos ihminen pystyy sillä tiedolla, niin kyllä pystyy konekin.
eipä edes yhdestä suorittimesta osata kaikkea irti ottaa...
Ajat siis takaa jotakin sellaista, jota HDL-piireissä kutsutaan sanalla "behavioral compilation". Näissä ratkaisuissa, yritelmissä, suhteellisen korkean tason kuvauksesta, joka usein esitetään sekventiaalisina algoritmeina, syntetisoidaan RTL-kuvaus (register-transfer-logic), joka sitten käännetään tai syntetisoidaan (porttilistaksi) perinteisillä työkaluilla.
OK, terve suuntaus olisikin abstraktiotason siirtäminen pari tasoa ylöspäin ja tekoälyn tehokkaampi käyttöönotto. Siis käytännössä suoritettava binäärikoodi syntetisoitaisiin suoraan (tai välietappien kautta) tarvemääritelmistä (requirement specifications) ja koodarit siirretään kortistoon tai perushoitajiksi. Näin ehkä tulee käymään 10v kuluessa.
Tuhansien asynkronisten prosessien järjestelmät lähestyvät elävien organismien rakennetta. Ehkäpä biologiasta löytyy malleja uudelle tietotekniikalle.
...ainoat tehokkaat tavat ohjelmoida ovat geneettiset algoritmit ja tekoäly jonka lasken "kehittyneeksi" geneettiseksi algoritmiksi. Monet näkevät jo internetin hyödyntävän paljon alkeellisia geneettisiä algoritmeja:
http://www.uta.fi/~tierka/gates.htm
http://keskustelu.suomi24.fi/show.fcgi?category=2000000000000020&conference=4500000000000080&posting=22000000023392003
Ehkä lähinpänä on soluautomaattien teoria. Sieltä voi löytyä vielä paljon. Keskenään kommunikoivat soluautomaatit muistuttavat jossakin suhteessa biologisia neuroneja, mutta niin muistuttavat toisaalta digitaalisen piitekniikan portitkin. Ammatillisessä ympäristössä olen käyttänyt eniten VHDL-kieltä. Siinä on rinnakkaisuus sisäänrakennettuna. VHDL-prosessi on käsite, joka puuttuu normaaleista ohjelmointikielistä, mutta sen ajonaikanen toteutus VHDL-simulaattoreissa kuluttaa kohtuuttomasi suoritintehoa. Erityinen HW-tasolla siihen tarkoitettu suoritinarkkitehtuuri voisi auttaa.
VHDL:n rinnalla käytettään Verilog-kieltä, joka on hyvin vastaava. Nykyään on myös System-C, mutta en tiedä sen ominaisuuksista.
Mitä se on? Jotain Prologin tapaista vai vaan jotenkin rinnakkaisuutta tukevaa matalantason konekieltä? Logiikkaohjelmoinnin ja funktionaalisten kielten merkityskään ei ole minulle avautunut.
VHDL on Adan pohjalta kehitetty mikropiirien suunnitteluun tarkoitettu ohjelmointikieli. Sen perussyntaksi on siis helppoa Pascalia osaavalle. Mutta siinä on Adaan nähden laajennuksena kytkentäverkon kuvaustaso, "entity/architecture-rakenne" ja "prosessi", lohko, olio, joka käynnistyy aina kun joku sen "herkkyyslistassa" oleva signaali, useimmiten järjestelmäkello, muuttuu, esim kellosignaalin nouseva reuna saapuua. Sen jälkeen evaluoidaan tulosignaaleista lähtösignaalit (kuvaa teoreettista ajanhetkeä) ja prosessi jää odotamaan seuraavaa muutosta.
VHDL:llä ja Verilogilla suunnitellaan esim nykyiset kymmenien miljoonien transistoreiden suorittimet.
Yksinkertainen esimerkki:
---------------------------------------------------
-- 3-bit Shift-Register/Shifter
-- (ESD book figure 2.6)
-- by Weijun Zhang, 04/2001
--
-- reset is ignored according to the figure
---------------------------------------------------
library ieee ;
use ieee.std_logic_1164.all;
---------------------------------------------------
entity shift_reg is
port( I: in std_logic;
clock: in std_logic;
shift: in std_logic;
Q: out std_logic
);
end shift_reg;
---------------------------------------------------
architecture behv of shift_reg is
-- initialize the declared signal
signal S: std_logic_vector(2 downto 0):="111";
begin
process(I, clock, shift, S)
begin
-- everything happens upon the clock changing
if clock'event and clock='1' then
if shift = '1' then
S
Mielenkiintoista nähdä millaisia ohjelmointitapoja on ja tulee olemaan. Ehkä tulee juuri tämän kaltaisia jota tässä keskustelussa haetaan... Tein joskus ikkunointijärjestelmän Basicilla Dosiin ja huomasin kuinka helposti olioiden välisellä kommunikaatiolla/viestinnällä saa tehtyä toimivia ohjelmia. Käytin viestijonoa (First In First Out). Sekään ei ole kovin "epäorgaaninen" arkkitehtuuriratkaisu.
Tässä on tuore analyysi tilanteesta niille, joita asia kiinnostaa.
http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf
"Since real world applications are naturally parallel and hardware is naturally parallel, what we need is a programming model, system software, and supporting architecture that are naturally parallel"
"Traditional operating systems will be deconstructed and operating systems functionality will be orchestrated using libraries and virtual machines."
esim ovatko aivot moniajoa vai yksi sama prosessi...
Tässä on kysymys yleisestä multicore-suorittimien hyödyntymäisestä, ei "filosofisesta kysymyksestä" miten biologisiin aivoihin sovelletaan ATK:n termejä.
Mutta, siis asian vierestä, uskon, että ehdottomasti aivoissa on satoja (tai enemmän) keskenään kommunikoivia (ja kilpailevia) prosesseja.
Tarkoitus olikin udella miten tämä tulee vaikuttamaan tekoälyn kehitykseen. Se riippuu myös aivojen rakenteesta. Yleistä fysiikan mallinnusta multiprosessoiminen varmaan jopa nopeuttaa mutta siitä ei kannata vetää nopeasti johtopäätöksiä. Jos kellotaajuuden kasvu pysähtyy, pysähtyykö aivosimulaatio? Tarvitaanko ytimiä aivosoluja vastaava määrä? Kuka hallitsee supermoniulotteista ja superdynaamista ohjelmistoa, jota orgaanisten toimintojen mallintamiseen tarvitaan, ehkä täysin erirakenteisella raudalla. AGI ennustukset uusiksi?
No, superälyprojektien arkkitehtuurit ovat hyvin monenlaisia. Ne, joilla on suurimmat mahdollisuudet valmistua ensiksi (lähinnä siksi, että laitteistovaatimukset ovat pienimpiä) eivät muistuta paljoakaan biologisten aivojen arkkitehtuuria, mutta oletan, että kaikki ratkaisut ovat rinnakkaistettavissa tehokkaasti.
Biologisten aivojen simuloinnissa jonkinlainen "keskivertorinnakkaisuusaste" olisi yksi suoritin per "Cortical Column", eli n. 10 000 neuronia. Rinnakkaisuus voi olla tätä lievempää (vähemmän suorittimia: yksi suoritin per 1000 CC:a ) tai jyrkempää (esim yksi suoritin CC:ssa per kerros (aivokuoressa on kuusi kerrosta)).
Biologisten aivojen simulointi on jonkinlainen "viimeinen mahdollisuus", takaportti, jos muissa menetelmissä tulee ylipääsemättömiä vaikeuksia.
"Biologisten aivojen simulointi on jonkinlainen "viimeinen mahdollisuus", takaportti, jos muissa menetelmissä tulee ylipääsemättömiä vaikeuksia."
Tässä on vielä Ben Goertzelin melko tuore näkemys samasta asiasta, näin kai se sitten on:
"Benjamin Goertzel:
Sun, 21 Jan 2007 07:04:02 -0800
One thing I find interesting is that IBM is focusing their AGI-ish
efforts so tightly on human-brain-emulation-related approaches.
For instance, Sam Adams, an IBM Distinguished Engineer who has created
the Joshua Blue AGI architecture,
http://wiki.squeak.org/squeak/1107
was not present at this "cognitive computing" conference.
Kurzweil, as is well known, has forecast that human brain emulation is
the most viable path to follow to get to AGI. I agree that it is a
viable path, but I don't think it is anywhere near the shortest path.
However, I think it's possible (though not extremely likely) that if
all the pundits and funding sources (like IBM) continue to harp on the
brain-emulation approach to the exclusion of other approaches, the
prophecy that human brain emulation will be the initial path to AGI
could become a self-fulfilling one ;-p ...
-- Ben G
En vielä ottanut selvää noista Benin näkemyksistä mutta...
"Biologisten aivojen simulointi on jonkinlainen "viimeinen mahdollisuus", takaportti, jos muissa menetelmissä tulee ylipääsemättömiä vaikeuksia."
Nyt minusta alkaa näyttää siltä että tämä aivojen simulointi näillä "1900-luvun tietokoneilla" on mahdottomuus. Tietokonelaskenta ei vaan ole riittävän "tarkkaa" eikä kasva tarpeeksi nopeasti.
Suorittimien laskentattehon kasvu on ilmoitettu _vain yhdessä aikaulottuvuudessa_!!! Aivojen simuloinnin kannalta lukua tulisi seurata noin kahdeksassa ulottuvuudessa. (Ei neliöjuuressa tai kuutiojuuressa vaan kahdeksassa juuressa) (4 viimeistä ulottuvuutta tulee esim tarkentuvan soluautomaatin lisääntyvien naapurisolujen määrästä, arvioin luvun itse) Vertailuna Commodore 64:ään "8-ulotteisen laskennan tarkkuus" _ei ole edes kaksinkertaistunut_.
Muutenkin laskentavoiman kasvu on ollut varsin kosmeettista. Sään ennustamisessa, joka vaatii oikeaa moniulotteista laskentaa, ei ole tapahtunut läpimurtoa. Eikä siis ihme. Ehkä tiettyjen tilastojen valossa vaikuttaa että "kellotus" on pysähtymään päin.
Tällä sivulla esitetyt menetelmä ovat minusta kiinnostavia mutta jos aivosimulaatio on näin kaukana, onko realistista odottaa kovin autonomisia ohjelmia?
"Vertailuna Commodore 64:ään "8-ulotteisen laskennan tarkkuus" _ei ole edes kaksinkertaistunut_."
Korjaan itse: 4,2 ghz kone on 2,837 kertaa 1 mhz konetta tarkempi 8-uloitteisessa soluautomaatiossa.
En nyt ihan ymmärrä kaikkea.
Ei (ihmis-) aivosimulaattori olekaan mahdollinen 1900-luvun koneilla, mutta ehkä riittävällä tarkkuudella 2020..30-luvun koneilla. Jo "Blue Brain Project"
http://domino.watson.ibm.com/comm/pr.nsf/pages/rsc.bluegene_cognitive.html
antanee hyviä valmiuksia piankin yhden Cortical Column modulin simuloinnissa.
Ymmärrän "8-ulottuvuuksen soluaatomaatin" käsitteen, mutta en sitä, miten se liittyy aivojen simulointiin. Teoreettisten soluautomaattien simuloinnin kaikkien mahdollisuuksien simulointi räjähtää eksponentiaalisesti jo kolmannesta ulottuvuudesta lähtien, mutta silti vaikka 1000-ulottuvuuksista soluautomaattia voi simuloida hyvin pöytäkoneella (mutta ei löytää sen kaikkia mahdollisuuksia). Samoin ei ole tarvetta evaluoida "kaikkia mahdollisia aivoja, joissa on 10^11 neuroonia joista jokainen kytkeytyy 5000 neurooniin". Riittää, kun löydetään yksi toimiva, joka korreloi neurologisiin tutkimuksiin.
Ja sitten myöhemmin toetutus, johon voidaan ladata oikean ihmisen, yksilön, aivojen koko konfiguraatio muistineen, oppimisineen, siis koko persoonallisuus. Tämä voi olla mahdollista esim 2045.
Fyysisesti tämä soluautomaatti saa olla yksiulotteinenkin mutta nämä ulottuvuudet olivat havainnollistamiseksi, jotta tilannetta voisi hahmottaa lineaarisesti.
Mutta selkeitä perusasioita: Väitän että biologiset aivot tuottavat massiivisesti ns. sirottuvaa tietoa, eli aivosolut reagoivat ja tuottavat tietoa jokaisesta vähäpätöisemmästäkin asiasta. Eikä ole privaattimuuttujia vaan kaikki vaikuttaa kaikkeen. Näiden reaktioiden suuri määrä on suurin ongelma tietokoneelle.
Itse Common Sense ei ole koneen ongelma vaan se ettei sille voida tuottaa tätä tarpeeksi runsasta syötetietoa vaan tyypillistä digitaalimössöä.
Muuten olen kanssasi samaa mieltä, mutta viittaat ilmeisesti tässä Mooren lakiin.
"Vielä muutama vuosi sitten suorittimen laskentateho kaksinkertaistui 1,5-2v välein nostamalla kellotaajuutta..."
Itseasiassa ns. Mooren laki pätee edelleen. Mooren laki ei puhu mitään prosessorien kellotaajudesta jne, vaan transistorien lukumäärästä mikropiirissä. Mooren laki sanoo, että yhdessä mikropiirissä olevien transistorien lukumäärä tuplaantuu joka toinen vuosi. Tämä pätee edelleen tietokoneiden suorittimien yhteydessä, ja näillä näkymin Mooren laki tulee pätemään vielä vuosia.