Förslag på program som kör på tusentals CPU-kärnor?

Permalänk

Förslag på program som kör på tusentals CPU-kärnor?

Om det var lika enkelt att skriva ett program som kör i ett distribuerat system som att skriva ett program som kör lokalt, vad skulle ni hitta på för program då?

Med ett distribuerat system så tänker jag på en (stor) samling datorer som var och en har CPU (flera kärnor), RAM och disk, och som är anslutna med ett nätverk, och ett program som kör på det distribuerade systemet kan använda dessa resurser som att det vore en enda stor dator.

Ett förslag är ett massivt multispelar-spel som har många AI-spelare och som använder tusentals CPU-kärnor för att köra AI och för att simulera fysiken i spelet.

Ett exempel på ett program som används idag är Googles sökmotor som kör på tusentals datorer.

Permalänk
Hedersmedlem

Tog bort ett inlägg som inte bidrog med något.

Mvh
Moderator Shimonu

Permalänk
Medlem
Skrivet av VirtualIntent:

Ett exempel på ett program som används idag är Googles sökmotor som kör på tusentals datorer.

2010 estimerades det att Google kör på nästan en miljon servrar. Nu har dom ju iof mer tjänster än sin sökmotor.

Vad jag skulle göra om det vare lika lätt att programmera ett lokalt system som en distribuerat vore nog en databas utan de problem som finns i dagsläget för att hålla ACID (https://en.wikipedia.org/wiki/ACID) samt att hålla det snabbt.

Permalänk
Skrivet av iXam:

Vad jag skulle göra om det vare lika lätt att programmera ett lokalt system som en distribuerat vore nog en databas utan de problem som finns i dagsläget för att hålla ACID (https://en.wikipedia.org/wiki/ACID) samt att hålla det snabbt.

Men antag att det redan finns en sådan databas då, vad skulle du utveckla för program som använder sig av databasen?

Permalänk
Medlem

Det stora, som pratas om i många många är väl att ta bort datorn eller din konsol och bara erbjuda tjänster över internet.

Som exempel skulle väl Microsoft, som har pengar kunna utveckla en ny plattform där du bara pluggar in en handkontroll via usb till din Smart-TV och laddar ner Xbox konsol appen, sedan så streamas bara allt material till din tv via deras datacenter i Sverige. Så all CPU och GPU kraft finns i deras Datacenter, de behöver inte utveckla och sälja dessa produkter i butiker.

Permalänk
Medlem

Vädersimuleringar.
Det vore ju trevligt att kunna lita på väderleksrapporten på morgonen

Permalänk
Medlem
Skrivet av VexedRelic:

Det stora, som pratas om i många många är väl att ta bort datorn eller din konsol och bara erbjuda tjänster över internet.

Som exempel skulle väl Microsoft, som har pengar kunna utveckla en ny plattform där du bara pluggar in en handkontroll via usb till din Smart-TV och laddar ner Xbox konsol appen, sedan så streamas bara allt material till din tv via deras datacenter i Sverige. Så all CPU och GPU kraft finns i deras Datacenter, de behöver inte utveckla och sälja dessa produkter i butiker.

On topic: där håller jag med dig även om man nog bör hitta något annat sätt att koppla handkontrollerna än usb, man blir så begränsad i räckvidd då.

Off topic: mitt tidigare inlägg som togs bort syftade på en känd del av Liftarens guide till galaxen där dom matar in all världens information i en liknande dator för att söka meningen med livet men det enda dom får till svar är siffran 42.

Visa signatur

Citera mig gärna så jag hittar tillbaka :-)

| CPU: I5 4670K | MB: Gigabyte Z97MX-Gaming 5 | RAM: Corsair 16GB VengeanceLP | GPU: Sapphire Rx570 mini med påmoddad Noctua NF-A12 | PSU: Corsair RM550x | Cpukylare: Noctua NH-L12 | Chassifläkt: Noctua NF-S12B | Chassi: Fractal Design Node 605 | SSD: Kingspec SSD M.2 256GB

Permalänk
Hjälpsam

Rendera extremt komplexa 3d animationer, förhållandevis lätt att distribuera frames och delar av frames till enskilda enheter som sedan sammanställs centralt hos en "task master".

Nackdelen att köra saker som MMO AI och liknande är latancy och att alla individer är beroende av varandra på deras reaktioner och positioner så blir enormt mycket overhead och mycket latancy mellan. Optimalt för distribuerad beräkning är när du kan ge delar av uppgifter till olika enheter och sedan samla in och ge nya batchar.

Folding@home och SETI@home är bra exempel på batchning av workload.

Visa signatur

Allt jag säger/skriver här är mina egna åsikter och är inte relaterade till någon organisation eller arbetsgivare.

Jag är en Professionell Nörd - Mina unboxing och produkttester (Youtube)
Om du mot förmodan vill lyssna på mig - Galleri min 800D med 570 Phantom SLI

Permalänk

Tack för era svar!

Skrivet av Fluf:

Nackdelen att köra saker som MMO AI och liknande är latancy och att alla individer är beroende av varandra på deras reaktioner och positioner så blir enormt mycket overhead och mycket latancy mellan. Optimalt för distribuerad beräkning är när du kan ge delar av uppgifter till olika enheter och sedan samla in och ge nya batchar.

Så min fråga (som jag inser inte var så tydligt ställd) är alltså inte vad som är optimalt för distribuerade beräkningar, utan att ifall det var lika enkelt att skriva ett distribuerat program som ett lokalt program, vad skulle du i så fall vilja utveckla för program som använder många processorkärnor (och andra resurser som minne och disk). Underförstått så antar jag att det finns program som du/ni skulle vilja utveckla men att det inte är aktuellt idag eftersom det är svårt/krångligt att skriva distribuerade program.

Ett spel med kraftfull AI är ett sånt exempel tänker jag, men å andra sidan så finns det väl många andra anledningar utöver att det skulle köra distribuerat som gör att det är svårt att utveckla. Men det kanske finns andra typer av program som inte är speciellt svåra att skriva för att köra lokalt, men där problemet snarare ligger i att köra det distribuerat.

Permalänk
Medlem

Det stora problemet är inte att skriva program som går att köra distribuerade. Det är lite krångligare än att skriva vanliga sekventiella program, men inte så väldigt mycket svårare.

Nej, det svåra är att göra program som faktiskt kan dra nytta av mer än ett fåtal trådar.

Vissa problem, som brukar kallas "embarrasingly parallell", är enkla att sprida ut på godtyckligt antal processorer och få en prestandavinst som är näst intill linjär med antalet processorer. Raytracing är ett klassiskt exempel på ett sådant problem.

Den stora merparten av problem/program är däremot svåra att få att utnyttja en massa distribuerade resurser på ett effektivt sätt - och i de flesta fall finns det ingen som vet ens teoretiskt hur man kan göra det.

Om man nu rent hypotetiskt antar att det var lätt att parellellisera program, vilka program skulle man vilja göra det med? Svaret är i princip detsamma som det på frågan "Om du kunde få en CPU som var tio gånger snabbare än den du har, vilka program skulle du vilja ha den till?", nämligen: ALLA program som har behov av mer CPU-kraft - vilket är merparten av dem.

Permalänk
Medlem

Jag kanske missförstår frågan, men jag skulle nog köra typ allt på det viset om det var enkelt.

Permalänk
Skrivet av Erik_T:

Nej, det svåra är att göra program som faktiskt kan dra nytta av mer än ett fåtal trådar.

Vissa problem, som brukar kallas "embarrasingly parallell", är enkla att sprida ut på godtyckligt antal processorer och få en prestandavinst som är näst intill linjär med antalet processorer. Raytracing är ett klassiskt exempel på ett sådant problem.

Den stora merparten av problem/program är däremot svåra att få att utnyttja en massa distribuerade resurser på ett effektivt sätt - och i de flesta fall finns det ingen som vet ens teoretiskt hur man kan göra det.

Jag håller med om ditt resonemang. Men anta att det finns ett antal problem som ligger någonstans mellan "pinsamt parallella" och "inte alls parallella".

Skrivet av Erik_T:

Om man nu rent hypotetiskt antar att det var lätt att parellellisera program, vilka program skulle man vilja göra det med? Svaret är i princip detsamma som det på frågan "Om du kunde få en CPU som var tio gånger snabbare än den du har, vilka program skulle du vilja ha den till?", nämligen: ALLA program som har behov av mer CPU-kraft - vilket är merparten av dem.

Skrivet av lorgix:

Jag kanske missförstår frågan, men jag skulle nog köra typ allt på det viset om det var enkelt.

Frågan är otydligt formulerad, ursäkta för detta.

Men är det verkligen alla program som behöver mera datorresurser? När jag har funderat så kommer jag på ganska många program som inte skulle ha så stor nytta av fler kärnor, så som mejlprogrammet eller nått enkelt spel som sudoku. Det finns en hel del program inom "Big Data-området" som kan använda många kärnor, men denna typ av tillämpning känns lite oinspirerande tycker jag. Jag tänker mig att det borde finnas lite roligare program som man kan köra på sin fritid som faktiskt skulle ha nytta av fler CPU-kärnor än vad som sitter i en enda dator idag.

Jag tänker på när Amigan kom så var den klart kraftfullare än de andra datorerna som fanns, och då utvecklades det program som inte hade gått att göra tidigare. Det fanns en demo-scen där man försökte utnyttja hårdvarans kapacitet maximalt. Jag funderar på vilka program skulle kunna utvecklas om man har en (distribuerad) dator med väldigt många kärnor. Frågan är som sagt väldigt otydlig, så peka gärna ut på vilka sätt jag tänker "fel"!

Permalänk
Medlem
Skrivet av VirtualIntent:

Jag håller med om ditt resonemang. Men anta att det finns ett antal problem som ligger någonstans mellan "pinsamt parallella" och "inte alls parallella".

Frågan är otydligt formulerad, ursäkta för detta.

Men är det verkligen alla program som behöver mera datorresurser? När jag har funderat så kommer jag på ganska många program som inte skulle ha så stor nytta av fler kärnor, så som mejlprogrammet eller nått enkelt spel som sudoku. Det finns en hel del program inom "Big Data-området" som kan använda många kärnor, men denna typ av tillämpning känns lite oinspirerande tycker jag. Jag tänker mig att det borde finnas lite roligare program som man kan köra på sin fritid som faktiskt skulle ha nytta av fler CPU-kärnor än vad som sitter i en enda dator idag.

Jag tänker på när Amigan kom så var den klart kraftfullare än de andra datorerna som fanns, och då utvecklades det program som inte hade gått att göra tidigare. Det fanns en demo-scen där man försökte utnyttja hårdvarans kapacitet maximalt. Jag funderar på vilka program skulle kunna utvecklas om man har en (distribuerad) dator med väldigt många kärnor. Frågan är som sagt väldigt otydlig, så peka gärna ut på vilka sätt jag tänker "fel"!

Det finns en massvis program/problem som ligger mellan "pinsamt parallella" och "inte alls parallella". Det var mest dem jag åsyftade. Problemet med merparten av dem är att medan det oftast går hyfsat att dela upp dem på ett fåtal (4-5) trådar/kärnor så är det svårt att sprida ut dem på fler på ett effektivt sätt - så att man inte förlorar mer prestanda på den extra kommunikation som behövs mellan trådarna än man vinner av de extra kärnorna.

(Det finns en anledning till att få persondatorer som som säljs idag har fler än fyra kärnor trots att det finns CPUer med fler - få program har nytta av fler kärnor än så.)

Det finns en mängder med program som skulle kunna använda mer CPU-kraft om det fanns, men inga som mer specifikt kräver en rent distribuerad modell.

Den enda anledningen till att använda distribuerade system alls är att vi inte kan bygga tillräckligt kraftfulla enkel-kärniga system.

Frågan "Om det var enkelt att skriva program som effektivt utnyttjar system med tusentals kärnor, vad skulle man ha ett sådant system till?" har exakt samma svar som "Om man hade ett enkel-kärnigt system som var tusentals gånger snabbare än nuvarande system, vad skulle man ha ett sådant system till?"

Permalänk
Medlem

Allt som idag görs med hjälp av en GPU skulle ju istället kunna köras på en CPU med miljoner kärnor. De flesta problem som kräver parallella trådar löses ju med hjälp av grafikkort (CUDA et al).

Tror inte det finns något man idag inte kan göra för man inte har en miljon CPU-kärnor - Då använder man ju bara en GPU istället som utför jobbet utmärkt. - Sen som någon tidigare påpekat skulle ju samtliga program som existerar må bra av att kunna utnyttja fler kärnor samtidigt.

Någonting som hade varit helt magnifikt hade ju varit om man hade en form av lastbalanserare som löste det automatiskt - Man skickar en hel hög med jobb till balanseraren, som portionerar det till X trådar/processorer/kärnor och den hanterar också svaret och kön. - Då skulle man inte längre ha svårt att skriva program som utnyttjar parallella trådar, utan det skulle skötas automatiskt - Alla program på jorden skulle bli otroligt mycket snabbare!

Permalänk
Medlem
Skrivet av FlashTec:

On topic: där håller jag med dig även om man nog bör hitta något annat sätt att koppla handkontrollerna än usb, man blir så begränsad i räckvidd då.

Vore rätt så enkelt att köra en typ av trådlös brygga via USB som handkontrollen skickar signaler till.

Annars vad gäller tråden så tror jag i vissa fall att det kan bli problem med CPU kopplat i ett nätverk för du kommer ha en latens på millisekunder där instruktioner som utförs av en cpu kan beräknas ned till nano sekunder. Så du kommer troligtvis få en interrupt delay för nätverks lagret inte är lika snabbt. Fast det beror helt på vad det är för ide du vill skapa eller utföra.

Permalänk
Medlem
Skrivet av VexedRelic:

Vore rätt så enkelt att köra en typ av trådlös brygga via USB som handkontrollen skickar signaler till.

Annars vad gäller tråden så tror jag i vissa fall att det kan bli problem med CPU kopplat i ett nätverk för du kommer ha en latens på millisekunder där instruktioner som utförs av en cpu kan beräknas ned till nano sekunder. Så du kommer troligtvis få en interrupt delay för nätverks lagret inte är lika snabbt. Fast det beror helt på vad det är för ide du vill skapa eller utföra.

Jo tänkte också på det där med latens efter att jag skrev inlägget. Känns som det blir rätt jobbigt med många typer av spel, ta bara någon form av racing spel där man dundrar fram i 300 knyck mot en hårnålskurva, snacka om att det inte får lagga i det läget för då har man ju lyckats lämna landet innan man inser att det precis gick åt pipskjutsingen

Vore nog bättre att utnyttja tekniken för att räkna ut något viktigt typ hur man får religion och politik att fungera tillsammans eller hur man får längre räckvidd på elbilar utan att köra med skarvsladd

Visa signatur

Citera mig gärna så jag hittar tillbaka :-)

| CPU: I5 4670K | MB: Gigabyte Z97MX-Gaming 5 | RAM: Corsair 16GB VengeanceLP | GPU: Sapphire Rx570 mini med påmoddad Noctua NF-A12 | PSU: Corsair RM550x | Cpukylare: Noctua NH-L12 | Chassifläkt: Noctua NF-S12B | Chassi: Fractal Design Node 605 | SSD: Kingspec SSD M.2 256GB

Permalänk
Skrivet av Ernesto:

Någonting som hade varit helt magnifikt hade ju varit om man hade en form av lastbalanserare som löste det automatiskt - Man skickar en hel hög med jobb till balanseraren, som portionerar det till X trådar/processorer/kärnor och den hanterar också svaret och kön. - Då skulle man inte längre ha svårt att skriva program som utnyttjar parallella trådar, utan det skulle skötas automatiskt - Alla program på jorden skulle bli otroligt mycket snabbare!

Ja det låter ju lysande! Om du hade en sån lastbalanserare, vilket typ av program skulle du vilja snabba upp då först och främst?

Skrivet av VexedRelic:

Annars vad gäller tråden så tror jag i vissa fall att det kan bli problem med CPU kopplat i ett nätverk för du kommer ha en latens på millisekunder där instruktioner som utförs av en cpu kan beräknas ned till nano sekunder. Så du kommer troligtvis få en interrupt delay för nätverks lagret inte är lika snabbt.

Precis, så när man skriver programmet så behöver man dela upp programmet i delar som kan köra så mycket fristående (utan att kommunicera/synkronisera) som möjligt. Men så gör man idag också även när man skriver program med många trådar som kör på en (icke-distribuerad) processor med flera kärnor.

Skrivet av VexedRelic:

Fast det beror helt på vad det är för ide du vill skapa eller utföra.

Exakt.

Skrivet av FlashTec:

Vore nog bättre att utnyttja tekniken för att räkna ut något viktigt typ hur man får religion och politik att fungera tillsammans eller hur man får längre räckvidd på elbilar utan att köra med skarvsladd

Det låter som att vi skulle behöva programmera en stark AI som kan lösa alla problem åt oss?

Permalänk
Medlem

Varför inte ett spel med grafik lika bra som verkligheten.. om du har 1.000.000 eller fler processorer så borde det ju gå ?

Permalänk
Medlem

Ett väldigt enkelt svar på frågan "Förslag på program som kör på tusentals CPU-kärnor?" skulle vara alla program som använder sig av grafikkortet. Ett grafikkort är uppbyggt av tusentals processorer.
Exempel skulle kunna vara spel (såklart) och andra program med tung grafik, men även bitcoin mining.

Visa signatur

MODERMODEM: Asus ROG Strix Z270E Gaming | i7 7700K | Corsair Hydro H110 | Kingston HyperX Savage 32GB DDR4 RAM | Asus GeForce RTX 3060 Ti TUF OC | Crucial BX100 500GB SSD | Phanteks Enthoo EVOLV | SilverStone Strider Evolution 1200W |

Permalänk
Medlem
Skrivet av VirtualIntent:

Ja det låter ju lysande! Om du hade en sån lastbalanserare, vilket typ av program skulle du vilja snabba upp då först och främst?

Precis, så när man skriver programmet så behöver man dela upp programmet i delar som kan köra så mycket fristående (utan att kommunicera/synkronisera) som möjligt. Men så gör man idag också även när man skriver program med många trådar som kör på en (icke-distribuerad) processor med flera kärnor.

Exakt.

Det låter som att vi skulle behöva programmera en stark AI som kan lösa alla problem åt oss?

Någonting i stil med Cyberdynes skynet kanske

Bara att konstatera i såna fall att alldeles för stora datorer tillsammans med smarta AI är ingen bra idé

Visa signatur

Citera mig gärna så jag hittar tillbaka :-)

| CPU: I5 4670K | MB: Gigabyte Z97MX-Gaming 5 | RAM: Corsair 16GB VengeanceLP | GPU: Sapphire Rx570 mini med påmoddad Noctua NF-A12 | PSU: Corsair RM550x | Cpukylare: Noctua NH-L12 | Chassifläkt: Noctua NF-S12B | Chassi: Fractal Design Node 605 | SSD: Kingspec SSD M.2 256GB

Permalänk
Medlem

Alla tunga jävla java applikationer som har interna dependencies som gör att de inte kan skala ut så det enda alternativet är att köpa fetare servrar.

Skickades från m.sweclockers.com

Permalänk
Skrivet av Sir. Haxalot:

Alla tunga jävla java applikationer som har interna dependencies som gör att de inte kan skala ut så det enda alternativet är att köpa fetare servrar.

Kan du ge ett exempel på en sån applikation? Kan den applikationen dra nytta av att ha tillgång till fler kärnor?